2017-11-17 3 views
0

브라우저에서 실행해야하는 PHP 스크립트가 있습니다. 내가 그 스크립트에 의해 반환 된 출력을 잡고 밖으로 $ 싶은내 PHP 스크립트에서 exec 함수가 실행되기 전에 서버가 연결을 닫습니다.

exec("sudo scriptname 2>&1", $out); 

: 해당 스크립트 내부에서,이 같은 exec() 기능을 사용하십시오. 추가 처리를 위해 출력이 필요합니다. 스크립트 실행에 약 2 분이 소요됩니다. 문제는 브라우저에서 PHP 스크립트를 실행하면 잠시 동안 계속 실행 된 다음 중지된다는 것입니다. 이 때문에 PHP 스크립트가 죽고 '페이지 응답 없음'과 비슷한 오류가 발생합니다.

모질라에
ServerName.com unexpectedly closed the connection 
ERR_INCOMPLETE_CHUNKED_ENCODING 

, 화면이 간다 빈 (완전히 흰색) : 크롬에

는 화면이 같은 오류를 표시합니다.

크롬 오류를 검색 한 후 PHP 스크립트가 실제로 아무것도하지 않고 exec() 함수를 기다리고 있기 때문에 웹 서버 (아파치를 실행하고 있습니다)가 클라이언트의 비활성으로 인해 연결을 종료한다고 생각합니다. 끝내기 위해.

나는 설정을 시도 max_execution_time이라는, max_input_time, default_socket_timeout 이는 PHP 스크립트를 죽일 수도 있지만 작동하지 않았다 것으로 기대 하고 set_time_limit (0) 사용 .

PTHREADS를 사용하여 exec() 함수를 실행하고 다른 하나가 모니터를 사용하거나 서버를 계속 사용하는 두 개의 스레드를 생성하고 싶지 않습니다.

PHP 또는 아파치 내에서 서버로부터의 연결을 끊는 60 초로 설정된 일부 설정이 있다고 생각합니다. 나는 그것이 무엇인지 모른다.

또한 PHP 스크립트는 exec() 내의 스크립트를 1 분 미만의 스크립트로 대체 할 때 완벽하게 실행됩니다.

EDIT : Apache 시간 초과 값은 120 초로 설정됩니다.

+0

브라우저에서 PHP 코드를 실행하려고하십니까? 그렇게 할 수 없다면 php는 서버 코드이고 서버 코드를 실행하고 서버의 응답을 반환하려면 브라우저에 javascript가 필요합니다. – Chris

+0

Apache에서 실행되는 경우 Timeout value를 선택하십시오. 이것도 트리거됩니다. 그러나 웹 사이트에서 2 분 동안 기다리면 브라우저를 중지하고 새로 고침하고 사이트를 떠날 것입니다. 클라이언트는 2 분을 기다리지 않습니다. – Nic3500

+0

httpd.conf에서 Timeout 값을 확인했습니다. 120 초입니다. 그래서 나는 그것이 문제가 아니라고 생각합니다. –

답변

0

언제든지 sudo가 사용자 이름/암호 입력을 기다리고 있으며 1 분 후에 시간이 초과 되었습니까?

+0

아니요. 암호없이 스크립트를 실행할 수있는 Apache 권한을 부여했습니다. 나는 그것을 시험했다. 그렇지 않은 경우 스크립트가 즉시 종료되고 'tty required'오류가 표시됩니다. –

관련 문제