>  기사  >  백엔드 개발  >  file_get_contents 및 컬의 효율성과 안정성을 평가합니다.

file_get_contents 및 컬의 효율성과 안정성을 평가합니다.

高洛峰
高洛峰원래의
2016-10-17 11:04:311341검색

타 사이트의 콘텐츠를 캡쳐하는 여러 제품을 작업해 보니 편리하고 빠른 file_get_contents 기능에 익숙하지만, 에 따라 시간 초과를 설정했는데도 항상 가져오지 못하는 문제가 발생합니다. 매뉴얼의 예제에서는 대부분 작동하지 않습니다. :

$config[&#39;context&#39;] = stream_context_create(array(‘http’ =< array(‘method’ =< “GET”,
   ’timeout’ =< 5//这个超时时间不稳定,经常不奏效
   )
  ));

이때, 서버의 연결 풀을 보면 유사한 오류가 많이 발견됩니다. 두통:

file_get_contents(http://***): 스트림을 열지 못했습니다…

마지막 수단으로 컬 라이브러리를 설치하고 함수 대체를 작성했습니다.

function curl_file_get_contents($durl){
    $ch=curl_init();
    curl_setopt($ch, CURLOPT_URL,$durl);
    curl_setopt($ch, CURLOPT_TIMEOUT,5);
    curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
    curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    $r=curl_exec($ch);
    curl_close($ch);
    return $r;
}

이렇게 해서 실제 네트워크 문제 외에는 아무런 문제가 발생하지 않았습니다.

curl 및 file_get_contents에 대해 다른 사람들이 수행한 테스트입니다.

file_get_contents가 google.com을 크롤링하는 데 걸리는 시간(초):

2.31319094

2.30374217

2.21512604

3.30553889

2.30124092

컬 사용 시간:

0.68719101

0.646 75593

0.64326

0.81983113

0.63956594

큰 격차가 있지 않나요? 하하, 제 경험상 이 두 도구는 속도뿐 아니라 안정성에서도 다릅니다. 네트워크 데이터 캡처의 안정성에 대한 요구 사항이 높은 친구는 위의 cur_file_get_contents 기능을 사용하는 것이 좋습니다. 안정적이고 빠를 뿐만 아니라 브라우저를 위조하고 대상 주소를 스푸핑할 수도 있습니다!


특별한 주의: PHP 버전에 따라 테스트 결과가 다를 수 있습니다. PHP5.2에서는 file_get_contents 함수가 특히 비효율적이며 CPU를 너무 많이 점유하는 경향이 있습니다. php5.3으로 업그레이드하세요. 테스트 후 php5.3에서는 그런 문제가 없습니다


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