shell即使安全模式关闭,MySQL也无法正常工作

时间:2014-06-05 19:27:52

标签: php mysql

我有一个在终端中工作的脚本字符串,但是当我在PHP中使用shell_exec()时它不起作用。我知道很多类似于这个问题的问题已经被提出但是在我的情况下问题我面临的是我已经尝试过我发现的建议解决方案。下面是我的简单代码。

<?php

 $output = shell_exec('mysql -u root -pmypass -h 127.0.0.1 mydatabase< db.sql');
 echo "<pre>$output</pre>";

?>

到目前为止,我找到了the best solution

有谁知道可能出错了什么?

1 个答案:

答案 0 :(得分:2)

您的shell_exec就是这样:

$output = shell_exec('mysql -u root -pmypass -h 127.0.0.1 mydatabase< db.sql');

你的命令是这样的:

mysql -u root -pmypass -h 127.0.0.1 mydatabase< db.sql

当您在shell中时命令有效的原因是mysql的二进制路径是您的用户登录配置文件的一部分。

要了解我的意思,请自行登录shell,然后键入echo $PATH,您将看到的是shell用于确定您尝试运行的二进制文件所在位置的搜索路径列表。

但是当您尝试通过shell_exec()运行脚本时,运行PHP的Apache服务器用户正在进行销售呼叫。并且该用户通常没有设置二进制路径。因此,您需要提供mysql的完整路径,该路径可能是:

/usr/bin/mysql

或者:

/usr/local/bin/mysql

最好的解决方案是从shell使用which命令,如下所示:

which mysql

然后按照提供的完整路径调整shell_exec()命令,如下所示;使用/usr/bin/例如:

$output = shell_exec('/usr/bin/mysql -u root -pmypass -h 127.0.0.1 mydatabase < db.sql');

此外,db.sql实际位于何处?您还必须在此前面添加MySQL脚本的完整路径;使用/full/path/to/this/例如:

$output = shell_exec('/usr/bin/mysql -u root -pmypass -h 127.0.0.1 my database < /full/path/to/this/db.sql');