2010-09-14 196 views
1

当我使用PHP的mkdir()创建目录时,文件夹的所有者是'apache'。当我通过FTP创建一个目录时,所有者是'ftpadmin'。Apache文件夹权限

出于某种奇怪的原因,使用PHP的rename()函数,我无法将任何文件移动到“apache”拥有的目录中。我有chmod()文件和目录777和0777,但'阿帕奇'拒绝将任何文件移动到它创建的目录。我可以将'apache'文件移动到'ftpadmin'目录中。我已经尝试了chmod()mkdir()以及777,0777,755,0755,1777,01777和更多。

这些目录需要由我的客户端动态生成,并且需要将文件移入和移出。

服务器是一个专用虚拟服务器,我可以ssh进入并拥有管理权限。

回答

1

呼吸安全模式功能? http://www.php.net/manual/en/features.safe-mode.functions.php

rename()检查正在运行的文件或目录是否与正在执行的脚本具有相同的UID(所有者)。检查脚本所在的目录是否与正在执行的脚本具有相同的UID(所有者)。

如果安全模式打开,请将其关闭,然后解决它在适当级别提供的功能。如果这不是问题,那么显示php无疑会发出的实际错误可以帮助我们很多。

+0

谢谢!我将php.ini错误报告设置为E_ALL,这正是返回的错误。奇怪的是,我有PHP(“apache”用户)创建目录和文件(或上传),但由于某种原因,文件夹和文件被分配给不同的用户... – Nick 2010-09-16 19:02:46

0

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') 

仍然难过,因为我无法重现错误,也无法兑现自己。希望你可以发布你收到的错误(许可被拒绝?)或指出我的实验与你的应用程序有什么不同。

+0

来自Apache的chown不会改变任何正确设置的系统上的任何东西。 – unbeli 2010-09-14 21:57:16

+1

你不能用chown“放弃”文件,所以你不能把ftpadmin文件传给apache。只有root可以做到这一点。 – 2010-09-14 22:05:19

+0

是的,谢谢,我知道我只是没有想到。 upvoted强调我的错误信息。 – 2010-09-14 22:35:11