실제 PHP 개발에서는 원격 페이지에서 반환된 콘텐츠를 얻기 위해 file_get_contents 함수를 사용하는 경우가 많습니다. 그러나 원격 응답 시간이 매우 느린 경우 file_get_contents()는 항상 거기에 머물며 시간 초과되지 않습니다. 이번에는 웹 서비스의 Linux 서버의 시스템 부하가 갑자기 증가하는 것을 발견했습니다. top 명령을 사용하여 많은 php-cgi 프로세스의 CPU 사용량이 100%에 가까워졌는지 확인합니다.
php.ini에는 PHP 스크립트의 최대 실행 시간을 설정할 수 있는 max_execution_time 매개변수가 있다는 것을 알고 있습니다. 그러나 php-cgi(php-fpm)에서는 이 매개변수가 적용되지 않습니다. PHP 스크립트의 최대 실행 시간을 실제로 제어할 수 있는 것은 php-fpm.conf 구성 파일의 다음 매개변수입니다:
C 코드
단일 서비스 제공에 대한 제한 시간(초) 요청 후 작업자 프로세스가 종료됩니다
'max_execution_time' ini 옵션이 어떤 이유로 스크립트 실행을 중지하지 않을 때 사용해야 합니다.
'0s'는 'off'를 의미합니다
기본값은 0초이며, 이는 PHP 스크립트가 계속 실행됨을 의미합니다. 이런 방식으로 모든 php-cgi 프로세스가 file_get_contents() 함수에서 멈추면 이 WebServer는 더 이상 새로운 PHP 요청을 처리할 수 없습니다. 그러나 이 매개변수를 수정하고 PHP 스크립트의 최대 실행 시간을 설정해야 합니다. 증상만 치료할 뿐 근본 원인은 치료하지 않습니다. 예를 들어
완전한 솔루션을 달성하기 위한 유일한 방법은 PHP 프로그래머가 file_get_contents("http://example.com/")를 직접 사용하는 습관을 바꾸고 대신 약간 수정하고 시간 제한을 추가하는 것입니다. . HTTP GET 요청을 구현하려면 다음 방법을 사용하십시오. 번거롭다면 다음 코드를 함수로 직접 캡슐화할 수 있습니다.
<?php $ctx = stream_context_create(array( 'http' => array( 'timeout' => 1 //设置一个超时时间,单位为秒 ) ) ); file_get_contents("http://example.com/", 0, $ctx); ?>