当我使用PHP的mkdir()
创建目录时,文件夹的所有者是'apache'。当我通过FTP创建目录时,所有者是'ftpadmin'。
由于某些奇怪的原因,使用PHP的rename()
函数,我无法将任何文件移动到'apache'所拥有的目录中。我chmod()
文件和目录都是{7}和0777,但'apache'拒绝将任何文件移动到它创建的目录中。我可以将'apache'移动到'ftpadmin'目录中。我已尝试使用777,0777,755,0755,1777,01777等chmod()
和mkdir()
。
目录需要由我的客户端动态生成,文件需要移入和移出。
服务器是我可以使用的专用虚拟服务器,具有管理员权限。
答案 0 :(得分:1)
Perhapse安全模式功能? http://www.php.net/manual/en/features.safe-mode.functions.php
rename()检查正在操作的文件或目录是否与正在执行的脚本具有相同的UID(所有者)。检查脚本运行的目录是否与正在执行的脚本具有相同的UID(所有者)。
如果启用了安全模式,请将其打开,并以适当的级别解决其提供的功能。如果这不是问题,显示实际错误php毫无疑问会散发出来可以帮助我们很多。
答案 1 :(得分: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')
仍然很难过,因为我无法重现错误或赎回自己。希望您可以发布您收到的错误(权限被拒绝?)或指出我的实验与您的应用程序的不同之处。