2012-11-08 10 views
1

Symfony2 응용 프로그램 내에서 정보 관리 시스템에 대한 자동 제출을 구현하려고합니다. 다른 누군가가 제출을 위해 펄 스크립트를 작성했습니다. 컨트롤러를 사용하여 엔티티에서 값을 가져 와서 스크립트로 전달해야합니다.Symfony2 컨트롤러에서 perl 스크립트를 호출하려면 어떻게해야합니까?

나는 명령 줄에서 간단한 PHP 스크립트를 실행하여 펄 스크립트를 테스트 한 :

<?php 

$perlscript = 'test_submit_to_lims.pl'; 

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

?> 

이 내가 내 응용 프로그램에 필요한 관심의 일부 값을 가진 문자열을 반환합니다.

내가 내 컨트롤러에서 유사한 코드를 사용하려고

내 심포니 프로젝트 폴더와 같은 수준에있는 폴더에서 호출 종속성을 펄 스크립트와 종속 파일을 넣어 가지고

:

... 

$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); 

... 

이주는 나 "네트워크 오류 : 내부 서버 오류 - http://www2-mywebsite.org/myEntity/create

오류가 내 PHP 코드에서 간단하게 발생했는지, Symfony 구성 파일 또는 일부 el에서 펄을 어떻게 든 활성화 할 필요가 있는지 여부는 확실하지 않습니다. 스크립트의 위치, 파일 사용 권한 등과 같은 것입니다.

내가 잘못 생각한 부분이 있으면 감사하게 생각합니다.

+0

귀하의 500이 Perl에서 온다고 생각하지 않습니다. 시스템 호출을했기 때문에 왜 HTTP 상태 코드를 제공해야합니까? HTTP 헤더를 먼저 보내지 않고도 데이터를 클라이언트로 다시 보내고 싶지 않을 수 있습니다. – simbabque

+0

죄송합니다. 더 명시 적이어야합니다. 펄 코드에서 오류가 발생하지 않습니다. 짧은 PHP 스크립트를 실행하면 정상적으로 작동합니다. 오류의 원인은 컨트롤러 클래스에 있으므로 스크립트를 실행하는 방법에 문제가 있어야합니다. –

+0

앱이 실패한 데에는 많은 이유가있을 수 있습니다. app_dev.php 프론트 컨트롤러를 통해 앱을 실행하거나 로그를보고 무엇이 잘못되었는지 알아보십시오. – Cyprian

답변

1

웹 서버와 Symfony 로그를 확인하여 어떤 종류의 오류가 발생했는지 확인하십시오. Symfony 로그는 프로젝트의 app/logs 디렉토리에 있습니다 (기본적으로). 서버 로그 위치는 구성에 따라 다릅니다.

개발 컨트롤러 (app_dev.php)를 사용하여 오류 (스택 추적 포함)에 대한 자세한 내용을 볼 수 있습니다.

실제로 명령을 실행하려면 Process component을 사용하십시오.

+0

제안에 감사드립니다. 프로세스 구성 요소를 사용해 보았습니다. '$ process-> getErrorOutput()'은 다음을 반환합니다 : ''perl '은 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다.' 나는 perl을 '/ usr/bin/perl'이라고 불렀지 만 오류는 : '시스템이 지정된 경로를 찾을 수 없습니다.' –