为何GoDaddy主机上PHP的eval函数无法执行MySQL连接语句?
解决GoDaddy主机上PHP eval执行MySQL连接代码失败的问题
首先咱们拆解下可能的原因,再给出对应的解决方案:
1. 最可能的根源:GoDaddy禁用了eval函数
不少共享主机(包括GoDaddy的部分方案)为了安全性,会在PHP配置的disable_functions列表里添加eval,直接阻止这个函数运行。
验证方法:
创建一个临时PHP文件,内容如下:
<?php phpinfo(); ?>
访问这个文件,找到disable_functions配置项,如果里面包含eval,那就是这个原因。
解决办法:
- 如果你用的是独立服务器/VPS,可以修改
php.ini或者.htaccess(主机允许的话)移除eval的限制; - 如果是共享主机,联系GoDaddy客服询问是否可调配置(大概率共享主机不会允许),这种情况建议直接去掉eval,用原始代码执行——毕竟eval本身存在安全风险,能不用尽量不用。
2. 字符串解析的语法兼容问题
你的eval代码语法看起来没问题,但不同PHP版本/环境对字符串的解析可能有差异,试试调整写法:
写法一:转义内部单引号,用单引号包裹代码字符串
eval('$con = mysqli_connect(\'localhost\',\'my_user\',\'my_password\',\'my_db\');');
写法二:用HEREDOC语法避免引号冲突
$dbConnectCode = <<<CODE \$con = mysqli_connect('localhost','my_user','my_password','my_db'); CODE; eval($dbConnectCode);
注意HEREDOC里的变量要加反斜杠转义,避免提前解析。
3. 开启错误提示定位具体问题
如果上面的方法都不生效,先开启PHP错误提示,看看具体报错信息,能更精准排查问题:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); // 你的eval代码放在这里 eval("$con = mysqli_connect('localhost','my_user','my_password','my_db');"); if (!$con) { die("连接失败: " . mysqli_connect_error()); } echo "连接成功"; ?>
如果是eval被禁用,会直接抛出类似eval() has been disabled for security reasons的错误;如果是语法问题,会提示对应的解析错误。
内容的提问来源于stack exchange,提问作者Ruwan Liyanage
相关产品推荐
相关产品推荐

