2012-06-22 3 views
0

PHP에서 Curl을 사용하여 신뢰할 수없는 웹 페이지를 읽으려고합니다. 서버 오류로 인해 페이지를 사용할 수없는 경우가 있습니다. 그러나 사용 가능한 경우 여전히 읽어야합니다. 또한 웹 페이지의 신뢰할 수없는 기능이 내 코드에 영향을 미치기를 원하지 않습니다. 내 PHP가 정상적으로 실패하고 계속 진행하고 싶습니다. 여기에 지금까지 무엇을 가지고 :PHP에서 신뢰할 수없는 웹 페이지를 읽으려면 어떻게해야합니까?

<?php 
    function get_url_contents($url){ 
     $crl = curl_init(); 
     $timeout = 2; 
     curl_setopt ($crl, CURLOPT_URL,$url); 
     curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); 
     $ret = curl_exec($crl); 
     curl_close($crl); 
     return $ret; 
    } 
    $handle = get_url_contents ('http://www.mydomain.com/mypage.html'); 
?> 
+0

코드가 작동하지 않습니까? 오류가 있습니까? –

+0

당신은 그것을 가져 오는 법을 알고 있고 시간 제한을 설정하는 방법을 알고 있습니다. 그래서 당신의 질문은 무엇입니까? – Gordon

+0

정상적으로 실패하지 않습니다. 오류를 찾을 수 없습니다. – jnthnclrk

답변

1

HTTP 응답 코드를 테스트하여 HTTP 코드를 테스트하여 페이지가 성공적으로 검색되었는지 확인할 수 있습니다. > 200 및 < 302가 올바른 코드 범위인지 기억하지 못합니다.이 방법을 사용하는 경우 http response codes에 빠른 최고점이 있습니다.

<?php 
    function get_url_contents($url){ 
     $crl = curl_init(); 
     $timeout = 2; 
     curl_setopt ($crl, CURLOPT_URL,$url); 
     curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); 
     $ret['pagesource'] = curl_exec($crl); 
     $httpcode = curl_getinfo($crl, CURLINFO_HTTP_CODE); 
     curl_close($crl); 

     if($httpcode >=200 && $httpcode<302) { 
     $ret['response']=true; 
     } else { 
     $ret['response']=false; 
     } 

     return $ret; 
    } 
    $handle = get_url_contents ('http://192.168.1.118/newTest/mainBoss.php'); 
    if($handle['response']==false){ 
      echo 'page is no good'; 
    } else { 
      echo 'page is ok and here it is:' . $handle['pagesource'] . 'DONE.<br>'; 
    } 

?> 
3

사용을 내가 들었어요 PHP 래퍼가 더 나은 성능을 제공하고 항상 사용할 수 있기 때문에이 대신, CURL 슈퍼 이상이 권유되지는 어디에서나 :

$currentcontext = stream_context_get_default(); 
stream_context_set_default(stream_context_create(array('timeout' => 2))); 
$content = file_get_contents('url', $context); 
stream_context_set_default($currentcontext); 

기본 스트림 컨텍스트를 2 초 후에 제한 시간으로 설정하고 스트림 래퍼를 통해 URL 내용을 가져와 모든 PHP 버전에서 5.2 이상이어야합니다.

사이트 코드에 따라 기본 컨텍스트를 복원 할 의무는 없지만 항상 좋은 방법입니다. 그렇지 않은 경우이 작업은 2 줄의 코드에서만 수행 할 수 있습니다.

+0

흥미 롭다. 다른 많은 곳에서는 file_get_contents가 권장되지 않는다. – jnthnclrk

+0

file_get_contents가 아닌 fopen_wrappers는 비활성화되었지만 없어야합니다. 격렬한 포함을 방지하는 옵션이 있지만 호스트는 일반적으로 잘못하고 먼 것을 포함하는 것을 방지하는 대신 모든 것을 비활성화합니다. 물론이 방법은 PHP Engineer Certification 시험에서 젠드 (Zend)가 추천 한 방법입니다. –

+0

MediaTemple에서'file_get_contents'를 사용하여 문제가 발생했습니다. 고맙습니다. Curl 옵션을 사용할 수없는 경우 시도해 보겠습니다. – jnthnclrk

관련 문제