2011-03-28 1 views
0

나는 php에 문제가있다! PHP로 외부 프로그램을 실행하고 싶습니다. 이 프로그램은 커맨드 라인과 리눅스 플랫폼에서 작동합니다. 그래서 그것은 잘 작동해야합니다. 그러나 나는 더 많은 시간을 시도하고 나는 그것을 실행할 수 없습니다. 그래서 뭐가 잘못 됐어! 이 프로그램의 링크입니다 : http://www.lalescu.ro/liviu/fet/ 는이 명령 줄에서 잘 작동 명령하지 PHP에서의 경우 :PHP로 외부 프로그램 실행

./fet --inputfile=Hopwood.fet --outputdir=out 

이것은 PHP 코드입니다 :

<?php 
`./fet --inputfile=Hopwood.fet --outputdir=out` 
?> 

이 pb를 해결하기를 바랍니다. 사전에 감사 ..

업데이트 내가 실행 프로그램과 Hopwood.fet 파일을 업로드 당신은 그것을 시도에 대한 .. 이 링크입니다 : http://rapidshare.com/files/454756427/fet.tar.gz

+0

당신은 당신의 코드 그래서 우리는 당신이 실행하려는 정확하게 볼 수있는 형식의 경우 우리를 도움이 될 수 있습니다 . –

+1

올바른 하위 디렉토리에서 ./fet을 실행하고 있습니까? – stillstanding

+0

좋아요, 지금 제 질문을 수정하러갑니다. – mkotwd

답변

0

당신은 FET를 실행하는 것 같습니다 로컬 설치 (게시 한 ./fet 명령에 기반)에서.

PATH 변수에 fet 설치 위치를 추가해야합니다. 리눅스 시스템에서

, 당신의 ~/.bashrc에를 편집하고 다음을 추가 : 당신은 FET를 설치 한 경우 홈/mkotwd/FET가

export PATH=$PATH:/home/mkotwd/fet 

/합니다.

~/bin 디렉토리를 만들어 위에서 설명한대로 PATH에 추가하고 fet 실행 파일을 가리키는 ~/bin/fet 심볼릭 링크를 만들 수도 있습니다. 앞으로 실행하려는 모든 로컬 명령의 디렉토리를 PATH에 추가 할 필요가 없기 때문에 권장되는 해결책입니다. ~/bin에있는 각 실행 파일에 심볼릭 링크를 만들면됩니다.

호출 세부 정보, 보안 고려 사항 및 다양한 작업을 위해 명령을 사용한 사용자가 게시 한 기타 팁에 대해서는 http://php.net/manual/en/function.exec.php을 확인하십시오.

+0

예,이 모든 것을 시도했지만 작동하지 않습니다. exec 명령은 0을 수행하면 int를 반환하고, fyi 함수는 1 값을 반환합니다! – mkotwd

2

전체 경로에서 그 일을 시도 :

/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out 

그래서 당신이 실행 될 겁니다 :

exec("/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out"); 

을 또한 확인 실행중인 프로세스를 확인하면 /path/to/your/out

에 쓸 수있는 능력을 가지고 있습니다 업데이트

는 것은 명확입니다 만들려면,이 명령을 실행하려고하십시오

exec("/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out 2> /tmp/fet.error.log", $output, $status); 

echo "status: " . $status; 
echo "output: " . implode("\n", $output); 

if(file_exists("/tmp/fet.error.log")) 
{ 
    echo "Error Log: " . file_get_contents("/tmp/fet.error.log"); 
} 

UPDATE

@mkotwd (위, 디버그 코드를 시도 후) 다른 답변을했다한다. 문제는 fet이 X 서버에 액세스하려고하기 때문입니다.

export DISPLAY=:0 

및 될 명령 : 대한

exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out"); 
+0

불행히도, 나는 올바른 권한과 전체 경로를 설정했지만 작동하지 않습니다! – mkotwd

+0

권한이 맞다면 (프로그램과 입출력 디렉토리에서 실행하고 'fet'와 필요한 모든 자원에 대한 읽기 + 실행 권한이 필요합니다.) 웹 서버가 chroot를 실행하지 않고 ' 실행 기능을 비활성화하지 않으면 작동합니다. 돌아가서 다시 시도하십시오. – symcbean

+0

@symcbean 감사합니다. 프로그램을 사용해 볼 수 있다면 아래의 링크를 – mkotwd

0

확인 php -i | less :

중요한 명령 (또는 둘 다)을 방지하는 보안 조치 중 하나 일 수 있습니다.

+0

execscape 명령은 inkscape 및 mkdir 명령으로 크기를 조정하려고 시도하는 다른 프로그램에 대해 올바르게 작동합니다 .. 안전 모드가 꺼져 있습니다 !! – mkotwd

0

솔루션은 이전에이 명령을 추가하는 것입니다

export DISPLAY=:0 

그래서 코드가 될 :

<?php 
exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out"); 
?> 
+0

기본적으로 fet가 창을 시작하려고합니다. – Amey

+0

@Amey yes right, 나는 오류 로그에서 이것을 읽는다. – mkotwd

+0

@Amey, 당신은 전체적인 코멘트와 질의 응답을 읽어야한다;) – ariefbayu