2014-07-06 49 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」);

感謝