2010-12-15 177 views
0

我之前用mysqldump方法失敗了。現在我試圖調用將調用mysqldump的批處理文件。 PHP文件它調用批處理文件,看起來像這樣:通過調用php批處理文件備份mysql數據庫

<?php 
shell_exec('c:\\abc.bat'); 

?> 

而且批處理文件,當我執行直接產生的是我期待的7KB SQL文件:

mysqldump --opt -u root -ppassword onstor > c:\onstordb.sql 

但是,當我使用PHP來執行它,我得到一個0 Kb文件,我想知道爲什麼。我嘗試了shell_exec和exec。參數有問題嗎?

回答

1

http://www.php.net/manual/en/function.exec.php#85930

它讀取:

我用的是PHP exec命令執行任何批處理文件 有問題。執行其他命令 (即「dir」)正常工作)。但如果我 執行批處理文件,我收到輸出從exec命令。

我的服務器設置包含 運行的Windows Server 2003服務器 IIS6和PHP 5.2.3。在此服務器上,我 有:

  1. 授予執行權限互聯網用戶上 c:\windows\system32\cmd.exe
  2. 已授權Everyone-> Full控制寫入批處理文件 的目錄。
  3. 授予Everyone->完全控制整個c:\cygwin\bin目錄 及其內容。
  4. 授予Internet用戶「作爲批處理登錄」權限。
  5. 指定每個正在執行的文件的完整路徑。
  6. 測試這些腳本從服務器上的命令行運行,並且它們工作得很好。
  7. 確保%systemroot%\system32位於 系統路徑中。

事實證明,即使所有的服務器上進行上述 的,我不得不 在 的exec調用指定的完整路徑cmd.exe

當我使用的電話:

$output = exec("c:\\windows\\system32\\cmd.exe /c $batchFileToRun"); 

則一切正常。在我的 的情況下,$batchFileToRun是 到批處理文件 的實際系統路徑(即對 realpath()的調用結果)。

+0

請不要只是粘貼鏈接的答案。如果你想這樣做,考慮讓他們評論。如果遠程站點消失或暫時不可用,請通過對所提供的鏈接進行彙總或引用,從而使答案更有價值。 – Gordon 2010-12-15 13:11:34

+0

如果php.net消失了,願上帝憐憫我們的靈魂。 – DampeS8N 2010-12-15 13:13:38

+0

@Dampe我至少有一次發生過這種情況。 php.net關閉了,並且提供的鏈接在一段時間內不工作,這讓OP不知所措。當然,提供一個鏈接到鏡子固定的,但儘管如此。 – Gordon 2010-12-15 13:18:00

相關問題