PHP函数调用被禁用是服务器环境配置中常见的问题,通常是因为服务器管理员为了安全考虑,在配置中限制了部分函数的使用,当代码中调用这些被禁用的函数时,就会触发错误导致功能无法正常运行。

一、排查函数被禁用的原因
要解决函数被禁用的问题,首先需要确认函数是否真的被禁用,以及是被哪种配置限制的。可以通过以下步骤排查:
1. 查看PHP错误信息
当调用被禁用的函数时,PHP会抛出类似PHP Fatal error: Uncaught Error: Call to undefined function xxx()的错误,部分环境下也会明确提示函数被禁用。如果是明确提示禁用,可以直接定位到对应的函数。
2. 查看禁用函数列表
可以通过输出phpinfo()信息查看当前环境的禁用函数列表,找到disable_functions项,里面列出的就是被禁用的函数。也可以使用以下代码直接获取禁用函数列表:
<?php
// 获取当前禁用的PHP函数列表
$disabled_functions = ini_get('disable_functions');
// 如果返回空字符串,说明没有设置禁用函数
if (empty($disabled_functions)) {
echo '当前环境未设置禁用函数';
} else {
// 按逗号分割函数名并输出
$func_arr = explode(',', $disabled_functions);
echo '当前被禁用的函数列表:<br/>';
foreach ($func_arr as $func) {
echo $func . '<br/>';
}
}
?>
二、启用被禁用函数的方法
根据服务器环境和权限的不同,启用被禁用函数的方法也有所区别,以下是常见的几种方式:
1. 修改php.ini配置文件(推荐)
这是最直接的方法,适合有服务器配置权限的场景。步骤如下:
- 找到当前PHP环境使用的php.ini配置文件,可以通过
phpinfo()中的Loaded Configuration File项查看路径。 - 打开php.ini文件,搜索
disable_functions配置项。 - 在
disable_functions对应的字符串中,删除需要启用的函数名,注意函数名之间用英文逗号分隔,不要删除其他不需要启用的函数。 - 保存php.ini文件,重启PHP服务或者对应的Web服务器(如Nginx、Apache)使配置生效。
例如原配置为:
disable_functions = exec,passthru,shell_exec,system
如果需要启用exec函数,修改后为:
disable_functions = passthru,shell_exec,system
2. 虚拟主机或无php.ini修改权限的场景
如果是使用虚拟主机,没有权限修改全局的php.ini文件,可以尝试以下方法:
- 查看主机是否支持用户自定义php.ini,部分虚拟主机允许在网站根目录上传自定义的php.ini文件,上传后服务器会优先加载用户目录下的配置。
- 如果支持.htaccess配置,可以在网站根目录的.htaccess文件中添加配置,例如启用
exec函数:
# 注意:该方法仅部分服务器支持,且需要服务器开启对应权限 php_value disable_functions "passthru,shell_exec,system"
如果原来的禁用函数列表中有多个函数,需要把不需要启用的函数全部列出来,避免遗漏导致其他函数被意外启用。
3. 宝塔面板等可视化环境
如果使用宝塔面板等可视化服务器管理工具,操作会更简单:
- 登录宝塔面板,进入软件商店,找到对应的PHP版本,点击设置。
- 在PHP设置页面选择禁用函数选项,找到需要启用的函数,点击删除即可,无需手动修改配置文件,修改后会自动重启PHP服务。
三、修改后验证是否生效
修改配置后,需要验证函数是否已经成功启用,避免配置未生效导致问题依旧存在。可以使用以下代码测试:
<?php
// 测试需要启用的函数是否存在,以exec函数为例
if (function_exists('exec')) {
echo 'exec函数已启用,可以正常调用';
// 可以执行一个简单的exec调用测试
exec('echo test', $output);
print_r($output);
} else {
echo 'exec函数仍未启用,请检查配置';
}
?>
四、注意事项
- 禁用函数通常是服务器管理员出于安全考虑设置的,尤其是
exec、shell_exec这类可以执行系统命令的函数,启用前需要确认是否真的有必要使用,避免带来安全风险。 - 修改配置后一定要重启对应的服务,否则配置不会生效,常见的重启命令:PHP-FPM重启
systemctl restart php-fpm,Nginx重启systemctl restart nginx,Apache重启systemctl restart httpd。 - 如果是多PHP版本环境,需要确认修改的是当前网站使用的PHP版本对应的配置文件,避免改错版本导致配置不生效。
PHP禁用函数php.inidisable_functions函数启用修改时间:2026-07-13 13:03:26