Ubuntu 20.04下PHP无法读取public_html上层目录文件问题咨询
问题排查与解答
1. 浏览器触发的PHP程序能否访问public_html目录外的文件
默认是可以的,PHP本身没有强制限制只能访问站点根目录(public_html)内的文件,访问限制通常来自两个配置项:
open_basedir:php.ini中配置的参数,会把PHP脚本可访问的文件范围限制在指定的目录列表中。很多站点配置会默认将该参数设置为仅包含public_html目录和系统临时目录,若未把上层目录加入配置,就会导致访问被拦截。你可以在脚本中加入phpinfo();查看当前环境的open_basedir配置值,注意部分环境会在站点的PHP-FPM池配置、Apache虚拟主机配置里单独覆盖该参数,不只有全局php.ini会生效。- 文件系统权限:Ubuntu 20.04默认环境下,Apache、PHP-FPM的运行用户都是
www-data,该用户需要拥有目标文件的读权限,以及目标文件所在所有父级目录的执行权限(进入目录的权限),否则也会出现访问失败。
2. 你的报错原因排查
你当前贴出的代码中使用的是绝对路径/var/www/domain.com/file.txt,但报错信息显示的是fopen(file.txt),说明实际运行的代码和你贴出的代码不一致,这是首要排查点:
- 优先确认你是否在代码中误写为相对路径
fopen("file.txt", "r"):如果使用相对路径,PHP会以当前脚本的工作目录(默认是脚本所在的public_html目录)为基准查找文件,就会尝试读取/var/www/domain.com/public_html/file.txt,自然找不到对应文件。 - 如果确认代码确实使用了正确的绝对路径,再排查权限问题,执行以下命令完成授权即可:
# 给目标文件分配www-data用户组读权限 sudo chown :www-data /var/www/domain.com/file.txt sudo chmod g+r /var/www/domain.com/file.txt # 给上层目录分配www-data用户组进入权限 sudo chmod g+x /var/www/domain.com/
内容的提问来源于stack exchange,提问作者harry_belefonte
相关产品推荐
相关产品推荐

