如何跨SMB安装进行PHP复制

时间:2011-07-10 02:19:20

标签: php linux permissions copy smb

我有一个简单的脚本,可以将文件从一个SMB挂载复制到另一个。源文件系统是相同的,但Web服务器是不同的。我正在使用PHP来处理该文件,方法是将其复制到临时目录,然后在其上执行其他任务。这个设置在一个时间点工作,但它似乎不再正常工作。有人能指出我正确的方向吗?

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

php代码

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

错误

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

文件夹权限(不是mount,而是文件服务器上的源文件夹):

/media/folder = 777 
/media/folder2/temp = 777

3 个答案:

答案 0 :(得分:1)

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

可能会为你工作。

答案 1 :(得分:0)

听起来像一个特定于权限和操作系统而不是PHP的问题..什么是网络服务器?运行的服务器是什么?没人:没有人? can nobody:nobody或www-root:www-root将数据读/写到您尝试访问的目录中?

sudo su - nobody

  • 可能不会工作,因为它很可能会有/bin/false shell
  • 没有人可能不是正确的帐户.. ps auxw | grep apache | awk {'print $1'}并查看其正在运行的用户...然后尝试使用sudo
  • 切换到该帐户

在PHP可以访问以编写文件之前,您需要确保运行网络服务器的用户 ... 可以读取/写入您正在尝试copy的目录。

答案 2 :(得分:0)

我将命令更改为:

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

显然,处理SMB共享上的文件比我想象的要困难得多。重新启动计算机时应该删除该文件,或者可能定期删除该文件,具体取决于系统设置。