2012年4月28日星期六

PHP合并静态文件

PHP合并静态文件

配置PHP.ini

更改配置项(必须)auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php"

更改配置项(可选)allow_url_include = On

auto_prepend_file.php文件内容

<?php/** * 引入static文件 * @param {array|string} 相对路径 * @param {string} 当前执行脚本所在的路径__FILE__ * */function import_static($files, $path=NULL){    // 更改当前脚本的执行路径    $old_dir = getcwd();    $tmp_dir = (isset($path)) ? dirname($path): dirname(__FILE__);    chdir($tmp_dir);    // 整理包含文件    if (!is_array($files)) {        $tmp = array();        $tmp[] = $files;        $files = $tmp;    }    // 发送头信息    if (isset($files[0])) {        if (stripos($files[0], '.js') !== false) {            $header_str = 'Content-Type:   text/javascript';        } elseif (stripos($files[0], '.css') !== false) {            $header_str = 'Content-Type:   text/css';        }        if (!ob_get_contents()) {            header($header_str);        }    }    // 引入包含文件    foreach($files as $key=>$value) {        require_once($value);    }    // 改回当前脚本的执行路径    chdir($old_dir);}?>

使用方法

"a.js"、"b.js"和"../c.js"是待合并的JS文件,将其合并为base.js.php,则base.js.php中的代码如下:

<?php    import_static(array(        'a.js',        'b.js',        '../c.js',        '../moduleB/all.js.php'    // 也可引用.php文件    ), __FILE__);?>

在HTML页面中使用<script type="text/javascript" src="base.js.php"></script>即可引入。

产品上线前,使用批处理文件进行处理,主要做两方面的工作

  1. 将"*.js.php"输出到"*.js"文件,并删除"*.js.php"。命令行:php *.js.php &gt *.js
  2. 将HTML页面中对"*.js.php"的引用替换为"*.js"。preg_replace()

PS:import_static函数解决了PHP中include()处理相对路径的问题。

待续。。。


TAG: