PHP文件不可写:如何通过PHP检查是否需要chmod、chown或chgrp

PHP文件不可写:如何通过PHP检查是否需要chmod、chown或chgrp,php,file,permissions,Php,File,Permissions,当我的安装脚本识别到文件(日志文件)不可写时-通过: is_writable('myerror.log'); 我想向“冲浪者”(软件管理员)展示如何解决这个问题。哦,孩子,不是每个“软件管理员”都很熟练:-( 显示消息: 我想向软件管理员表明,如果文件的用户/组与Web服务器的用户/组不同,他应该将文件的所有者设置为Web服务器运行时使用的用户(我不想建议将其设置为可写) 如果webservers用户或组适合文件用户或组,我想说明软件管理员应该运行chmod 背景我意识到我的apache进

当我的安装脚本识别到文件(日志文件)不可写时-通过:

 is_writable('myerror.log');
我想向“冲浪者”(软件管理员)展示如何解决这个问题。哦,孩子,不是每个“软件管理员”都很熟练:-(

显示消息: 我想向软件管理员表明,如果文件的用户/组与Web服务器的用户/组不同,他应该将文件的所有者设置为Web服务器运行时使用的用户(我不想建议将其设置为可写)

如果webservers用户或组适合文件用户或组,我想说明软件管理员应该运行chmod


背景我意识到我的apache进程在9x www数据和1x根目录下运行

$scriptRunnerUserId = getmyuid();
$scriptRunnerGroupId = getmygid();
我将分别得到0,表示“root”和“root”。但是如果我有一个文件,文件的所有者为“root”和组为“root”,并且文件的编号为0664,则仍然返回false。仅当我设置0666(世界可写)时,它才返回true。如果我设置了owner=“www data”和chmod 0644,则它是可写的。表示:getmyuid()不返回预期值

“开发人员不熟练”一例?;-) (如果可能,我不想进行exec()调用)


PS:请不要因为给我的apache指定了root用户而责怪我(它是一个用于开发的虚拟机)。

假设您在POSIX系统上运行(如果您有root用户,这可能是正确的),您可以尝试使用posix_geteuid之类的方法来查找您的有效用户id。

对于Web服务器运行的用户(很可能是您想要拥有该文件的用户),可以使用
posix_getpid
/
posix_getgid
。这并不是为了打破整个想法,但实际上可以使用不可写的0777,由于各种其他原因。