2014-01-12 2 views
3

내 사이트는 PHP의 cURL을 사용하여 5 개의 서로 다른 URL을 확인하여 온라인 상태인지 확인합니다. 문제는 페이지를로드하는 데 너무 오래 걸리는 것입니다 (특히 확인중인 사이트 중 하나가 다운 된 경우). AJAX를 사용하여 원격 사이트가 온라인 상태인지 확인하십시오.

나는 jQuery의 아약스가 잘 작동 소리, 그래서 나는이 코드를 시도 :

<div class="alert alert-info" id="forum-blockland-us"><b>Checking...</b></div> 
<script> 
$.ajax({ type: "GET", 
    url: "http://forum.blockland.us/", 
    cache:false, 
    success: function() { 
     $("#forum-blockland-us").addClass("alert-success"); 
     $("#forum-blockland-us").removeClass("alert-info"); 
     $("#forum-blockland-us").html("<b>Online</b>"); 
    }, 
    error: function() { 
     $("#forum-blockland-us").addClass("alert-danger"); 
     $("#forum-blockland-us").removeClass("alert-info"); 
     $("#forum-blockland-us").html("<b>Offline</b>"); 
    } 
}); 
</script> 

를하지만 항상 내가 사이트가 온라인 상태인지 100 %를 아는 경우에도 오류를 반환합니다.

+0

는 [문서의 하단에 "추가 참고 사항"을 참조하십시오 '.ajax()'] (http://api.jquery.com/jquery.ajax/). –

+0

페이지의 이미지를 서버에있는 녹색 온라인 이미지로 변경하거나 페이지를 변경하고 온라인으로 알려주는 각 서버에서 자바 스크립트를 다운로드하는 것과 같은 하위 기술 방법을 사용해보십시오. – Wayne

답변

8

사이트가 원격 인 경우 Same Origin Policy으로 인해 자바 스크립트로 사이트를 만들 수없는 경우가 많습니다.

그러나 PHP에서는 HEAD 요청 만 할 수 있으므로 내용을로드하지 않으므로 훨씬 빠릅니다.

희망이 도움이됩니다. 건배

+0

나는 이것을 시험하고있다. 그러나 이전의 문제는 웹 사이트가 다운되었을 때 페이지를로드하는 데 시간이 오래 걸렸습니다. HEAD를 사용할 때 사이트가 다운되면 여전히 오랜 시간이 걸릴 것입니까? – Zapk

+0

사이트가 다운 된 경우 가져 오기 또는 게시와 동일합니다. 트릭은 CURLOPT_TIMEOUT을 최대 5 초로 지정해야하므로 컬이 더 오래 걸리지 않는다는 것입니다. :) Alireza가 게시 한 링크를 확인하십시오. http://www.wrichards.com/blog/2009/05/php-check-if-a-url-exists-with-curl/ –

+0

아, CURLOPT_CONNECTTIMEOUT을 알지 못했습니다. 와 CURLOPT_TIMEOUT이 달랐습니다. 나는 CURLOPT_TIMEOUT을 3으로 설정했다. – Zapk

2

@Edgar는 당신이 더 PHP에 의해 그것을 말했다, 당신이 원하는 경우,이 방법이므로 :

function urlExists($url=NULL) 
{ 
    if($url == NULL) return false; 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 
    if($httpcode>=200 && $httpcode<300){ 
     return true; 
    } else { 
     return false; 
    } 
} 

Source

+0

나는 이것을 분명히 했어야하는데, 전에 PHP를 사용했다. 문제는 cURL이 검사중인 사이트가 다운 된 경우 페이지의 로딩 시간을 엄청나게 연장한다는 것입니다. – Zapk

관련 문제