2011-02-23 148 views
0

我試圖從php執行perl腳本。 該perl腳本正在讀取一個網頁,併產生一些數據的XML文件。 如果我通過shell執行它,一切都按預期工作,但是當我試圖通過php自動完成整個事情時什麼都沒有起作用。php無法通過exec執行perl腳本

我已經試過這樣:

exec("perl /absolute/path/to/perl/script/parser.pl", $output, $result); 

當我回聲$result變量它顯示2。 我已經打開和關閉了php safe_mode幾次,但沒有任何改變。 也試圖設置safe_mode_exec_dir沒有積極的結果。

當我exec的一個簡單的LS

exec("ls", $output, $result); 

一切順利,我得到的文件列表和$result0

perl腳本有chmod 777,這樣它就不會成爲權限問題。他的文件夾也有777.

我幾乎可以肯定,這個問題是關於服務器,但我無法找出什麼。

任何幫助將非常感激。

謝謝

+0

什麼時候'parser.pl'返回2?你確定你用正確的參數運行腳本嗎? '$ output'中有什麼?你的例子缺少一個結束雙引號。 – Mikel 2011-02-23 23:04:40

+0

該腳本沒有任何參數,我試圖複製/粘貼,因爲它是上面寫的(顯然是正確的路徑)到shell中,它的工作原理。你是對的這個例子是缺少一個排隊,但只是在SO內複製代碼的問題,抱歉。 – Dalen 2011-02-23 23:07:15

+0

$ result應該包含被執行的命令的狀態,似乎是2,但我不知道它是什麼意思 – Dalen 2011-02-23 23:10:19

回答

3

您可能需要指定perl可執行文件的完整路徑。

嘗試輸入which perl以查看完整路徑,然後將該完整路徑放入exec調用中。

+0

perfekt!工作!非常感謝你! – Dalen 2011-02-23 23:19:22

1

您的示例似乎缺少第一個參數的結束引用。我也會確保perl的可執行文件在你的路徑中。最後,文件夾不僅需要設置執行位,而且需要設置所有直到root的目錄以允許perl訪問腳本。一個目錄相當普遍的是750,這樣一個組可以進入,但不是世界。作爲一個用戶,你可以在那裏看到腳本,但是你必須從執行腳本的用戶的角度來看它 - 大概是你的web服務器運行的id。