上飛

2010-06-23 59 views
0

我已設定爲我的CMS一個MySQL備份系統轉儲所有數據庫的數據和結構成一個壓縮.sql文件備份MySQL數據庫:上飛

$filename = DB_NAME.'_'.date('Y.m.d_H\hi_(s.'.round(microtime()*100,0).')').'.sql.gz'; 
exec('mysqldump --default-character-set=UTF8 --opt --compress --host='.DB_HOST.' --user='.DB_USER.' --password='.DB_PASS.' '.DB_NAME.' | gzip > '.DIR_BACKUP.$filename); 

它工作正常,我的開發服務器上,但是當我嘗試在我的生產服務器上運行相同的代碼時,該文件從不創建。這是一個權限問題嗎?我應該配置什麼才能工作?謝謝!

---看來問題依賴於exec()函數。我在哪裏可以允許PHP運行該功能?

+0

嘗試閱讀Web服務器錯誤日誌。你可能會看到爲什麼失敗的一些線索。 – 2010-06-23 22:56:41

+0

您確定您有權訪問生產服務器上的mysqldump和gzip嗎? – Anax 2010-06-23 23:02:43

+0

我可以訪問mysqldump和gzip。我無法訪問的是exec()。我如何啓用該功能? – andufo 2010-06-23 23:18:17

回答

0

可能是一個權限問題,要麼你不能寫入文件系統,要麼更可能(當然,如果你在共享主機服務上)使用exec命令是不允許的。我相信你可以檢查與php_info();

您沒有收到錯誤訊息?如果不是可能啓用顯示錯誤/警告等在PHP

+0

實際上我擁有一臺VP服務器並擁有外殼訪問權限。我在哪裏可以給php適當的權限來運行exec()? – andufo 2010-06-23 23:01:10

+0

我假設在php.ini中。但是,如果你在安全模式下運行php(也在php.ini中),你可以禁用safe_mode,它也可以工作。如果這是問題的原因,當然。 (反正safe_mode會在PHP6中被刪除)但是在php ini開始混亂之前,可能會看看http://www.php.net/manual/en/ini.php – Redlab 2010-06-24 00:23:23

+0

和http://www.php.net /manual/en/configuration.php – Redlab 2010-06-24 00:27:00

0

聽起來像一個權限問題。你有沒有嘗試將DIR_BACKUP設置爲/ tmp或類似?

+0

看來問題依賴於exec()函數。我在哪裏可以允許PHP運行該功能? – andufo 2010-06-23 23:00:23

+0

首先,您可以通過回調ini_get('disable_functions')來檢查函數是否實際啓用(返回禁用函數的逗號分隔列表)。然後確保你的safe_mod是關閉的,如果不是,exec()可能只在safe_mode_exec_dir中執行文件。 – cypher 2010-06-23 23:06:07

+0

安全模式關閉。而disable_functions也是空的。它還能是什麼? – andufo 2010-06-23 23:19:39