2009-06-02 132 views
0

我試圖讓PHP調用一個批處理文件,它將採用RTF文件並使用OpenOffice宏將其轉換爲PDF格式。我已經在命令行上測試了批處理文件,它工作正常,但我沒有任何運氣調用並使用PHP中的同一批處理文件。使用PHP exec命令執行批處理文件的問題

我的機器操作系統是XP專業SP 3.我運行IIS 6和PHP版本5.2.9。 我已授予c:\ windows \ system32 \ cmd.exe上的Internet用戶執行權限。 我指定了正在執行的批處理文件的完整路徑以及要轉換的RTF文件的完整路徑。

的PHP是這樣的,其中的$ arg是RTF轉換:

$arg = "C:\\web_root\\whatever\\tempOutput.rtf"; 
$command = "c:\\windows\\system32\\cmd.exe /c c:\\web_root\\whatever\\convert.bat $arg"; 

然後一個try-catch裏面我叫exec命令:

exec("$command 2>&1 && exit", $ret, $err); 

我贊同後的結果漁獲:

echo "ret: "; 
print_r ($ret); 
print "<br>"; 
echo "err is "; 
echo $err; 
print "<br>"; 
echo "DONE!"; 

這是我所看到的:

ret: Array () 
err is 0 
DONE! 

RTF文件沒有被轉換,我沒有看到錯誤。關於我可以嘗試下一步的任何想法?謝謝!!!

+0

你能列出你的批處理文件嗎? – cdonner 2009-06-02 17:28:04

回答

0

PHP是否在安全模式下運行?如果是這樣,shell命令將以escapeshellcmd轉義。也許這是問題?

您是否擁有運行PHP腳本的服務器的控制權?

1

看起來像輸出數組是空的。你的批處理腳本是否應該有輸出?

此外,escapeshellcmd和escapeshellarg應您正在使用IIS作爲您的網絡服務器使用

1

?如果是這樣,那麼PHP exec函數默認不起作用,您不應該繞過阻止其運行的安全措施。

檢查你的事件查看器,你會發現一些與你的問題有關的錯誤。通過google運行一個查詢:IIS PHP exec。這應該給你一個關於這個問題的大量信息。

基本上,PHP exec函數試圖分叉一個新的cmd.exe實例。 IIS禁止它,因爲它可能會在系統中打開一個安全漏洞。

我想出的最佳解決方案是讓您的php腳本將要執行的命令寫入平面文件或創建數據庫條目。然後,您需要編寫一個由Windows調度程序啓動的獨立腳本,每隔10分鐘左右運行一次,以檢查您的平面文件或數據庫是否運行命令。然後,新腳本將運行這些命令,然後放置結果或執行確認,以便稍後您的Web應用程序可以訪問它們。

這是一個肯定的混亂。