2012-12-12 2 views
1

저는 일반적으로 서버 구성에 따라 PHP를 사용하여 CDN 호스트 된 스크립트의 가용성을 원격으로 확인하는 두 가지 방법으로 실행했습니다. 하나는 cURL이고 다른 하나는 fopen입니다. 다음과 같이 각 경우에 사용하는 두 가지 기능을 결합했습니다.WordPress의 CDN 호스트 스크립트 용 단일 기능

function use_cdn(){ 
    $url = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; // the URL to check against 
    $ret = false; 
    if(function_exists('curl_init')) { 
     $curl = curl_init($url); 
     curl_setopt($curl, CURLOPT_NOBODY, true); 
     $result = curl_exec($curl); 
     if (($result !== false) && (curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200)) $ret = true; 
     curl_close($curl); 
    } 
    else { 
     $ret = @fopen($url,'r'); 
    } 
    if($ret) { 
     wp_deregister_script('jquery'); // deregisters the default WordPress jQuery 
     wp_register_script('jquery', $url); // register the external file 
     wp_enqueue_script('jquery'); // enqueue the external file 
    } 
    else { 
     wp_enqueue_script('jquery'); // enqueue the local file 
    } 
} 

...하지만 휠을 재발 명하려는 것은 아닙니다. 이것은 좋은, 단단한 기술인가요? 또는 프로세스를 간소화/간소화하는 방법에 대한 조언을 누군가가 제공 할 수 있습니까?

+0

Google CDN이 중단되면 세상이 끝날 것이라는 것이 매우 걱정됩니다. O.o –

+0

@cryptic 알아,하지만 Google은 CDN이 특정 지역/특정 네트워크/등에서 사용할 수 없게 될 필요가 없습니다. –

+0

그럼 내 간단한 방법을 참조하십시오. –

답변

1

get_headers()을 사용하면 HEAD 요청을 실행하고 응답 코드를 확인하여 파일이 사용 가능한지 확인할 수 있으며 get_headers()가 실패 할 수 있으므로 네트워크 또는 DNS가 다운되었는지 확인할 수 있습니다 이 기능의 빌드이기 때문에, 빠른 것)

function use_cdn() 
{ 
    $url = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; // the URL to check against 
    $online = FALSE; 

    if(function_exists('curl_init')) 
    { 
     $curl = curl_init($url); 
     curl_setopt($curl, CURLOPT_NOBODY, TRUE); 
     $result = curl_exec($curl); 
     if ((FALSE !== $result) && ('200' == curl_getinfo($curl, CURLINFO_HTTP_CODE))) 
     { 
      $online = TRUE; 
     } 
     curl_close($curl); 
    } 
    else if (ini_get('allow_url_fopen')) 
    { 
     stream_context_set_default(array('http' => array('method' => 'HEAD'))); // set as HEAD request 
     $headers = @get_headers($url, 1); // get HTTP response headers 
     if ($headers && FALSE !== strpos($headers[0], '200')) // if get_headers() passed and 200 OK 
     { 
      $online = TRUE; 
     } 
    } 

    if ($online) 
    { 
     wp_deregister_script('jquery'); // deregisters the default WordPress jQuery 
     wp_register_script('jquery', $url); // register the external file 
    } 
    wp_enqueue_script('jquery'); // enqueue registered files 
} 

get_headers (반대 : @ 도메인을 확인할 수없는 경우는 로컬 파일을이 경우 FALSE를 반환하고, 따라서로드되지 않을 것이다, PHP 오류를 억제하는 서명 cURL과 같은 PECL 확장을로드하는 것까지 .fopen()에 관해서는해야 할 일은 응답 헤더를 확인하는 것이고 get_headers()는 단지 그것을 사용하는 것이고 fopen()은 헤더를 얻을 수 없다. , cURL에는 다른 용도가 없습니다. 불필요한 오버 헤드를 언급하고 헤더를 가져 오는 것을 전문으로하지 않으므로이 경우에 사용할 가장 적합한 선택이 될 것입니다.

+0

나는 그것을 좋아한다. 'fopen'이나'cURL'과 반대로'get_headers()'를 사용하면 어떤 이점이 있습니까? 사실 표준이 있습니까? –

+0

get_headers()는 빌드 기능이므로 빠르며, cURL과 같은 PECL 확장을로드하지 않아도됩니다. fopen()에 관해서는 당신이해야 할 일은 응답 헤더를 검사하는 것이고, get_headers()는 단지 그것을 사용하는 것이고, fopen()은 헤더를 얻을 수 없으며, cURL은 불필요한 것을 언급하지 않는 다른 용도를 가지고있다. 헤더를 가져 오는 것을 전문으로하지 않으므로이 경우에 사용할 가장 적합한 선택입니다. –

+0

글쎄, 잘됐다! 수락 됨. 어쩌면 당신의 대답에 그 이점을 설명하는 쪽지를 넣을 수 있을까요? –

관련 문제