当CDN不可达时的回退;服务器端使用php


A "fallback when the CDN’s unreachable" server side using php

我想模拟服务器端,所以:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
if (typeof jQuery == 'undefined')
{
    document.write(unescape("%3Cscript src='/Scripts/jquery-1.3.2.min.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>

在php中输入:

function isurlok($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    if(!curl_errno($ch))
        $info = curl_getinfo($ch);
    curl_close($ch);
    if (isset($info) && $info['http_code'] == 200) {
        if ($info['http_code'] == 200 ) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

获取资源的可用性(在本例中为文件),然后是:

if ( isurlok ("https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js") {
  // remote file
  print "<script type='"text/javascript'" src='"https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js'"></script>";
  print "remote file";
} else {
 // local file
 print "<script type='"text/javascript'" src='"jquery/1.11.3/jquery.min.js'"></script>";
 print "local file";
}

为什么不工作?我的意思是,脚本返回"本地文件"时,远程文件存在,我等待返回"远程文件"。如果我用:"http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js"改变谷歌的url,那么它可以正常工作。我错在哪里?在情况下,我怎么能修复脚本,因为它总是工作?非常感谢。

当您尝试从https源获取时,curl函数需要更多的参数。

function isurlok( $url ) {
    /* You can download the cacert.pem from the web - search on Google */
    $cacert='/path/to/cacert.pem';
    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_NOBODY, true );
    curl_setopt( $ch, CURLOPT_USERAGENT, 'curl-fetchurl' );
    if( parse_url( $url,PHP_URL_SCHEME )=='https' ){
        curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );
        curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, 1 );
        curl_setopt( $curl, CURLOPT_CAINFO, realpath( $cacert ) );
    }
    curl_exec( $ch );
    if( !curl_errno( $ch ) ) $info = curl_getinfo( $ch );
    curl_close( $ch );

    if ( isset( $info ) && array_key_exists('http_code',$info)) {
        return $info['http_code'] == 200 ? true : false;
    }
    return false;
}