2012-11-08 57 views
1

我正試圖在我的Symfony2應用程序中實現自動提交到信息管理系統。其他人已經寫了一個perl腳本提交。我只需要使用控制器從實體獲取值作爲參數傳遞給腳本。如何從我的Symfony2控制器調用perl腳本?

我已經在命令行中運行的短PHP腳本測試perl腳本:

<?php 

$perlscript = 'test_submit_to_lims.pl'; 

$output = \shell_exec('perl ' . $perlscript . " 'arg1' 'arg2' 'arg3' "); 
echo $output; 

?> 

這將返回與我需要爲我的應用程序的一些感興趣的值的字符串。

我已經把Perl腳本和相關文件的文件夾中叫做依賴在同一水平

我想在我的控制器使用類似的代碼我Symfony的項目文件夾:

... 

$arg1 = $form->get('arg1')->getData(); 
$arg2 = $form->get('arg2')->getData(); 
$arg3 = $form->get('arg3')->getData(); 
$pathToScript = '/opt/sfprojects/dependencies'; 
$perlScript = "$pathToScript/test_submit_to_lims.pl"; 
$output = \shell_exec('perl '.$perlScript." $arg1 $arg2 $arg3 "); 
var_dump($output); 

... 

這使我「網絡錯誤:500內部服務器錯誤 - http://www2-mywebsite.org/myEntity/create

我不確定是否錯誤是由我的PHP代碼中的一些簡單的東西引起的,需要以某種方式啓用perl在Symfony配置文件或其他東西se像腳本的位置,文件權限等。

我希望我可能出錯的地方有任何想法。

+0

我不認爲你的500來自Perl。既然你進行系統調用,爲什麼它會給你一個HTTP狀態碼呢?也許有些東西是失敗的,所以你沒有首先發送一個HTTP標頭而將數據發送回客戶端? – simbabque

+0

對不起,應該更加明確,我知道錯誤不在Perl代碼中,因爲當我運行一個執行它的短php腳本時,它工作正常。錯誤的起源在我的控制器類中,所以我在這裏執行腳本的方式肯定有問題。 –

+0

可能有很多原因導致您的應用失敗。嘗試通過app_dev.php前端控制器運行您的應用程序,或者查看日誌內部以找出錯誤。 – Cyprian

回答

1

檢查您的網絡服務器和Symfony日誌,看看你得到什麼樣的錯誤。 Symfony日誌位於項目的app/logs目錄中(默認情況下)。服務器日誌位置取決於您的配置。請記住,您可以使用開發控制器(app_dev.php)查看有關錯誤的更多詳細信息(包括堆棧跟蹤)。

要真正運行您的命令,請考慮使用Process component

+0

感謝您的建議。我嘗試使用過程組件。 '$ process-> getErrorOutput()'返回:''perl'不被識別爲內部或外部命令,可操作的程序或批處理文件。'我試圖將perl稱爲'/ usr/bin/perl',但是錯誤是:'系統找不到指定的路徑。' –