IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

处理统一资源文件的cdn地址

废墟 2012-01-24 13:51:27 累计浏览 3,303 次
本机暂存
在项目开发中,我们常常会使用到cdn,但是呢,浏览器针对单个域名只能同时发起2个请求,这就造成了空有大量带宽,但是处理时间却还是很长。
为了解决这个问题,常常会对cdn域名建立多个二级域名,来解决浏览器同域名限制2个并发的问题。

这里我使用的ci框架
<?php

if (!defined('BASEPATH'
))
    exit(
'No direct script access allowed'
);

//如果未定义站点cdn二级路径名称,则自行定义之
if (!defined('SITE_CDN_NAME'
)) {
    
define('SITE_CDN_NAME''app'
);
}
//如果未定义站点cdn域名,则自行定义之
if (!defined('SITE_CDN_DOMAIN'
)) {
    
define('SITE_CDN_DOMAIN''.xs8xs8.cn'
);
}

/**
 * 获取CDN相关资源地址
 */
class cdn
{

    public function 
expires($min
) {
        
$expires $min*60
;
        
header("Pragma: public"
);
        
header("Cache-Control: maxage=" $expires
);
        
header("Expires: " gmdate("D, d M Y H:i:s"TIMESTAMP $expires) . " GMT"
);
    }

    
/**
     * 获取资源文件CDN路径
     * 例如:
     *     http://book.xs8.cn/static/js/jquery.js
     *     传递参数时需传递jquery.js
     * @param string $filename
     * @param bool $global 是否获取共用文件
     * @return string
     */
    
public function get_resources($filename$global false
) {
        
$path_parts pathinfo($filename
);
        
$ext strtolower($path_parts['extension'
]);

        if (
in_array($ext, array('js''css'
))) {
            
$method 'get_cdn_' $ext
;
            return 
$this->$method($filename$global
);
        } else if (
in_array($ext, array('jpg''jpeg''gif''png''bmp'
))) {
            return 
$this->get_cdn_img($filename$global
);
        } else if (
in_array($ext, array('swf''flv'
))) {
            return 
$this->get_cdn_flash($filename$global
);
        } else {
            return 
SITE_URL $path
;
        }
    }

    private function 
get_cdn_pre_config($filename$global
) {
        
$site_cdn_name $global == false SITE_CDN_NAME 'www'
;
        
$url_pre sprintf("%u"crc32(md5(strtolower($filename)))) % 1
//若要生成s1和s2则代码改为:%2+1
        
return array('site_cdn_name' => $site_cdn_name'url_pre' => $url_pre
);
    }

    public function 
get_cdn_js($filename$global false
) {
        
$cdn_config $this->get_cdn_pre_config($filename$global
);

        
$url 'http://s' $cdn_config['url_pre'] . SITE_CDN_DOMAIN '/' $cdn_config['site_cdn_name'] . '/js/' $filename
;
        return 
$url
;
    }

    public function 
get_cdn_css($filename$global false
) {
        
$cdn_config $this->get_cdn_pre_config($filename$global
);

        
$url 'http://s' $cdn_config['url_pre'] . SITE_CDN_DOMAIN '/' $cdn_config['site_cdn_name'] . '/css/' $filename
;
        return 
$url
;
    }

    public function 
get_cdn_img($filename$global false
) {
        
$cdn_config $this->get_cdn_pre_config($filename$global
);

        
$url 'http://s' $cdn_config['url_pre'] . SITE_CDN_DOMAIN '/' $cdn_config['site_cdn_name'] . '/images/' $filename
;
        return 
$url
;
    }

    public function 
get_cdn_flash($filename$global false
) {
        
$cdn_config $this->get_cdn_pre_config($filename$global
);

        
$url 'http://s' $cdn_config['url_pre'] . SITE_CDN_DOMAIN '/' $cdn_config['site_cdn_name'] . '/flash/' $filename
;
        return 
$url
;
    }

}

同分类推荐文章

  1. translateZ() (2026-06-25 21:18:56)
  2. translateY() (2026-06-25 21:17:56)
  3. translateX() (2026-06-25 21:16:01)

查看更多 前端 文章 →

建议继续学习

  1. 如何成为Python高手 (累计阅读 54,992)
  2. Linux 性能监控、测试、优化工具 (累计阅读 13,011)
  3. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,789)
  4. Rolling cURL: PHP并发最佳实践 (累计阅读 11,487)
  5. 淘宝图片存储架构 (累计阅读 10,960)
  6. 关于使用STL的红黑树map还是hashmap的问题 (累计阅读 8,875)
  7. jQuery性能优化指南 (累计阅读 8,819)
  8. 从谷歌宕机事件认识互联网工作原理 (累计阅读 8,746)
  9. 提升磁盘IO性能的几个技巧 (累计阅读 8,510)
  10. 关于PHP的编译和执行分离 (累计阅读 8,345)