我正在尝试使用以下代码编写一个返回整个sql转储的函数:
$command = "C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump --add-drop-table --host=$hostname
--user=$username ";
if ($password)
$command.= "--password=". $password ." ";
$command.= $dbname;
var_dump(terminal($command));
function terminal($cmd)
{
if (function_exists('system'))
{
ob_start();
system($cmd, $retVal);
$output = ob_get_contents();
ob_end_clean();
$function_used = "system";
}
else if(function_exists('passthru'))
{
ob_start();
passthru($cmd, $retVal);
$output = ob_get_contents();
ob_end_clean();
$function_used = "passthru";
}
else if(function_exists('exec'))
{
exec($cmd, $output, $retVal);
$output = implode("n", $output);
$function_used = "exec";
}
else if(function_exists('shell_exec'))
{
$output = shell_exec($cmd);
$function_used = "shell_exec";
}
else
{
$output = "Cannot execute shell commands";
$retVal = 1;
}
return array('output' => $output, 'returnValue' => $retVal, 'functionUsed' => $function_used);
}
当我在正常命令行中运行该命令时,数据库凭据是正确的,它会得到所需的结果。
问题在于,当我使用这些命令尝试它时,我使用的任何一个函数总是将空字符串作为输出。另一方面,返回值始终为1,结果为真,我认为并且意味着函数正确执行,否则我将得到错误的返回值。
例如我使用'系统'因为这是我遇到的拳头。我是如何获得输出的?
此致
答案 0 :(得分:1)
由于在可执行文件的路径中有空格,因此需要用双引号将其括起来。
$command = "\"C:\\Program Files\\MySQL\\MySQL Server 5.6\\bin\\mysqldump\" --add-drop-table --host=$hostname --user=$username ";