我試圖通過以下命令來用PHP執行一個Perl腳本:通過PHP執行perl返回退出狀態2
$last_line = exec('/usr/bin/perl /path/to/perl/script.pl ' . escapeshellarg($argument),$output,$status);
的腳本不執行其功能,並退出狀態總是2(不當使用shell builtins)。 Perl和腳本都可以被任何用戶讀取和執行。在命令行上運行腳本工作得很好。有什麼想法嗎?
我試圖通過以下命令來用PHP執行一個Perl腳本:通過PHP執行perl返回退出狀態2
$last_line = exec('/usr/bin/perl /path/to/perl/script.pl ' . escapeshellarg($argument),$output,$status);
的腳本不執行其功能,並退出狀態總是2(不當使用shell builtins)。 Perl和腳本都可以被任何用戶讀取和執行。在命令行上運行腳本工作得很好。有什麼想法嗎?
我用這個代碼運行file.pl位於同一文件夾中的PHP文件
$output = passthru("perl relative_path/file.pl ".$_POST["var1"]." ".$_POST["var2"]);
這兩個腳本位於非常不同的目錄中。 –
ok,然後在文件名前加上相對路徑,passthru是可以運行的選項,試試吧 –
我試過了你的方式,沒有骰子。 此外,我需要分析文件的輸出,並根據PHP手冊(http://www.php.net/manual/en/function.passthru.php),我不能得到輸出使用中繼。 –
我使用Perl腳本從PHP用下面的代碼數據庫接口:
exec ($cmdToPass . " 2>&1" , $output , $returnVar);
其中:
$cmdToPass
是我正在執行的命令(perl腳本),stderr重定向到stdout。$output
保存命令的輸出$returnVar
持有的退出代碼然後,您應該能夠打印$output
,以確定爲什麼腳本。您也可能希望檢查PHP錯誤日誌(通常與Web服務器的錯誤日誌相同)以查看是否有任何內容被捕獲。
如果您需要有關exec函數的更多信息,請參閱PHP manual on exec。
執行php腳本的用戶是否與從shell執行腳本的用戶不同? – user4035
是的,apache2用戶無法執行腳本,而我的普通用戶可以執行它。 –
什麼錯誤打印到STDERR? – ikegami