>  기사  >  백엔드 개발  >  PHP 요청 인터페이스 시간 초과를 해결하는 방법

PHP 요청 인터페이스 시간 초과를 해결하는 방법

王林
王林원래의
2019-09-29 17:48:066152검색

PHP 요청 인터페이스 시간 초과를 해결하는 방법

【HTTP 액세스】

일반적으로 우리는 주로 컬, 소켓, file_get_contents() 및 기타 방법과 같은 다양한 방법으로 HTTP에 액세스합니다.

상대방 서버가 응답하지 않으면 비극에 빠지게 됩니다. 서버 전체를 죽이기 쉬우므로 http 접속 시 타임아웃 문제도 고려해야 합니다.

[CURL 액세스 HTTP]

CURL은 고성능 및 일부 동시성 지원 기능을 갖춘 HTTP 프로토콜 인터페이스에 액세스하기 위해 일반적으로 사용되며 신뢰할 수 있는 lib 라이브러리입니다.

CURL:

curl_setopt($ch, opt)는 주로 다음을 포함한 일부 시간 초과 설정을 설정할 수 있습니다.

CURLOPT_TIMEOUT은 cURL이 실행되도록 허용되는 최대 시간(초)을 설정합니다.

CURLOPT_TIMEOUT_MS는 cURL 실행이 허용되는 최대 밀리초 수를 설정합니다. (cURL 7.16.2에 추가됨. PHP 5.2.3부터 사용 가능)

CURLOPT_CONNECTTIMEOUT 연결을 시작하기 전 대기 시간을 0으로 설정하면 무한정 대기합니다.

CURLOPT_CONNECTTIMEOUT_MS 연결 시도를 기다리는 시간(밀리초)입니다. 0으로 설정하면 무한 대기합니다. cURL 7.16.2에 추가되었습니다. PHP 5.2.3부터 사용 가능합니다.

CURLOPT_DNS_CACHE_TIMEOUT은 DNS 정보를 메모리에 저장하는 시간을 설정하며 기본값은 120초입니다.

curl 일반 2단계 시간 초과:

$ch =curl_init();

curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt ( $ ch , CURLOPT_TIMEOUT, 60); //초 수만 설정하세요

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_USERAGENT, $define_vars['HTTP_USER_AGENT']);

사용 컬 일반 두 번째 수준 시간 초과:

curl_setopt($ch, CURLOPT_TIMEOUT, 60);

curl에 대한 밀리초 시간 초과가 필요한 경우 다음을 추가해야 합니다.

curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);

또는 예:

curl_setopt ($ch, CURLOPT_NOSIGNAL, true); 밀리초 수준 시간 초과 설정을 지원할 수 있습니다.

curl에 대한 밀리초 수준 시간 초과의 예:

<?php
if (!isset($_GET[&#39;foo&#39;])) {
    
// Client
    $ch = curl_init(&#39;http://example.com/&#39;);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_NOSIGNAL, 1);  
//注意,毫秒超时一定要设置这个
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); 
//超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用
    $data = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);
 
    if ($curl_errno > 0) {
        echo "cURL Error ($curl_errno): $curl_error\n";
    } else {
        echo "Data received: $data\n";
    }
} else {
    
// Server
    sleep(10);
    echo "Done.";
}
?>

기타 팁:

1 경험에 따르면 요약은 다음과 같습니다. cURL 버전 >= libcurl/7.21.0 버전, 밀리초 시간 제한이 확실히 적용됩니다.

2.curl_multi의 밀리초 시간 초과에도 문제가 있습니다. . 단일 액세스는 ms 수준의 시간 제한을 지원하지만 여러 호출이 병렬로 이루어지면 cur_multi가 정확하지 않습니다

[스트림 처리를 통해 HTTP에 액세스]

curl 외에도 fsockopen 또는 파일 작업 기능을 사용하여 HTTP를 수행하는 경우가 많습니다. 따라서 이 부분에 대한 시간 초과 처리도 필요합니다.

추천 튜토리얼: PHP 비디오 튜토리얼

위 내용은 PHP 요청 인터페이스 시간 초과를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.