【发布时间】:2013-07-06 03:36:45
【问题描述】:
我正在尝试从外部 CDN 服务获取我的 CSS,比如说 http://cdn.example.com/。
此代码用于检查外部 CDN 上是否存在文件,如果存在,则获取该文件,否则从本地文件夹获取。
目前这仅获取本地副本,即使该文件存在于外部 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';
}
}
更新:
根据@DaveRandom 的建议更新了代码。当前代码运行良好,它从外部 CDN 获取副本,但如果外部 CDN 不可用,它会获取本地副本但也会引发以下错误:
Warning: file_get_contents(http://cdn.localtest.com/css/core.css): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in D:\xampp\htdocs\localtest2\core\core.php on line 165
在第 165 行,这是代码
if (file_get_contents($externalcss, false, $ctx) !== false) {
我在本地测试它并在我的 XAMPP 服务器上创建了一些域,因此无法共享实时链接。
【问题讨论】:
-
你确定所有的 URL 都是正确的吗?您使用的实际 URL 是什么?
-
旁注:最后一个
else语句不应该存在,因为这会将错误回显到 HTML 中。或者,您可以回显'<!-- Error loading CSS File -->'以生成 HTML 注释。 -
@Alfred 感谢您的建议。我用它更正并更新了我的答案。但是问题仍然存在。