我有一个简单的脚本,可以将文件从一个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
答案 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共享上的文件比我想象的要困难得多。重新启动计算机时应该删除该文件,或者可能定期删除该文件,具体取决于系统设置。