php 중 fileget_contents 와 curl 성능 비교 분석

이 글 의 실례 는 php 중의 file 를 서술 하 였 다get_contents 와 curl 성능 비교 분석.모두 에 게 참고 하도록 공유 하 다.구체 적 으로 다음 과 같다.
php 에서 성능 을 자세히 분석 하지 않 으 면 fileget_contents 와 curl 은 공통점 이 많 습 니 다.그들 은 모두 파일 을 수집 하여 파일 을 열 수 있 습 니 다.그러나 자세히 비교 해 보면 많은 차이 점 을 발견 할 수 있 습 니 다.다음은 fileget_contents 와 curl 의 차이.
PHP 에서 fopen,fileget_contents,curl 함수 의 차이 점:
1.fopen /file_get_contents 는 요청 할 때마다 DNS 조 회 를 다시 하고 DNS 정 보 를 캐 시 하지 않 습 니 다.하지만 CURL 은 DNS 정 보 를 자동 으로 캐 시 합 니 다.같은 도 메 인 이름 의 웹 페이지 나 그림 에 대한 요청 은 DNS 조회 가 한 번 만 필요 합 니 다.이것 은 DNS 조회 횟수 를 크게 줄 였 다.그래서 CURL 의 성능 은 fopen/file 보다get_내용 이 아주 좋다.
2.fopen /file_get_contents HTTP 요청 시 http 사용fopen_wrapper,keeplive 를 하지 않 습 니 다.컬 은 괜찮아 요.이렇게 여러 개의 링크 를 여러 번 요청 할 때 curl 효율 이 좋 습 니 다.
3.fopen / file_get_contents 함 수 는 php.ini 파일 에서 allowurl_open 옵션 설정 의 영향.이 설정 이 닫 히 면 이 함수 도 효력 을 잃 습 니 다.curl 은 이 설정 의 영향 을 받 지 않 습 니 다.
4.curl 은 여러 가지 요 구 를 모 의 할 수 있 습 니 다.예 를 들 어 POST 데이터,폼 제출 등 사용 자 는 자신의 수요 에 따라 요 구 를 맞 출 수 있 습 니 다.그리고 fopen/fileget_contents 는 get 방식 으로 만 데 이 터 를 가 져 올 수 있 습 니 다.
file_get_contents 원 격 파일 을 가 져 올 때 결 과 를 문자열 에 저장 합 니 다 fiels 함 수 는 배열 로 저 장 됩 니 다.
그래서 저 는 원 격 url 에 curl 을 사용 하 는 경향 이 있 습 니 다.Php 는 curl 모듈 확장 이 있어 기능 이 매우 강하 다.
한참 을 얘 기 했 는데 성능 이 왜 비교 가 안 된다 고 하 시 는 지 한번 봅 시다.
최근 에는 다른 사람의 사이트 의 음악 데 이 터 를 얻어 야 한다.file 사용get_contents 함 수 는 항상 획득 에 실패 하 는 문제 가 발생 합 니 다.매 뉴 얼 의 예 에 따라 시간 을 초과 하 였 음 에 도 불구 하고 대부분 효 과 를 보지 못 합 니 다.
$config['context'] = stream_context_create(array('http' => array('method' => "GET",
   'timeout' => 5// ,
   )
));
이 럴 때 서버 의 연결 탱크 를 보면 비슷 한 오류 가 발견 되 어 머리 가 아 픕 니 다.
file_get_contents(http://***): failed to open stream…
현재 curl 라 이브 러 리 를 바 꾸 었 습 니 다.함수 바 꾸 기 를 썼 습 니 다.
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
curl 사용 시간:
 
0.68719101
0.64675593
0.64326
0.81983113
0.63956594
차이 가 크다 고요?하하,내 가 사용 한 경험 에서 볼 때 이 두 도 구 는 속도 만 차이 가 있 는 것 이 아니 라 안정성 도 많이 다르다.
네트워크 데이터 캡 처 안정성 에 대한 요구 가 높 은 친 구 는 위의 curl 을 사용 하 는 것 을 권장 합 니 다.file_get_contents 함수,안정 속도 가 빠 를 뿐만 아니 라 가짜 브 라 우 저 로 목표 주 소 를 속 일 수 있 습 니 다.
실례 를 하나 더 보다
다음은 curl 과 fileget_contents 의 대비 결과,여 기 는 curl 과 fileget_contents 의 성능 대 비 는 그들의 성능 대 비 를 포함 하고 있 습 니 다.말 하기 전에 다음 과 같은 결과 도 를 보 세 요.

curl 과 fileget_내용 성능 대비 PHP 소스 코드 는 다음 과 같 습 니 다.

/** 
 
* IP IP
 
* @param string $ip
 
* @return: string
 
**/
function getCityCurl($ip)
{
    $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; 
    $ch = curl_init();
    $timeout = 5;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents = curl_exec($ch);
    curl_close($ch);
 
    $ipinfo=json_decode($file_contents);
    if($ipinfo->code=='1'){
        return false;
    }
    $city = $ipinfo->data->region.$ipinfo->data->city;
    return $city;
}
 
function getCity($ip)

    $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; 
    $ipinfo=json_decode(file_get_contents($url));
    if($ipinfo->code=='1'){
        return false;
    }
    $city = $ipinfo->data->region.$ipinfo->data->city;
    return $city;
}
 
// for file_get_contents
$startTime=explode(' ',microtime());
$startTime=$startTime[0] + $startTime[1];
for($i=1;$i<=10;$i++)
{
   echo getCity("121.207.247.202")."</br>";
}
$endTime = explode(' ',microtime());
$endTime = $endTime[0] + $endTime[1];
$totalTime = $endTime - $startTime;
echo 'file_get_contents:'.number_format($totalTime, 10, '.', "")." seconds</br>";
 
//for curl
$startTime2=explode(' ',microtime());
$startTime2=$startTime2[0] + $startTime2[1];
for($i=1;$i<=10;$i++)
{
   echo getCityCurl('121.207.247.202')."</br>";
}
$endTime2 = explode(' ',microtime());
$endTime2=$endTime2[0] + $endTime2[1];
$totalTime2 = $endTime2 - $startTime2;
echo "curl:".number_format($totalTime2, 10, '.', "")." seconds";
?>
테스트 액세스
https://www.jb51.net
file_get_내용 속도:4.2404510975 seconds
curl 속도:2.8205530643 seconds
curl 비 fileget_contents 속도 가 30%정도 빨 라 졌 는데 가장 중요 한 것 은 서버 부하 가 더 낮 다 는 것 이다.
총결산
file_get_contents 처리 가 잦 고 어 렸 을 때 이 걸 로 하면 좋 을 것 같 아 요.이상 없습니다.만약 당신 의 파일 이 1k+명 에 의 해 처리 된다 면.그럼 서버 cpu 는 승진 을 기다 리 세 요.그래서 앞으로 phop 코드 를 쓸 때 curl 라 이브 러 리 를 사용 하 는 것 을 권장 합 니 다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기