即使脚本,父文件夹和目标文件都由同一用户拥有,fopen也会失败

时间:2011-11-28 13:51:00

标签: php permissions fopen

即使在服务器上激活安全模式,如果脚本文件,目标文件和父文件夹归同一用户所有,fopen也应该没有任何问题。任何想法为什么会这样? 这些文件有755的权限。 感谢您的时间和精力。

$filename="file.html";
echo "Current User: ".get_current_user()."; UID: ".getmyuid()."; GID: ".getmygid()."<br/>";
echo "Current PID: ". getmypid() . "<br/>";
echo "Parent folder owner: ". fileowner(".") . "<br/>";
echo "$filename owner: " . fileowner($filename) . "<br/>";
echo "Current folder is writable: " . is_writable($filename);

输出:

  

当前用户:vnnamp; UID:32024; GID:32026   父文件夹所有者:32024   file.html所有者:32024   当前文件夹是可写的:false

3 个答案:

答案 0 :(得分:1)

您确定您的脚本在正确的目录中运行吗?

如果不是,那么您传递的文件名可能不存在,这就是is_writable()返回false的原因。使用getcwd()打印出脚本正在运行的目录(可以使用chdir()设置)或使用绝对文件名。

编辑:只是总结下面的讨论:

  • 尝试绝对路径名称:Nope
  • 检查php.ini和httpd.conf中的open-basedir:Nope
  • 尝试使用$_SERVER['DOCUMENT_ROOT']前缀路径:Nope
  • getmyuid()返回脚本文件所有者而非进程所有者 检查不匹配文件所有者并处理用户 posix_getpwuid(posix_geteuid()):是的,是问题的原因

答案 1 :(得分:0)

如果用户是文件的所有者,则并不意味着文件应该是用户可写的。它可能具有0444左右的权限。

答案 2 :(得分:0)

缓存is_writable()函数的结果。尝试使用clearstatcache()

清除它