错误:从回退到本地副本的CDN动态获取css,如何解决?

时间:2013-07-10 14:03:34

标签: php css function external

我之前也曾问过这个问题,但由于我没有得到可解决的解决方案,我再次问这个问题。我试图从外部CDN服务获取我的CSS,让我们说http://cdn.example.com/

此代码用于检查外部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服务器上创建了一些域,因此无法共享实时链接。

1 个答案:

答案 0 :(得分:2)

正如the docs中所述,如果找不到所述资源,file_get_contents()会发出警告。

这是少数使用@错误抑制运算符的情况之一,例如

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

以防止警告破坏您的输出。