2009-11-12 2 views

답변

8
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_NOBODY, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); //follow up to 10 redirections - avoids loops 
$data = curl_exec($ch); 
curl_close($ch); 
if (!$data) { 
    echo "Domain could not be found"; 
} 
else { 
    preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches); 
    $code = end($matches[1]); 
    if ($code == 200) { 
    echo "Page Found"; 
    } 
    elseif ($code == 404) { 
    echo "Page Not Found"; 
    } 
} 
here에서 코드의

수정 된 버전.

1

저는 최근에 같은 정보를 찾고있었습니다. 정말 멋진 코드를 여기에서 찾을 : http://php.assistprogramming.com/check-website-status-using-php-and-curl-library.html

function Visit($url){ 

    $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; 
    $ch = curl_init(); 
    curl_setopt ($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch,CURLOPT_VERBOSE,false); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    $page=curl_exec($ch); 
    //echo curl_error($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 




    if($httpcode >= 200 && $httpcode < 300){ 
     return true; 
    } 
    else { 
     return false; 
    } 

} 

    if(Visit("http://www.site.com")){ 
     echo "Website OK"; 
    } 
    else{ 
     echo "Website DOWN"; 
    } 
+0

'304 Not Modified ','307 Temporary Redirect' 등은 어떨까요? – nickf

+0

@nickf - '304 Not Modified'는 말괄 반올림과 관련이 있습니까? 어떤 머리글이 뒤틀리는 지 모릅니다. 지정한 것 이외의 것을 보내지 않는다고 가정 할 때, 마지막으로 물어 본 이후로 페이지가 수정되었는지 여부를 서버가 어떻게 알 수 있습니까? –

2

내가 말려 있거나이 문제를 해결하기는 fsockopen 좋아합니다. 어느 쪽이나 요청한 파일의 상태에 관한 헤더 데이터를 제공 할 수 있습니다. 특히, 404 (파일을 찾을 수 없음) 응답을 찾고있을 것입니다. 이 기능은 DNS 나 다른 오류의 경우에는 응답 코드 (리디렉션의 경우 마지막), 또는 false를 반환합니다

http://www.php.net/manual/en/function.fsockopen.php#39948

+2

물론 404는 "찾을 수 없음"이고 404는 "파일을 찾을 수 없음"이어야합니다. –

2

: 여기는 fsockopen으로 사용했습니다 예입니다. 하나의 인수 (url)가 제공되면 HEAD 요청이 이루어집니다. 두 번째 인수가 주어지면 전체 요청이 이루어지고 응답의 내용 (있는 경우)이 두 번째 인수로 전달 된 변수에 참조로 저장됩니다.

function url_response_code($url, & $contents = null) 
{ 
    $context = null; 
    if (func_num_args() == 1) { 
     $context = stream_context_create(array('http' => array('method' => 'HEAD'))); 
    } 
    $contents = @file_get_contents($url, null, $context); 
    $code = false; 
    if (isset($http_response_header)) { 
     foreach ($http_response_header as $header) { 
      if (strpos($header, 'HTTP/') === 0) { 
       list(, $code) = explode(' ', $header); 
      } 
     } 
    } 
    return $code; 
} 
0

이러한 솔루션을 찾을 수 없습니다 페이지에 대한 적절한 응답을 제공하지 않는 사이트에 작동하지 않습니다 그냥 메모. 예를 들어 사이트의 페이지 테스트는 문제가 발생하여 처리 할 수없는 요청이있을 때 메인 사이트 페이지를로드하기 만하면됩니다. 따라서 사이트는 존재하지 않는 페이지에 대해서도 거의 항상 200 개의 응답을 제공합니다.

일부 사이트는 표준 페이지에서 맞춤 오류를 제공하지만 404 헤더를 제공하지 않습니다.

페이지의 예상 컨텐츠를 알고 예상되는 컨텐츠가 존재하는지 테스트하거나 페이지 내에서 예상되는 오류 텍스트를 테스트하지 않으면 모두 약간 지저분해질 수 있습니다.

+0

가능하면 설명에 대한 참조를 추가하십시오. – DontVoteMeDown

관련 문제