2013-07-10 20 views
0

我之前也提過這個問題,但由於我沒有得到可以解決的解決方案,我再次提出這個問題。我試圖從外部CDN服務中獲取我的CSS,比如http://cdn.example.com/錯誤:動態地從CDN提取css並將其回退到本地副本,如何解決?

此代碼假設檢查外部CDN上是否存在文件,如果存在,則獲取該文件,否則從本地文件夾中獲取該文件。

請幫我改正這段代碼。

function getCSSfile($filename) 
{ 
    $externalcss = EXTERNAL_CDN.'css/'.$filename.'.css'; 
    $localcss = LOCAL_CDN.'css/'.$filename.'.css'; 

    $ctx = stream_context_create(array(
     'http' => array(
      'method' => 'HEAD' 
     ) 
    )); 

    if (file_get_contents($externalcss, false, $ctx) !== false) { 
     echo '<link href="' . $externalcss . '" rel="stylesheet" type="text/css" media="all"/>'; 
    } else if (file_exists($localcss)) { 
     echo '<link href="' . $localcss . '" rel="stylesheet" type="text/css" media="all"/>'; 
    } else { 
     echo 'Error loading CSS File'; 
    } 
} 

目前的代碼運行正常從外部CDN獲取副本,如果外部CDN不可用它獲取本地副本引發以下錯誤太:

Warning: file_get_contents(http://cdn.site1.com/css/core.css): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in D:\xampp\htdocs\site2\core\core.php on line 165

和在行165這是代碼

if (file_get_contents($externalcss, false, $ctx) !== false) {

我在本地測試它並在我的XAMPP服務器上創建了一些域,因此無法共享活動鏈接。

+0

您將**通過在每個網頁瀏覽中執行遠程'file_get_contents'來銷燬CDN的好處...此外,這不會真正檢測到CDN中斷,因爲任何良好的CDN都將世界各地都有數十個數據中心 - 您只能在這些數據中心的一個或兩個中檢測到中斷。最後,如果你需要這個,*得到一個更好的CDN,並不是一直都是!* – ceejayoz

回答

2

the docs所述,file_get_contents()會在找不到所述資源時發出警告。

這是使用@誤差抑制算子可能是合理的例子的少數情況之一。

if (@file_get_contents(...) !== FALSE) { ... } 

以防止警告堵塞您的輸出。

+0

謝謝首席。這工作完美。 –

相關問題