我正在玩mysql的備份腳本。這是用於工作的一種變體,但自從php4以來我沒有看過它。它返回一個空文件。奇怪的是,如果我去命令行並使用EXACT相同的命令,我會得到我期待的文件。MySQLdump空文件使用PHP但不是命令行?
我捅了一圈互聯網,找不到任何東西......想法?
錯誤代碼?
$db_host='localhost';
$db_user='root';
$db_pass='root';
$db_name='gakkou';
$dir='backups';
$file_list=scandir($dir);
if(count($file_list)>10) unlink($dir.'/'.$file_list[2]); //delete old file
$prefix=date("YmdHi").'_';
$command='mysqldump -u'.$db_user.' --password="'.$db_pass.'" --databases '.$db_name.' | gzip > '.$dir.'/'.$prefix.'_backup.sql.gzip';
exec($command,$output,$return_val);
這完美的作品:mysqldump -uroot -proot -hlocalhost gakkou > /webdocs/gakkou/backups/mysql_backup.sql
,這是完全一樣的命令php文件執行(除了文件名)。
編輯:更新與任何感興趣的工作代碼。原來這是兩個不同的問題。使用MAMP,我需要指定路徑/Applications/MAMP/Library/bin/mysqldump
。然後在生產服務器上,瘋狂的密碼將作品粘上了。
是mysqldump中PHP使用的shell的路徑嗎?嘗試一個完整的'/ usr/bin/mysqldump'或者絕對路徑在你的系統上。另外,如果失敗,exec($ command,$ output,$ return_val); var_dump($ output,$ return_val)'可能會有一些調試輸出對追蹤問題有用。 –
謝謝,馬克。絕對路徑在我的開發機器上似乎已經完成了,但它仍然在真正的交易中失敗。用法:mysqldump [OPTIONS] database [tables]「[1] => string(65)」或mysqldump [選項] - 數據庫[選項] DB1 [DB2 DB3 ...]「[2] => string(52)」或者mysqldump [OPTIONS] --all-databases [OPTIONS]「[3] => string(38)」如需更多選項,請使用mysqldump - 幫助「} int(127)' – jonlink
這可能是一個權限問題。 – vicLam