【发布时间】:2011-07-29 12:14:44
【问题描述】:
当我的安装脚本识别出一个文件(日志文件)不可写时——作者:
is_writable('myerror.log');
我想向“冲浪者”(软件管理员)展示如何解决此问题。哦,天哪,不是每个“软件管理员”都很熟练:-(
显示消息: 我想向软件管理员表明,如果文件的用户/组与网络服务器用户/组不同,他应该将文件的所有者设置为运行网络服务器的用户(我不想建议让它成为世界可写)。
如果 webservers 用户或组适合文件用户或组,我想表明软件管理员应该运行 chmod。
背景 我意识到我的 apache 进程在 9x www-data 和 1x root 下运行。如果我打电话给
$scriptRunnerUserId = getmyuid();
$scriptRunnerGroupId = getmygid();
每个我都会得到 0,意思是“root”和“root”。但是,如果我有一个文件所有者=“root”和组=“root”并且 0664 is_writeable() 仍然返回false。仅当我设置 0666(世界可写)时,它才返回 true。如果我设置 owner="www-data" 和 chmod 0644 它是可写的。意思是:getmyuid() 不返回预期值。
“开发人员不熟练”的案例? ;-) (如果可能的话,我不想进行 exec() 调用)
PS:请不要责怪我的 apache 是 root 用户(它是用于开发的虚拟机)。
【问题讨论】:
-
使用
posix_getpid/posix_getgid作为网络服务器运行的用户(这很可能是您想要拥有该文件的用户)。 -
不要破坏整个想法,但实际上可能有一个不可写的 0777,出于各种其他原因。
标签: php file permissions