PHP - readfile() 无法打开流:权限被拒绝 - 但为什么呢?
PHP - readfile() failed to open stream: Permission denied - but why?
我有 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 虚拟主机配置中的某些内容?
添加: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
因为这显然是一个权限错误,请确保指向 access.log 的每个父文件夹都将组设置为 adm 或 syslog.
指向 access.log 的每个文件夹必须至少具有读取 和 执行 (g+rx
) 的组权限以允许 PHP进入每个子目录。
如果我是你,我会更改 apache 配置以将文件写入你的 Web 根目录中一个公共不可访问的文件夹(因为日志文件显然在你的应用程序中是必不可少的)。这使您免于修改系统文件夹权限,这在 Web 应用程序中尤其危险。
我有 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 虚拟主机配置中的某些内容?
添加: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
因为这显然是一个权限错误,请确保指向 access.log 的每个父文件夹都将组设置为 adm 或 syslog.
指向 access.log 的每个文件夹必须至少具有读取 和 执行 (g+rx
) 的组权限以允许 PHP进入每个子目录。
如果我是你,我会更改 apache 配置以将文件写入你的 Web 根目录中一个公共不可访问的文件夹(因为日志文件显然在你的应用程序中是必不可少的)。这使您免于修改系统文件夹权限,这在 Web 应用程序中尤其危险。