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