【问题标题】:php exec mysqldump doesn't workphp exec mysqldump 不起作用
【发布时间】:2015-10-20 19:25:29
【问题描述】:

我正在尝试使用 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 [~]#

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

有人可以告诉我我做错了什么以及我在这里缺少什么吗?在我们移到新服务器之前,该脚本一直运行良好...

【问题讨论】:

  • 非零退出代码表示失败。您确定您的网络服务器用户有权在哪里写入文件?
  • @MarcB 我知道它表示失败......这就是它的美妙之处 - 如何调试它?至于写入文件的网络服务器用户权限 - 不应该在同步目录上使用 CHMOD 777 进行排序吗?如果没有,我该怎么办?

标签: php mysql shell


【解决方案1】:

我一直在到处寻找,偶然发现了一些可以解决我的问题的东西。

而不是使用

$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 -? 一样。我不确定这是否特定于我和我的服务器,但也许上面的解决方案可以帮助处于类似情况的人。

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多