合并JS或CSS请求

2014-05-17 16:53  1423人阅读  评论 (0)

合并请求

代码

function merge_js_name() {
    $args = func_get_args();
    sort($args);
    return '/js/'.implode('-', $args).'.js';
}

function merge_css_name() {
    $args = func_get_args();
    sort($args);
    return '/css/'.implode('-', $args).'.css';
}

使用

echo merge_js_name('jquery', 'jqueryui');
echo merge_css_name('jquery', 'jqueryui');

合并文件

代码

function merge_file() {
    // 别名
    static $alias = array(
            'js' => array(
                    'jquery'=>'jquery-1.11.0.min',
            ),
            'css' => array(
                    'jqueryui'=>'jquery-ui'
            ),
    );

    // 获取路径信息
    $pathinfo = pathinfo($_SERVER['REQUEST_URI']);
    $ext = $pathinfo['extension'];
    $alias_list = $alias[$ext];

    // 读取文件信息
    $files = explode('-', $pathinfo['filename']);
    $content = '// '.$pathinfo['filename'].' '.date('Y-m-d H:i:s')."\n\n";
    foreach ($files as $file) {
        $filename = array_key_exists($file, $alias_list) ? $alias_list[$file] : $file;
        $filecontent = file_get_contents("{$_SERVER['DOCUMENT_ROOT']}{$pathinfo['dirname']}/$filename.$ext");
        $content .= "// $file.$ext\n$filecontent\n\n";
    }

    // 写入单独文件
    file_put_contents($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], $content);

    // 重新访问静态文件
    header('Location: '.$_SERVER['REQUEST_URI']);
}

使用

// 使用nginx或apache的文件不存在重定向到合并页面
// 此处模拟nginx或者apache的重定向操作
$_SERVER['REQUEST_URI'] = '/jscss/js/jquery-jqueryui.js';
merge_contents();