当我用PHP的mkdir()创建一个目录时,文件夹的‘owner’是'apache‘。当我通过FTP创建目录时,所有者是'ftpadmin‘。
出于某种奇怪的原因,使用PHP的rename()函数,我不能将任何文件移动到'apache‘拥有的目录中。我已经将文件和目录chmod()到了777和0777,但是'apache‘拒绝将任何文件移动到它创建的目录中。我可以让'apache‘将文件移动到'ftpadmin’目录中。我尝试过chmod()和mkdir(),有777,0777,755,0755,1777,01777和更多。
目录需要由我的客户端动态生成,并且需要将文件移入和移出。
该服务器是一个专用虚拟服务器,我可以通过ssh进入该服务器,并对其拥有管理员权限。
发布于 2010-09-15 08:07:26
可能的安全模式功能- http://www.php.net/manual/en/features.safe-mode.functions.php
rename()检查正在操作的文件或目录是否与正在执行的脚本具有相同的UID (所有者)。检查运行脚本的目录是否与正在执行的脚本具有相同的UID (所有者)。
如果安全模式处于打开状态,请将其关闭,并在适当的级别上解决它提供的功能。如果这不是问题所在,那么显示php发出的实际错误无疑会对我们有很大帮助。
发布于 2010-09-15 05:51:27
PHP以Apache用户身份运行。您的FTP帐户正在以用户'fpadmin‘身份运行。这就是所有者不同的原因。你试过chown() php函数(http://php.net/manual/en/function.chown.php)吗?这将更改文件/目录的所有者。
干杯
我第一次投反对票。很刺痛..。尽管这是一个愚蠢的答案..
好的,所以我试着理解你的问题/重复你的错误。这是我尝试过的方法,这是我的结果。希望它至少能对你有所帮助。
我有以下目录结构:
/var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser')
/var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser')
/var/www/public_html/test/ftp_owned.file (chmod = 644 (default), owned by 'ftpuser')然后,在index.php文件中,我有以下代码:
mkdir("./downvoted");
chmod("./downvoted", 0777);
$h = fopen("./i_am_so.sad", "x+");
fwrite($h, "attempting to redeem myself");
fclose($h);
rename("./i_am_so.sad", "./downvoted/i_am_so.sad");
rename("./ftp_owned.file", "./downvoted/ftp_owned.file");产生一个新的目录结构:
/var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser')
/var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser')
/var/www/public_html/test/downvoted (chmod = 0777 via PHP, owned by 'apache')
/var/www/public_html/test/downvoted/i_am_so.sad (permissions = 644 (default), owned by 'apache')
/var/www/public_html/test/downvoted/ftp_owned.file (permissions = 644 (default), owned by 'ftpuser')仍然很悲哀,因为我不能重现这个错误,也不能挽回我自己。希望您可以发布您收到的错误(权限被拒绝?)或者指出我的实验与您的应用程序有何不同。
https://stackoverflow.com/questions/3713169
复制相似问题