我不确定这是SO还是SF问题,但我认为这可能是最好的地方。 如果不是,我很抱歉!
我通过PHP的exec使用mysqldump,但似乎并没有工作。 我正在使用的代码是
<?php exec('mysqldump -u DB_USER -pDB_PASS DB_NAME > /tmp/test.sql'); ?>
当我运行这个脚本时,我在error_log上没有收到任何错误,但是我没有在/ tmp中获得一个转储。 我不确定是什么原因造成的。 我不知道它是否试图转储到/ tmp相对于PHP文件正在执行,这是我正在寻找的结果,或转储到其他地方的/ tmp? 还是我完全犯了另一个错误?
您声明的path( /tmp/test.sql )是绝对path,因此脚本的行为正确。 至于linux文件系统/定义根目录,并且总是存在一个/tmp目录。 可能你应该花一点时间去了解Linux文件系统的一般概述 。
文件系统的树以trunk或slash开头,用正斜杠(/)表示。 包含所有底层目录和文件的此目录也称为根目录或文件系统的“根目录”。
至于将文件转储到相对目录,如果tmp目录驻留在运行脚本的当前目录中,则可以尝试使用./tmp/test.sql或tmp/test.sql 。
你也可以看看这个: https : //stackoverflow.com/questions/17407664/php-include-relative-path
我find的解决scheme是在子shell中运行命令,然后输出stderr到stdout 。 这样, $output就可以很好地填充了。
即:
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)
array(1){[0] => string(46)“mysqldump:找不到表:”table_name“”}
希望能帮助到你 !