我有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
答案 0 :(得分:0)
由于这显然是权限错误,因此请确保通向access.log的每个父文件夹必须将该组设置为 adm 或 syslog 。
导致access.log的每个文件夹必须至少具有读取和执行(g+rx
)的组权限,以允许PHP下降到每个子目录。
如果我是你,我会更改apache配置,将文件写入Web根目录中的公共文件夹(因为日志文件在您的应用程序中显然是必不可少的)。这样可以避免修改系统文件夹权限,这可能很危险,尤其是在Web应用程序中。