我正在尝试使用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 [~]#
如果我从控制台运行该命令,它可以正常运行,并且我的同步目录中会创建新文件。
有人可以告诉我,我做错了什么,我在这里缺少什么?在我们搬到新服务器之前,脚本工作得很好......
答案 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 -?
一样。我不确定这是否特定于我和我的服务器,但也许上面的解决方案可以帮助处于类似情况的人。