php exec mysqldump不起作用

时间:2015-07-29 17:04:12

标签: php mysql shell

我正在尝试使用exec()从我的php文件中运行mysqldump。文件位于我网站的www目录中,我正在从浏览器访问它。但是,无论我尝试什么,我都没有得到任何结果,也没有创建sql文件。

这是我的命令:

$export = exec("/usr/bin/mysqldump -u MY_USERNAME -pMY_PASS DATABASE_NAME products > /path/to/www/directory/sync/products.sql");

exec()已启用。同步目录权限是777。

如果我使用相同的命令,但是像这样添加$output, $return_var

$export = exec("/usr/bin/mysqldump -u MY_USERNAME -pMY_PASS DATABASE_NAME products > /path/to/www/directory/sync/products.sql", $output, $return_var);

$output是一个空数组,$return_var回显127。

mysqldump的路径是正确的:

root@server [~]# which mysqldump
/usr/bin/mysqldump
root@server [~]#

如果我从控制台运行该命令,它可以正常运行,并且我的同步目录中会创建新文件。

有人可以告诉我,我做错了什么,我在这里缺少什么?在我们搬到新服务器之前,脚本工作得很好......

1 个答案:

答案 0 :(得分:2)

我一直在寻找各地,偶然发现了一些可以解决我问题的事情。

而不是使用

$export = exec("/usr/bin/mysqldump -u MY_USERNAME -pMY_PASS DATABASE_NAME products > /path/to/www/directory/sync/products.sql");

我现在正在使用此功能此工作

$export = exec('mysqldump -u MY_USERNAME -pMY_PASS DATABASE_NAME products -r "/path/to/www/directory/sync/products.sql"');

使用mysqldump的路径并没有什么不同。使用options(在这种情况下-r)为我解决了这个问题,虽然我并不真正理解为什么原始解决方案无法正常工作。

也许值得一提 - 我注意到我无法使用标准mysql -u -p db < table.sql导入数据库 - 运行该命令只是向我显示帮助说明,就像我运行mysql -?一样。我不确定这是否特定于我和我的服务器,但也许上面的解决方案可以帮助处于类似情况的人。