我确信这个答案很简单,并且可能不是PHP特定的,但是我试图使用PHP的copy()函数将图像从一个用户复制到另一个用户,作为自定义CMS设置的一部分。
例如:
copy('/home/user1/public_html/images/image.png', '/home/user2/public_html/images/image.png');
其中返回通常情况下:
[function.copy]: failed to open stream: Permission denied
我试过了:
-CHMOD user2的“图像”文件夹到777(只是testing,没有工作)
– 创build一个新的系统组,将两个用户都放入其中,然后将该文件夹分组到该组的ID。 也尝试把用户“阿帕奇”和“无人”在同一组,但没有任何效果。
open_basedir没有启用/configuration(不知道是否重要),PHP不在安全模式。 PHP5处理程序是suPHP,并且suEXEC处于打开状态。 在CentOS 5.6 VPS盒子上运行WHM 11.3。 我相信解决scheme并不困难,但是我search了所有的东西,找不到答案。 谢谢!
PHP脚本通常以Web服务器用户身份运行。 确认Web服务器用户有权读取源文件并写入目标目录。
另外,如果您正在使用Linux,请确认您的SELinux设置不会阻止Web服务器在webroot之外进行操作(请参阅copy()函数手册页上的第一个用户提供的注释 )。
另外请注意,在一般情况下这样做是一个坏主意 – SELinux设置的原因是不让networking服务器在webroot之外搞砸是因为它包含了PHP脚本中存在错误的情况。
如果Web服务器可以读取/写入随机文件系统位置,则可能发生坏事情。 如果您的PHP代码没有正确书写和保护,这些“坏事”可能包括服务器妥协和大量时间/收入损失。
(换句话说, 绝对可以肯定的是,在你做之前你需要做到这一点:-)
解决这些权限问题的一个好方法就是sudo -u apache(或者其他的apache运行),然后尝试自己复制这个文件:
sudo -u apache cp -a /home/user1/public_html/images/image.png /home/user1/public_html/images/image.png
这是否工作?