disable_functions仅禁用PHP内置函数(如exec、system),不作用于eval、assert等语言结构及扩展函数;配置须小写、无空格、单行逗号分隔,且需确认生效路径并重启服务。

disable_functions 是 PHP 配置项,用来禁用指定的危险或不安全函数(比如 exec、system、shell_exec 等),防止 Web 应用被恶意调用执行系统命令。它在 php.ini 中设置,属于服务器级安全加固措施。
关键点:只能在 php.ini 或 Apache/Nginx 的 PHP 模块配置中设置,运行时(如 ini_set())无法修改。
一、找到正确的 php.ini 文件
先确认你用的是哪个配置文件:
php --ini # 或在 Web 环境中新建一个 PHP 文件,写上 <?php phpinfo(); ?>,搜索 “Loaded Configuration File”
确保编辑的是实际生效的那个 php.ini,不是备用或模板文件。
本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目,让您快速入门TP5项目开发。
二、修改 disable_functions 值
在 php.ini 中找到或添加这一行:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
- 函数名用英文逗号
,分隔,前后不能有空格(否则可能失效)。 - 不区分大小写,但建议统一小写。
- 已被禁用的函数调用时会返回
false,并触发E_WARNING(可在错误日志里看到类似“Function xxx is disabled”)。
三、常见要注意的细节
- ✅ 禁用函数对所有 PHP 脚本全局生效(包括 CLI 和 Web)。
- ❌ 不能只禁用某一个虚拟主机或目录(除非用
php_admin_value在 Apache/Nginx 配置中单独设)。 - ⚠️ 不要盲目照搬网上列表。比如
curl_exec禁用后,很多 Composer 包、SDK(微信/支付宝)会报错;getimagesize禁用会影响图片处理。 - ? 可用
print_r(ini_get('disable_functions'));检查当前生效值。
四、重启服务才能生效
改完 php.ini 后必须重启对应服务:
- Apache:
sudo systemctl restart apache2(或httpd) - Nginx + PHP-FPM:
sudo systemctl restart php-fpm(版本不同可能叫php7.4-fpm、php8.2-fpm等),再重启 nginx - CLI 模式下无需重启,但新终端才读新配置
不复杂但容易忽略

















