PHP - readfile()无法打开流:权限被拒绝 - 但为什么?

时间:2017-10-25 12:06:06

标签: php permissions readfile

我有Ubuntu 16.04,Apache2和php7就可以了。 我不想用PHP读取一些日志文件并打印它们。 所以我做了一个简单的

readfile("/var/log/apache2/access.log");

但这不起作用。我收到这个错误:

Warning: readfile(/var/log/apache2/access.log): failed to open stream: Permission denied in /var/www/test.php on line 2

我很确定我已经设置了权限,Apache和php作为www-data运行,所以我将用户www-data添加到组'adm'和'syslog',因为这些组具有读权限对于整个文件路径和文件本身。 默认情况下,权限为640,但仅当我将其设置为647时,该文件对于php / apache是​​可读的。即使644或646还不够。

为什么?我是否必须在Apache vhost配置中更改某些内容?

添加:ls -alp / var / log / apache2

drw-r----- 2 root adm     4096 Oct 25 11:07 ./
drwxr-xr-x 9 root syslog  4096 Oct 25 10:39 ../
-rw-r----- 1 root adm    47861 Oct 25 14:01 access.log
-rw-r----- 1 root adm    12014 Oct 25 14:01 error.log
-rw-r----- 1 root adm        0 Oct 25 10:40 other_vhosts_access.log

1 个答案:

答案 0 :(得分:0)

由于这显然是权限错误,因此请确保通向access.log的每个父文件夹必须将该组设置为 adm syslog

导致access.log的每个文件夹必须至少具有读取执行(g+rx)的组权限,以允许PHP下降到每个子目录。

如果我是你,我会更改apache配置,将文件写入Web根目录中的公共文件夹(因为日志文件在您的应用程序中显然是必不可少的)。这样可以避免修改系统文件夹权限,这可能很危险,尤其是在Web应用程序中。