2011-02-23 3 views
0

PHP에서 perl 스크립트를 실행하려고합니다. 그 perl 스크립트는 웹 페이지를 읽고 일부 데이터가 포함 된 xml 파일을 생성합니다. 만약 내가 PHP를 통해 모든 일을 자동화하려고 할 때 내가 예상대로 작동하지만, 쉘을 통해 모든 임무를 작동합니다.PHP가 exec를 통해 perl 스크립트를 실행할 수 없습니다.

나는 이것을 시도했다 :

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

는 내가 그것을 2 표시 $result 변수를 에코 때. PHP safe_mode를 여러 번 켜고 껐습니다.하지만 아무 것도 변경되지 않았습니다. 긍정적 인 결과없이 safe_mode_exec_dir도 설정하려고했습니다. 내가

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

모든 것이 잘 어울리는 간단한 LS를 간부 인 경우

, 내가 파일의 목록을 얻을 $result0입니다.

perl 스크립트에는 chmod 777이있어 권한의 문제가되지 않습니다. 또한 그의 폴더는 777입니다.

저는이 문제가 서버에 관한 것이지만 거의 찾을 수 없다고 확신합니다.

도움이 될 것입니다.

감사합니다.

+0

언제'parser.pl'가 2를 반환 할 수 있습니까? 올바른 인수를 사용하여 스크립트를 실행하고 있습니까? '$ output'에 어떤 것이 있습니까? 그리고 당신의 예는 마지막 큰 따옴표가 없습니다. – Mikel

+0

스크립트에 인수가 없기 때문에 위에서 설명한대로 (분명히 올바른 경로로) 셸에 복사/붙여 넣기를 시도했지만 작동합니다. 당신은 예제가 quete가 빠진 것이 옳았으나, SO 내부의 코드를 복사하는 것의 문제 일뿐입니다. 미안합니다. – Dalen

+0

$ 결과는 2로 보이는 실행 된 명령의 상태를 포함해야하지만 의미가 무엇인지 모르겠다. – Dalen

답변

3

아마도 perl 실행 파일의 전체 경로를 지정해야 할 것입니다.

which perl을 입력하여 전체 경로를 확인한 다음 exec 전화에 전체 경로를 입력하십시오.

+0

perfekt! 그게 효과가! 아주 많이 고마워요! – Dalen

1

예제는 첫 번째 인수에 대한 끝 인용 부호가 누락 된 것 같습니다. 또한 perl의 실행 파일이 경로에 있는지 확인해야합니다. 마지막으로 폴더에 실행 비트가 설정되어 있어야 할뿐만 아니라 root까지 모든 디렉토리가 펄에 스크립트에 액세스 할 수 있도록 설정되어야합니다. 그룹이 들어갈 수있는 디렉토리는 750이지만, 세계는 들어갈 수없는 것이 일반적입니다. 사용자는 거기서 cd를하고 스크립트를 볼 수 있지만 스크립트를 실행중인 사용자의 관점에서보아야합니다. 아마도 웹 서버가 실행중인 ID 일 것입니다.

관련 문제