mysqldump(使用 PHP exec)不转储文件但没有错误

mysqldump(使用 PHP exec)不转储文件但没有错误

我不确定这是 SO 还是 SF 问题,但我认为这可能是最好的地方。如果不是,我很抱歉!

我正在通过 PHP exec 使用 mysqldump,但它似乎不起作用。我使用的代码是

<?php
exec('mysqldump -u DB_USER -pDB_PASS DB_NAME > /tmp/test.sql');
?>

当我运行此脚本时,error_log 中没有出现任何错误,但 /tmp 中没有转储。我不确定是什么原因造成的。我不确定它是否试图转储到相对于执行 PHP 文件的位置的 /tmp(这是我想要的结果),还是转储到其他地方的 /tmp?或者我完全犯了另一个错误?

答案1

我发现的解决方案是在子 shell 中运行命令,然后将 输出到stderrstdout这样, 就$output填充好了。

IE :

exec("(mysqldump -u$username -p$password $database $tables > $dump_name) 2>&1", $output, $result);

var_dump($result);
echo "<br />";
var_dump($output);
echo "<br />";

输出 :

int(6)

数组 (1) { [0]=> 字符串 (46) “mysqldump:找不到表:“table_name”” }

希望能帮助到你 !

答案2

您声明的路径(/tmp/test.sql)是绝对路径,因此脚本运行正常。至于 Linux 文件系统/定义根目录,并且始终存在一个/tmp目录。也许您应该花点时间去理解Linux 文件系统概述

文件系统的树从主干或斜线开始,用正斜线 (/) 表示。此目录包含所有底层目录和文件,也称为根目录或文件系统的“根”。

至于将文件转储到相对目录,如果目录位于运行脚本的当前目录,您可以尝试使用./tmp/test.sql或。tmp/test.sqltmp

你也可以看看这个:https://stackoverflow.com/questions/17407664/php-include-relative-path

相关内容