gpt4 book ai didi

php - 即使安全模式关闭,MySQL 的 shell_exec 也无法工作

转载 作者:行者123 更新时间:2023-11-29 08:00:03 26 4
gpt4 key购买 nike

我有一个脚本字符串,它在终端中工作,但当我在 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我已经找到了。

有人知道可能出了什么问题吗?

最佳答案

您的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');

关于php - 即使安全模式关闭,MySQL 的 shell_exec 也无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24068626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com