2014-02-17 81 views
0

我試圖通過以下命令來用PHP執行一個Perl腳本:通過PHP執行perl返回退出狀態2

$last_line = exec('/usr/bin/perl /path/to/perl/script.pl ' . escapeshellarg($argument),$output,$status); 

的腳本不執行其功能,並退出狀態總是2(不當使用shell builtins)。 Perl和腳本都可以被任何用戶讀取和執行。在命令行上運行腳本工作得很好。有什麼想法嗎?

+0

執行php腳本的用戶是否與從shell執行腳本的用戶不同? – user4035

+0

是的,apache2用戶無法執行腳本,而我的普通用戶可以執行它。 –

+0

什麼錯誤打印到STDERR? – ikegami

回答

0

我用這個代碼運行file.pl位於同一文件夾中的PHP文件

$output = passthru("perl relative_path/file.pl ".$_POST["var1"]." ".$_POST["var2"]); 
+0

這兩個腳本位於非常不同的目錄中。 –

+0

ok,然後在文件名前加上相對路徑,passthru是可以運行的選項,試試吧 –

+0

我試過了你的方式,沒有骰子。 此外,我需要分析文件的輸出,並根據PHP手冊(http://www.php.net/manual/en/function.passthru.php),我不能得到輸出使用中繼。 –

0

我使用Perl腳本從PHP用下面的代碼數據庫接口:

exec ($cmdToPass . " 2>&1" , $output , $returnVar); 

其中:

  • $cmdToPass是我正在執行的命令(perl腳本),stderr重定向到stdout。
  • $output保存命令的輸出
  • $returnVar持有的退出代碼

然後,您應該能夠打印$output,以確定爲什麼腳本。您也可能希望檢查PHP錯誤日誌(通常與Web服務器的錯誤日誌相同)以查看是否有任何內容被捕獲。

如果您需要有關exec函數的更多信息,請參閱PHP manual on exec