2014-07-06 52 views
0

我想从一个简单的PHP脚本内使用mysqldump命令转储数据库,但输出文件为空,在这个脚本中是否有什么错?mysqldump从内部php

<?php 

$dbhost = 'best.hostname.com'; 
$dbuser = 'best'; 
$dbpass = 'pass4best'; 
$dbname = 'best'; 

exec('mysqldump --host=$dbhost --user=$dbuser --pass=$dbpass $dbname > best.sql'); 

?> 
+0

输出文件似乎包含一些值,但没有什么打算,它包含:“用法:mysqldump的[选项]数据库[表] OR的mysqldump [OPTIONS] --databases [OPTIONS] DB1 [ DB2 DB3 ...] 或mysqldump [选项] - 全部数据库[选项] 有关更多选项,请使用mysqldump --help“ –

+0

您的命令字符串需要双引号,否则您将不会得到任何可变插值。您正在将字面变量名称传递给该命令。投票结束,因为印刷错误。作为良好实践的一部分,您也可以考虑转义您传递给shell的变量参数。 –

回答

0

基于您的评论,该命令应

exec('mysqldump --host=$dbhost --user=$dbuser --pass=$dbpass --databases $dbname > best.sql');

+0

任何这些语法都会给出相同的值:exec('mysqldump --host = $ dbhost --user = $ dbuser --pass = $ dbpass --databases = $ dbname> bestlimo.sql'); exec('mysqldump --host = $ dbhost --user = $ dbuser --pass = $ dbpass --all-databases = $ dbname> bestlimo.sql'); –

+0

删除数据库后的'='符号 – Rafal

+0

实际上我不知道你在命令中应该有什么'='符号,只是空格 – Rafal

0

似乎EXEC()不工作,但了shell_exec()的工作! 工作代码是:

shell_exec(“mysqldump --allow-keywords --opt -h $ dbhost -u $ dbuser -p $ dbpass $ dbname | gzip> $ backup_file”);

感谢