我不确定这是 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 中运行命令,然后将 输出到stderr
。stdout
这样, 就$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.sql
tmp
你也可以看看这个:https://stackoverflow.com/questions/17407664/php-include-relative-path