PHP fopen()即使具有广泛的开放权限也会失败

前端之家收集整理的这篇文章主要介绍了PHP fopen()即使具有广泛的开放权限也会失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将我的LAMP从我的 Windows Server迁移到运行Debian 6的VPS.但是,大多数工作都是正常的,但是其中一个 PHP脚本无法写入其配置的日志文件.我无法确定为什么,所以我写了一个新的,简单的,有创意的PHP脚本来测试这个问题.
<?PHP
        ini_set('display_errors',1);
        error_reporting(E_ALL);
        echo exec('whoami');
        $log = fopen('/var/log/apache2/writetest/writetest.log','a');
        if ($log != NULL)
        {
                fflush($log);
                fclose($log);
                $log = NULL;
        }
?>

但是,它失败了结果:

www-data Warning: fopen(/var/log/apache2/writetest/writetest.log): Failed to open stream: Permission denied in /var/www/_admin/PHPwritetest.PHP on line 5

>虽然我永远不会正常进行,为了帮助诊断,我将/var/log/apache2/writetest/writetest.log设置为chmod 777.
>目录和文件均由www-data:www-data拥有.
>文件是用触摸创建的.

我运行strace来验证哪个进程正在执行open:

[pid 21931] lstat("/var/log/apache2/writetest/writetest.log",0x7fff81677d30) = -1 EACCES (Permission denied)
[pid 21931] lstat("/var/log/apache2/writetest",0x7fff81677b90) = -1 EACCES (Permission denied)
[pid 21931] open("/var/log/apache2/writetest/writetest.log",O_RDWR|O_CREAT|O_TRUNC,0666) = -1 EACCES (Permission denied)

我检查并且pid 21931确实是在www数据下运行的apache2子进程之一.正如你所看到的,我还包括echo exec(‘whoami’);在脚本中确认该脚本由www-data运行.

其他说明:

> PHP没有以安全模式运行
>没有设置PHP open_basedir
>版本信息:Apache / 2.2.16(Debian)PHP / 5.3.3-7 squeeze3与Suhosin-Patch mod_ssl / 2.2.16 OpenSSL / 0.9.8o
> uname -a:2.6.32-238.19.1.el5.028stab092.2#1 SMP Thu Jul 21 19:23:22 MSD 2011 x86_64 GNU / Linux
>这是在OpenVZ下运行的VPS
> ls -l(file):-rwxrwxrwx 1 www-data www-data 0 Sep 8 18:13 writetest.log
> ls -l(目录):drwxr-xr-x 2 www-data www-data 4096 Sep 8 18:13 writetest
> Apache2的父进程以root身份运行,子进程根据www数据进行处理
> selinux没有安装(感谢Fabio提醒我提到这个)
>我已经重新启动了apache很多次,并重新启动了服务器

请记住,为了达到一个文件,所有的父目录必须可以被www-data读取.您的strace输出似乎表明即使访问/ var / log / apache2 / writetest也是失败的.确保www数据具有以下目录的权限:

> /(r-x)> / var(r-x)> / var / log(r-x)> / var / log / apache2(r-x)> / var / log / apache2 / writetest(rwx)> /var/log/apache2/writetest/writetest.log(rw-)

原文链接:https://www.f2er.com/php/130539.html

猜你在找的PHP相关文章