File_get_contents 함수에 시간 초과 설정 추가

巴扎黑
풀어 주다: 2016-11-24 13:56:15
원래의
1378명이 탐색했습니다.

실제 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'를 의미합니다

0s

기본값은 0초이며, 이는 PHP 스크립트가 계속 실행됨을 의미합니다. 이런 방식으로 모든 php-cgi 프로세스가 file_get_contents() 함수에서 멈추면 이 WebServer는 더 이상 새로운 PHP 요청을 처리할 수 없습니다. 그러나 이 매개변수를 수정하고 PHP 스크립트의 최대 실행 시간을 설정해야 합니다. 증상만 치료할 뿐 근본 원인은 치료하지 않습니다. 예를 들어 30s로 변경된 경우 file_get_contents()가 웹 콘텐츠를 얻는 속도가 느리다면 이는 150개의 php-cgi 프로세스가 초당 5개의 파일만 처리할 수 있다는 의미입니다. .요청을 하면 WebServer도 "502 Bad Gateway"를 피하기가 어렵습니다.

완전한 솔루션을 달성하기 위한 유일한 방법은 PHP 프로그래머가 file_get_contents("http://example.com/")를 직접 사용하는 습관을 바꾸고 대신 약간 수정하고 시간 제한을 추가하는 것입니다. . HTTP GET 요청을 구현하려면 다음 방법을 사용하십시오. 번거롭다면 다음 코드를 함수로 직접 캡슐화할 수 있습니다.

<?php  
$ctx = stream_context_create(array(  
   &#39;http&#39; => array(  
       &#39;timeout&#39; => 1 //设置一个超时时间,单位为秒  
       )  
   )  
);  
file_get_contents("http://example.com/", 0, $ctx);  
?>
로그인 후 복사


관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!