2011-07-29 2 views
1

완료하는 데 약 30 초가 걸리는 PHP 스크립트가 있습니다. php cli를 통해 실행하면 성공적으로 완료됩니다 (확인을 표시하고 관련 결과를 로컬 파일 시스템의 파일에 저장합니다). 아파치를 통해 동일한 파일을 실행하면 예상되는 확인 메시지 대신 약 30 초 후에 시간이 초과 된 것처럼 보이거나 Firefox에서 빈 파일을 다운로드하도록 제안합니다 (다른 브라우저는 다르게 처리하지만 기본적으로 did not는 계획대로 간다). 파일 시스템에서 생성 된 파일은 생성되지 않습니다.아파치에서는 PHP 스크립트가 시간 초과되지만 cli에서는 그렇지 않습니다.

실행 시간이 길 수 있다는 것을 알고 스크립트의 시작 부분에 set_time_limit(400)을 설정합니다.

어떻게 디버깅 할 수 있을지에 대한 정보가 있습니까? 아파치에서 스크립트가 타임 아웃되는 원인은 무엇일까?

+0

hoster가 set_time_limit을 허용 하시겠습니까? – Awea

+0

명령 줄에서 스크립트를 실행하면 PHP가 실행 제한을 적용하지 않습니다. 이는 명령 행에서 실행되는 PHP와 PHP가 (f) cgi 또는 apache 모듈로 실행되는 PHP 간의 (사소한) 차이점 중 하나입니다. 참조 : http://php.net/manual/en/features.commandline.php – Carpetsmoker

+0

서버에 파일을 저장하는 특정 위치에 쓸 수있는 권한이 있습니까? – Ibrahim

답변

0

아파치를 통한 PHP CLI와 PHP는 다른 php.ini 파일을 사용합니다. Apache 버전의 php.ini 파일을 확인하고 필요에 맞게 max_execution_time이 충분히 높은지 확인하십시오.

phpinfo()을 실행하면 현재 사용중인 php.ini 파일의 위치를 ​​알 수 있습니다.

+0

시스템에 단 하나의 php.ini가있는 것처럼 보입니다. – SaltyNuts

+0

@SaltyNuts : 업데이트 된 답변을 참조하십시오. 정확한 php.ini 파일을 찾았 으면'set_time_limit' 지시어를 편집하고 웹 서버를 재시작하여 실행 시간 제한이 증가하는지 확인하십시오. 귀하의 지시에 따라 –

+0

을 작성 했으므로 max_execution_time이 php.ini에서 2000으로 설정되었음을 확인했습니다. 나는 당신이 set_time_limit 대신에 max_execution_time을 의미한다고 가정한다. 왜냐하면 set_time_limit는 php.ini 지시자가 아닌 함수이기 때문이다. – SaltyNuts

0

PHP 제한 시간이 추가되어 cgi가 시간 초과 될 수 있습니다. 아파치로 mod_fcgid를 사용하고 있다면 시간을 늘려야합니다.

내가 여기에 모든 답변과 의견을 읽은 후 FcgidIOTimeout 40

+0

mod_fcgid를 사용하고있는 것으로 보이지 않습니다. 파일 시스템 어디서나 찾을 수 없으며 모든 아파치 설정 파일에서 FcgidIOTimeout을 찾을 수 없습니다. – SaltyNuts

+0

아마도 mod_php를 사용하고있을 것입니다. phpinfo()에서 게이트웨이를 볼 수 있습니다. 서버 API : CGI/FastCGI와 $ _SERVER [ "SERVER_SOFTWARE"]는 Apache/2.2.14 (Win32) mod_ssl/2.2.14 OpenSSL/0.9.8k mod_fcgid/2.3.6 –

+0

mod_php를 찾지 못했습니다. Linux CentOS, btw에서 실행합니다. – SaltyNuts

1

를 늘려야 생각 manual

으로 살펴보고, 나는 스크립트가 타임 아웃을하지 않습니다 믿습니다.

나는 그것이 당신의 응용 프로그램의 충돌이라고 생각합니다. 제한된 사용자로 아파치 프로세스가 실행됩니다.

어쩌면 파일을 폴더에 쓰고 있거나 (아파치 사용자 아래) 액세스 할 권한이 없을 수도 있습니다.

나는 또한 PHP 모듈이 누락되었을 가능성이 있습니다. cli php.ini와 apache php.ini를 비교해보십시오. 오류 로깅에

차례 : 당신은 또한 display_errors을 가능하게 할 수있다

error_log = /tmp/php_error.log 
log_errors = 1 

어쩌면 당신은 테스트 환경에 있습니다. 하지만 프로덕션 사용에서는 항상 꺼야합니다!

왜 php가 중단되는지 기록하십시오.

su 명령을 사용하여 apache-account 내에서 cli의 PHP 스크립트를 실행할 수 있습니다. 이 권한을 확인하는 데 사용할 수 있습니다.

+0

고마워, 이걸 시도하고 내가 뭘 얻을 수 있는지보십시오. – SaltyNuts

관련 문제