Apache/Ubuntu环境下PHP跨目录读取文件失败求助
解决PHP无法读取/root/changelog.txt的问题
嘿,这个问题我碰到过不少,核心原因其实是权限限制和Apache运行用户的访问范围问题,咱们一步步来解决:
最安全的解决方案:移动文件到网站目录
/root是root用户的专属家目录,默认权限是700,只有root本人能访问,Apache的运行用户(一般是www-data)根本进不去。所以最稳妥的做法是把文件移到网站相关目录:
- 先复制文件到你的bot目录:
sudo cp /root/changelog.txt /var/www/ankh.ga/public_html/bot/ - 然后修改文件权限,让
www-data能读取:sudo chown www-data:www-data /var/www/ankh.ga/public_html/bot/changelog.txt - 之后在
changelog.php里用相对路径或者绝对路径读取都可以,比如:// 相对路径(相对于changelog.php所在目录) $content = file_get_contents('./changelog.txt'); // 或者绝对路径 $content = file_get_contents('/var/www/ankh.ga/public_html/bot/changelog.txt');
不推荐的方案:直接开放/root目录权限(有安全风险)
如果你坚持要让文件留在/root目录,那得修改目录和文件的权限,但这会让www-data用户能访问root目录下的其他内容,非常不安全,谨慎操作:
- 给/root目录添加其他用户的执行权限(只有有执行权限才能进入目录):
sudo chmod o+x /root - 给changelog.txt添加其他用户的读取权限:
sudo chmod o+r /root/changelog.txt - 检查PHP的
open_basedir限制:
编辑PHP配置文件(比如/etc/php/8.2/apache2/php.ini,版本号根据你的实际情况调整),找到open_basedir一行,把/root加入允许列表:open_basedir = /var/www/:/tmp/:/root/ - 重启Apache生效:
sudo systemctl restart apache2
排查错误的小技巧
如果还是不行,建议查看Apache的PHP错误日志,能看到具体的错误原因(是权限拒绝还是真的路径错了):
tail -f /var/log/apache2/error.log
然后访问你的changelog.php,就能实时看到错误信息,针对性解决。
内容的提问来源于stack exchange,提问作者Ankh
相关产品推荐
相关产品推荐

