2014-12-08 6 views
0

404와 같은 서버 응답 코드의 URL을 테스트하는 가장 좋은 방법과 가장 간단한 방법에 대해 알고 싶습니다. 나는 현재 get_headers의 PHP 매뉴얼의 설명에서 찾을 수 있습니다 것과 매우 비슷한 사용하고 있습니다 :이 foreach는 루틴 개 이상 50 개 이상의 URL에 대한 확장하여,404 오류에 대해 URL 텍스트를 작성하는 가장 효율적인 방법은 무엇입니까

<?php 
function get_http_response_code($theURL) { 
    $headers = get_headers($theURL); 
    return substr($headers[0], 9, 3); 
} 

if(intval(get_http_response_code('filename.jpg')) < 400){ 
// File exists, huzzah! 
} 
?> 

을하지만 것은 일반적으로 내 서버주고 원인 500 응답 (정확한 오류에 대해 애매 모호한 표현)을 신고합니다. 그래서, 덜 리소스 무거운 방법이며, 질량에 대한 URL 응답 코드를 확인할 수 있는지 궁금해?

+0

이 서버 컬 - 확장 가능하게했다? – Rangad

+0

나는 그것이 godaddy라는 것을 인정하는 것을 부끄럽고 현재까지 컬 연장을 피했다 (가정의 방식으로) ... – feelsickened

답변

0

curl_multi_* 기능을 사용하여 동시에 여러 가지 컬 요청을 실행할 수 있습니다.

그러나 이것은 여전히 ​​가장 느린 요청이 반환 될 때까지 (그리고 응답 구문 분석을 위해 약간의 추가 시간까지) 실행을 차단합니다.

이와 같은 작업은 cronjobs 또는 simliar 대안을 사용하여 백그라운드에서 실행해야합니다.

gitub 및 co.에 더 많은 라이브러리가 있으며, 더 나은 api를 제공하기 위해 컬 확장을 래핑합니다.

개념이로 확인 : (cpu "fix" by [email protected])

function getStatusCodes(array $urls, $useHead = true) { 
    $handles = []; 
    foreach($urls as $url) { 
     $options = [ 
      CURLOPT_URL => $url, 
      CURLOPT_RETURNTRANSFER => true, 
      CURLOPT_NOBODY => $useHead, 
      CURLOPT_FOLLOWLOCATION => true, 
      CURLOPT_HEADER => 0 
     ]; 
     $handles[$url] = curl_init(); 
     curl_setopt_array($handles[$url], $options); 
    } 

    $mh = curl_multi_init(); 

    foreach($handles as $handle) { 
     curl_multi_add_handle($mh, $handle); 
    } 

    $running = null; 
    do { 
     curl_multi_exec($mh, $running); 
     curl_multi_select($mh); 
    } while ($running > 0); 

    $return = []; 
    foreach($handles as $handle) { 
     $return[$eUrl = curl_getinfo($handle, CURLINFO_EFFECTIVE_URL)] = [ 
      'url' => $eUrl, 
      'status' => curl_getinfo($handle, CURLINFO_HTTP_CODE) 
     ]; 
     curl_multi_remove_handle($mh, $handle); 
     curl_close($handle); 
    } 
    curl_multi_close($mh); 

    return $return; 
} 

var_dump(getStatusCodes(['http://google.de', 'http://stackoverflow.com', 'http://google.de/noone/here']));