>  기사  >  백엔드 개발  >  PHP 컬 시간 초과를 설정하는 방법

PHP 컬 시간 초과를 설정하는 방법

藏色散人
藏色散人원래의
2020-07-28 10:49:0210945검색

php 컬 시간 초과 설정 방법: 1. "curl_setopt($ch, opt)"를 사용하여 일부 시간 초과를 설정합니다. 2. "CURLOPT_DNS_CACHE_TIMEOUT"을 사용하여 DNS 정보를 메모리에 저장할 시간을 설정합니다.

PHP 컬 시간 초과를 설정하는 방법

추천: "PHP 튜토리얼"

PHP에서 컬을 사용할 때 시간 제한을 설정하는 자세한 방법

HTTP에 액세스하는 방법에는 여러 가지가 있습니다. 컬, 소켓, file_get_contents() 및 기타 메소드.

http에 접속할 때 타임아웃 문제를 고려해야 합니다.

1. CURL은 HTTP에 액세스합니다.

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

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초입니다.

1. 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, $defined_vars['HTTP_USER_AGENT']);

2. Curl 일반 2단계 시간 제한 사용:

curl_setopt($ch, CURLOPT_TIMEOUT,60);

3 Curl에 밀리초 시간 제한이 필요한 경우 다음을 추가해야 합니다.

curl_easy_setopt(curl, CURLOPT_NOSIGNAL,1L); 
//或者 
curl_setopt ( $ch,  CURLOPT_NOSIGNAL,true);//支持毫秒级别超时设置

curl 시간 제한 설정 예.

1, 컬의 밀리초 시간 초과 예:

<?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 수준의 시간 초과를 지원합니다.

2. 스트림 처리를 통해 HTTP에 액세스

curl 외에도 fsockopen 또는 파일 작업 기능을 사용하여 HTTP 프로토콜을 처리하는 경우가 많습니다.

이와 관련해 타임아웃 설정에 대해 이야기해보겠습니다.

일반적으로 연결 시간 초과는 직접 설정할 수 있지만 스트림 읽기 시간 초과는 별도로 처리해야 합니다.

다음 구현 코드를 참조할 수 있습니다:

<?php
$tmCurrent = gettimeofday();  
       $intUSGone =($tmCurrent[&#39;sec&#39;]- $tmStart[&#39;sec&#39;])*1000000  
                  +($tmCurrent[&#39;usec&#39;]- $tmStart[&#39;usec&#39;]);  
       if($intUSGone > $this->_intReadTimeoutUS){  
           returnfalse;  
       }

또는 내장된 스트림 처리 함수 stream_set_timeout() 및 stream_get_meta_data()를 사용하여 처리:

<?php
// Timeout in seconds   
$timeout =5;   
$fp = fsockopen("example.com",80, $errno, $errstr, $timeout);if($fp){   
        fwrite($fp,"GET / HTTP/1.0\r\n");   
        fwrite($fp,"Host: example.com\r\n");   
        fwrite($fp,"Connection: Close\r\n\r\n");   
        stream_set_blocking($fp,true);   //重要,设置为非阻塞模式  
        stream_set_timeout($fp,$timeout);   //设置超时  
        $info = stream_get_meta_data($fp);   
        while((!feof($fp))&&(!$info[&#39;timed_out&#39;])){   
                $data .= fgets($fp,4096);   
                $info = stream_get_meta_data($fp);   
                ob_flush;   
                flush();   
        }   
        if($info[&#39;timed_out&#39;]){   
                echo "Connection Timed Out!";   
        }else{   
                echo $data;   
        }}

file_get_contents 시간 초과:

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

fopen 시간 초과:

<?php
$timeout = array(  
   &#39;http&#39; => array(  
       &#39;timeout&#39; => 5 //设置一个超时时间,单位为秒  
   )  
);  
  
$ctx = stream_context_create($timeout);  
  
if ($fp = fopen("http://example.com/", "r", false, $ctx)) {  
 while( $c = fread($fp, 8192)) {  
   echo $c;  
 }  
 fclose($fp);  
}

위 내용은 PHP 컬 시간 초과를 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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