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

Fedora35下PHP+Apache报Failed to open stream权限拒绝错误

PHP访问ini文件报Permission denied的解决方案

报错核心是Apache运行的PHP进程没有目标配置文件的读取权限,你之前的权限配置没覆盖全链路,按以下步骤逐一排查修复:

  • 校验全路径遍历权限
    Linux系统下访问文件需要从根目录开始的每一级父目录都对访问用户开放执行(x)权限,任意一级缺权限都会报拒绝访问,不要只给/agrotermos单目录加权限,执行以下命令一键检查全路径权限:
    namei -l /agrotermos/conf/conf.ini
    
    检查输出中每一级路径的权限位:
    • /、/agrotermos、/agrotermos/conf 这三级目录,需要对Apache运行用户开放x权限
    • /agrotermos/conf/conf.ini 文件本身,需要对Apache运行用户开放r权限
      哪一级权限不足就单独补,参考命令:
    # 补目录执行权限
    chmod o+x /agrotermos
    chmod o+x /agrotermos/conf
    # 补配置文件读权限
    chmod o+r /agrotermos/conf/conf.ini
    
  • 排查SELinux拦截(CentOS/RHEL/Rocky/Fedora系系统高发)
    这类发行版默认开启SELinux安全模块,即使文件权限配置正确,Apache进程默认也无权读取/var/www/html站点目录外的文件,先执行以下命令临时关闭SELinux验证:
    setenforce 0
    
    刷新页面如果报错消失,即可确认是SELinux拦截,不要长期关闭SELinux,执行以下命令给目标目录配置合规的安全上下文即可:
    semanage fcontext -a -t httpd_sys_content_t "/agrotermos(/.*)?"
    restorecon -Rv /agrotermos
    
    配置完成后重新开启SELinux:
    setenforce 1
    
  • 校验PHP open_basedir限制
    如果你的PHP开启了open_basedir安全限制,PHP会被禁止访问配置列表外的路径,按以下步骤调整:
    1. 新建phpinfo页面,查看Loaded Configuration File项找到当前加载的php.ini路径
    2. 编辑php.ini,找到open_basedir配置项,将ini文件所在路径追加到允许列表,示例:
      open_basedir = /var/www/html/:/agrotermos/conf/
      
    3. 重启Apache服务生效:
      # RHEL/CentOS系执行
      systemctl restart httpd
      # Debian/Ubuntu系执行
      systemctl restart apache2
      
  • 校验文件所属配置
    注意不同发行版Apache运行用户不同:RHEL/CentOS系为apache,Debian/Ubuntu系为www-data,不要改错用户。执行对应命令递归设置目录所属:
    # RHEL/CentOS系执行
    chown -R apache:apache /agrotermos
    # Debian/Ubuntu系执行
    chown -R www-data:www-data /agrotermos
    

验证技巧:可以在conndb.php中加入echo shell_exec('whoami');,访问页面确认PHP实际运行用户,避免给错误的用户配置权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:33:41