Combo Script はスクリプトを自動的にマージ/圧縮します
完全なコードのダウンロード:
http://www.ctdisk.com/file/9402163
スクリプトの使用:
- php5 以降が必要です
- プログラムがローカル ファイルを見つけられない場合、指定された cdn に移動して同じ名前のファイルを見つけます。
- プログラムは、-min ファイルをソース ファイルとして自動的にエスケープするため、-min ファイルと元のファイルがペアで表示される必要があることに同意する必要があります
- combo.php と minify.php で $YOUR_CDN 変数を定義する必要があります
- ローカルファイルをマージして圧縮するだけの場合は、$YOUR_CDN 変数をリセットする必要はありません
- cb.php は、tbcdn の開発環境をシミュレートするためにここに提供されています。apache の設定は cb.php にあります。
ファイルを結合
- http://yourdomain.com/combo.php?app/js/1.js&app/js/2.js
結合して圧縮する
- http://yourdomain.com/minify.php?app/js/1.js&app/js/2.js
タオバオ CDN をシミュレートする
- http://a.tbcdn.cn/??1.js,2.js
- http://a.tbcdn.cn/subdir/??1/js,2.js
ファイルリスト:
- combo.php は圧縮せずにファイルを結合します
- minify.php は圧縮ファイルをマージします
- cssmin.php CSSを圧縮
- jsmin.php は js を圧縮します
- cb.php 淘宝網 CDN ファイル結合戦略のシミュレーション
CSSの例
js の例
PHP ファイルのエンコーディングは一律に utf-8 を使用します
- /* 圧縮*/
- $MINIFY = true;
- /* デフォルトの cdn アドレス*/
- $YOUR_CDN = 'http://a.tbcdn.cn/';
- require 'jsmin .php';
- require 'cssmin.php';
- /**
- * 電子タグキャッシュを設定します
- */
- functioncache($etag){
- $etag = $etag //タグ文字列は自由に変更可能
- if ($ _SERVER ['HTTP_IF_NONE_MATCH'] == $etag){
- header('Etag:'.$etag,true,304);
- exit;
- }
- else header('Etag:'.$etag);
- }
- function get_contents($url){
- $ch =curl_init($url);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- $str =curl_exec($ch);
- curl_close ($ch);
- if ($str !==false) {
- return $str;
- }else {
- return '';
- }
- }
- //拡張機能を取得
- function get_extend($file_name) {
- $extend =explode("." , $file_name);
- $va=count($extend)-1;
- return $extend[$va]
- }
- /**
- * ロジックの始まり
- */
- $files = array();
- //cdn 上に存在する可能性のあるさまざまなファイル タイプ
- $header = array(
- 'js' => 'Content-Type: application/x-javascript',
- 'css' => ' Content -タイプ: text/css',
- 'jpg' => 'Content-Type: image/jpg',
- 'gif' => 'Content-Type: image/gif',
- 'png' =>コンテンツ タイプ: image/png',
- 'jpeg' => 'コンテンツ タイプ: image/jpeg',
- 'swf' => 'コンテンツ タイプ: application/x-shockwave-flash'
- ); $type = '';
- foreach ($_GET as $k => $v) {
- //最も一般的な置換ルール
- $k = preg_replace(
- array('/_(js|css|gif|png | jpg|jpeg|swf)$/','/yui/2_8_0r4/','/yui/3_0_0/','/(d+)_(d+)_(d+)/','/(d+)_( d+ )/','/_v(d)/'),
- array('.$1','yui/2.8.0r4','yui/3.0.0','$1.$2.$3','$1. $2 ','.v$1'),
- trim($k,'/')
- );
- //過剰な変換のさまざまなケースをここに追加します
- $k = str_replace('global.v5.css',' global_v5.css ',$k);
- $k = str_replace('detail.v2.css','detail_v2.css',$k);
- $k = str_replace('cubee_combo','cubee.combo',$ k);
-
- if(empty($type)) {
- $type = get_extend($k);
- }
- //ファイルは存在します
- if(file_exists($k)) {
- $in_str = file_get_contents($k) ;
- //テキストを処理します
- if(preg_match('/js|css/',$type)){
- //$files[] = file_get_contents($k);
- if($MINIFY == true && $type = = ' js'){
- $files[] = JSMin::minify($in_str);
- }else if($MINIFY == true && $type == 'css'){
- $files[] = cssmin:: minify( $in_str);
- }else{
- $files[] = $in_str;
- }
- }else{
- //非テキストの処理
- $files[] = array($in_str);
- }
- }else{
- / /ファイルが存在しません
- $in_sta = file($YOUR_CDN.$k);
- //テキスト処理
- if(preg_match('/js|css/',$type)){
- $files[] = '/ * http://a.tbcdn.cn/'.$k.' */';
- $inner_str = join('',$in_sta);
- if($MINIFY == true && $type == 'js' ){
- $files[] = JSMin::minify($inner_str);
- }else if($MINIFY == true && $type == 'css'){
- $files[] = cssmin::minify($inner_str );
- }else{
- $files[] = $inner_str;
- }
- }else{
- //非テキスト処理
- $files[] = $in_sta;
- }
- }
- }
-
- header("有効期限: " . date("D, j M Y H:i:s", strtotime("now + 10 years")) ." GMT");
- //テキスト処理
- header($header[$type]);// ファイルtype
- if(preg_match('/js|css/',$type)){
- $result = join("",$files);
- }else{
- //非テキスト処理
- $result = join( " ",$files[0]);
- }
- cache(md5($result));//etag、Etag の処理は冗長ですか?
- echo $result;
- ?>
-
-
コードをコピー
|