You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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目录下的其他内容,非常不安全,谨慎操作:

  1. 给/root目录添加其他用户的执行权限(只有有执行权限才能进入目录):
    sudo chmod o+x /root
    
  2. 给changelog.txt添加其他用户的读取权限:
    sudo chmod o+r /root/changelog.txt
    
  3. 检查PHP的open_basedir限制:
    编辑PHP配置文件(比如/etc/php/8.2/apache2/php.ini,版本号根据你的实际情况调整),找到open_basedir一行,把/root加入允许列表:
    open_basedir = /var/www/:/tmp/:/root/
    
  4. 重启Apache生效:
    sudo systemctl restart apache2
    

排查错误的小技巧

如果还是不行,建议查看Apache的PHP错误日志,能看到具体的错误原因(是权限拒绝还是真的路径错了):

tail -f /var/log/apache2/error.log

然后访问你的changelog.php,就能实时看到错误信息,针对性解决。

内容的提问来源于stack exchange,提问作者Ankh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:28:46