位置:首页 > 行业软件 > phpinfo被禁用怎么恢复?PHP信息函数开启教程

phpinfo被禁用怎么恢复?PHP信息函数开启教程

时间:2026-06-10  |  作者:318050  |  阅读:0

访问PHP脚本时,如果发现phpinfo()函数调用直接返回空白页,或者抛出报错提示,那多半是它被系统给“拉黑”了。别急,下面这份排查与恢复指南,按步骤来就能搞定。顺便一提:所有操作前记得备份原始配置文件。

一、修改php.ini中disable_functions配置项

phpinfo()被禁用的最常见原因,就是它被写进了disable_functions指令里。把它从那个“黑名单”中移除,问题就解决了一大半。

  • 先找到当前生效的php.ini文件路径。命令行里跑一下php --ini。或者临时写个PHP文件,里面放一句echo php_ini_loaded_file();,运行后就能看到路径。
  • 用文本编辑器打开这个php.ini文件。
  • 搜索disable_functions关键词。你会看到类似这样的配置行:disable_functions = exec,passthru,shell_exec,system,proc_open,popen,phpinfo
  • 把其中的phpinfo从逗号分隔的列表中剔除。注意别手滑删多了逗号,保持语法正确就行。
  • 保存文件,完成修改。

二、检查Suhosin扩展是否拦截phpinfo()

某些服务器开启了Suhosin安全扩展,它有自己的“黑名单”机制。即便php.ini里没禁用phpinfo(),它也能独立拦截。这一点很多人都容易忽略。

  • 在PHP环境中执行php -m | grep suhosin,确认Suhosin是否已加载。
  • 找到suhosin.ini或suhosin.so所在目录,通常位于/etc/php/*/mods-available//usr/local/lib/php/extensions/下。
  • 打开suhosin.ini文件,搜索suhosin.executor.func.blacklist配置项。
  • 如果该行里包含了phpinfo,把它从中删除;如果整行就是suhosin.executor.func.blacklist = "phpinfo",直接注释掉或者清空这个值。
  • 保存文件后,重启Web服务器(Apache或Nginx)以及PHP-FPM服务。

三、验证Web服务器配置是否覆盖PHP设置

在一些虚拟主机或使用了模块化部署的环境里,Apache的php_admin_valuephp_flag指令,或者PHP-FPM池配置,优先级都比php.ini高。如果这些地方也针对disable_functions做了限制,那就得从这里入手。

  • 检查Apache配置文件(比如httpd.conf或站点vhost配置),搜寻php_admin_value disable_functionsphp_flag disable_functions指令。
  • 检查PHP-FPM池配置(例如www.conf),看有没有php_admin_value[disable_functions]这样的行。
  • 如果找到且其中包含phpinfo,将其从该指令的值中移除,或者直接整行注释掉。
  • 保存配置后,分别执行apachectl gracefulsystemctl reload php-fpm,同时重启对应的Web服务。

四、确认SELinux或文件权限限制影响

如果系统启用了SELinux并处于 enforcing 模式,安全策略可能阻止PHP进程调用某些内置函数。phpinfo()就是常见目标之一,尤其是当PHP运行在受限上下文里的时候。

  • 执行sestatus确认SELinux是否处于 enforcing 模式。
  • 临时把SELinux设为 permissive 模式:setenforce 0,然后测试phpinfo()能否正常使用。
  • 如果恢复成功了,那问题基本锁定在SELinux策略上。
  • ausearch -m avc -ts recent | grep php查看拒绝日志,确认里面有没有涉及phpinfo的denial条目。
  • 根据日志生成并加载自定义策略模块:audit2allow -a -M phpinfo_allow && semodule -i phpinfo_allow.pp

五、检查用户自定义函数重写或钩子干扰

某些CMS、框架或安全插件,会通过auto_prepend_file机制动态替换或屏蔽phpinfo()函数。这个“暗桩”藏得很深,需要专门排查。

  • 检查php.ini中的auto_prepend_file配置项,看它指向了哪个PHP文件。
  • 打开那个文件,搜索function phpinfooverride_functionrename_function,或者类似if (function_exists('phpinfo')) { unset($GLOBALS['phpinfo']); }这样的可疑代码。
  • 如果发现对phpinfo()的显式屏蔽逻辑,把它注释或删除。
  • 同时检查include_path下是否存在第三方安全类库(比如php-malware-scanner、hardened-php等),确认它们没有启用函数拦截功能。
  • 保存修改后,清除OPcache:执行php -r "opcache_reset();",或者干脆重启PHP-FPM进程。

来源:整理自互联网
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多