2012-04-22 3 views
2

기본적으로 제 상황은 다음과 같습니다. (다른 파일을 생성한다) 파일에PHP가 외부 프로그램을 실행 중이고, 아파치가 응답하지 않습니다.

  1. 업로드 파일
  2. 실행 외부 프로세스
  3. 외부 프로세스가 다운 프로세스 생성 된 파일. 다음과 같이 PHP에서 현재

나는 프로그램을 실행 :

$cmd = 'cd the_directory/; ./the_program' 
system($cmd); 

이 프로그램은 벌금과 모든 것을 실행하지만 마지막에 프로그램이 ... "를 눌러 종료하십시오" 그리고 이렇게 말한다 이 프로그램이 사용자 입력을 기다리고 있기 때문에 Apache는 무한정 매달려 있습니다. 우리 파트너는이 프로그램을 백엔드에 완벽하게 통합 시켰으며이 문제가 발생하지 않는다고 선언합니다. 지금까지 PHP에서 실행 한 모든 외부 프로그램은이 상황에 대한 표준으로 보이는 사용자 입력을 요구하지 않고 종료됩니다.

코드에 사용자 입력이 필요한 최종 메시지가 없어야합니다. 내가 놓친 게 있니? 아니면이 문제를 해결할 수있는 방법이 있습니까? 아니면 코드를 변경해야합니까? 감사합니다.

+1

사용중인 OS는 무엇입니까? – Ted

+1

우분투, Apache2 및 PHP5를 실행 중 –

+0

우분투? Windows BAT 파일이 가끔 완료된 후에 얻을 수있는 메시지와 비슷합니다. 기묘한. – James

답변

1

나는 proc_open을 시도해야한다고 생각합니다.

외부 명령을 프로세스로 실행할 수있을뿐만 아니라 파이프를 설정하여 해당 프로세스로 정보를 보내고 보낼 수도 있습니다.

이 함수의 세 번째 매개 변수에 가까운 살펴보고이 같은 것을 볼 수있는이 기능에 대한 PHP 매뉴얼의 예제를 연구 : 그래서

fwrite($pipes[0], '<?php print_r($_ENV); ?>'); 

을, 당신은 당신이 무엇을 쓸 수 있습니다 방금 연 프로세스의 입력 파이프가 필요합니다.

+0

알아내는 데 시간이 걸렸습니다. proc_open은 현재는 효과가있는 것처럼 보이지만 실제로 프로그램을 다시 컴파일하고 사용자 입력에 대한 프롬프트를 제거하고 싶습니다. :) –

0

당신은 Windows 환경 사용하는 경우 : 당신은 UNIX를 사용하는 경우 (아직 나 자신을 테스트하지 않았습니다)

후자의 프로세스 창 끝에 닫을 것

$run_cmd = "cmd /c c:/app_folder/app.exe"; 
$WshShell = new COM("WScript.Shell"); 
$oExec = $WshShell->Run($run_cmd, 0, false); 

참고 :

exec('\app_folder\app &'); 
+0

아직 시도하지는 않았지만'&'를 추가하면 아파치가 멈추는 것을 막을 수는 있지만 프로세스는 끝없이 계속 실행됩니다. –