2011-07-10 2 views
4

J'ai un script simple qui copie un fichier d'un montage SMB à un autre. Le système de fichiers source est le même, mais le serveur Web est différent. J'utilise PHP pour traiter le fichier en le copiant dans un répertoire temporaire, puis en effectuant des tâches supplémentaires dessus. Cette configuration fonctionnait à un moment donné, mais il semble que cela ne fonctionne plus correctement. Quelqu'un peut me diriger dans la bonne direction?Comment copier PHP sur un support SMB

monte fstab:

//192.168.0.x/share /media/folder smbfs username=user,password=mypass 
//192.168.0.x/share2 /media/folder2 smbfs username=user,password=mypass 

code PHP:

copy('/media/folder/filename.txt','/media/folder2/temp/filename.txt'); 

erreur:

Warning: copy(/media/folder2/temp/filename.txt): failed to open stream: Permission denied in /www/myphp.php on line xx 

autorisations de dossier (pas le montage, mais le dossier source sur le serveur de fichiers):

/media/folder = 777 
/media/folder2/temp = 777 
+0

SELinux fonctionne-t-il? Si c'est le cas, je peux imaginer qu'il n'aime pas parler PHP à SMB. –

+0

SELinux ne fonctionne pas, je ne pense pas. Il n'y a pas de fichier/etc/sysconfig/selinux à chat, ni de programme sestatus sur le serveur de fichiers. –

+0

Juste pour être sûr, 'ls -Z/media/folder' Si SELinux est là, vous aurez l'option' -Z' et vous devriez lister les contextes. –

Répondre

0

j'ai changé la commande:

copy('/media/folder/filename.txt','/tmp/filename.txt'); 

Apparemment, il est plus difficile de traiter les fichiers sur un partage SMB que je pensais. Le fichier doit être supprimé lors du redémarrage de l'ordinateur, ou éventuellement à intervalles réguliers, en fonction de la configuration du système.

0

sonne comme une question qui est spécifique aux autorisations et le système d'exploitation et non PHP .. ce serveur web? Quel est le fonctionnement du serveur? personne: personne? ne peut personne: personne ou www-root: www-root lire/écrire des données dans les répertoires auxquels vous essayez d'accéder?

sudo su - nobody

  • travail ne sera probablement pas, car il aura très probablement une coquille /bin/false
  • personne ne peut-être pas le bon compte .. ps auxw | grep apache | awk {'print $1'} et de voir quel utilisateur il fonctionne comme ... essayez de changer sur ce compte avec sudo

Avant PHP peut avoir accès à écrire les fichiers, vous devez vous assurer que l'utilisateur que le serveur web tourne sous ... a accès en lecture/écriture au répertoire que vous essayez d'utiliser copy.

1
system("cp /media/folder/filename.txt /media/folder2/temp/filename.txt"); 

Peut fonctionner pour vous.

Questions connexes