ホームページ  >  記事  >  バックエンド開発  >  Combo Script は、淘宝網を模倣したスクリプトを自動的にマージ/圧縮します

Combo Script は、淘宝網を模倣したスクリプトを自動的にマージ/圧縮します

WBOY
WBOYオリジナル
2016-07-25 09:02:17856ブラウズ
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 淘宝網 CD​​N ファイル結合戦略のシミュレーション

CSSの例

js の例

PHP ファイルのエンコーディングは一律に utf-8 を使用します
  1. /* 圧縮*/
  2. $MINIFY = true;
  3. /* デフォルトの cdn アドレス*/
  4. $YOUR_CDN = 'http://a.tbcdn.cn/';
  5. require 'jsmin .php';
  6. require 'cssmin.php';
  7. /**
  8. * 電子タグキャッシュを設定します
  9. */
  10. functioncache($etag){
  11. $etag = $etag //タグ文字列は自由に変更可能
  12. if ($ _SERVER ['HTTP_IF_NONE_MATCH'] == $etag){
  13. header('Etag:'.$etag,true,304);
  14. exit;
  15. }
  16. else header('Etag:'.$etag);
  17. }
  18. function get_contents($url){
  19. $ch =curl_init($url);
  20. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  21. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  22. $str =curl_exec($ch);
  23. curl_close ($ch);
  24. if ($str !==false) {
  25. return $str;
  26. }else {
  27. return '';
  28. }
  29. }
  30. //拡張機能を取得
  31. function get_extend($file_name) {
  32. $extend =explode("." , $file_name);
  33. $va=count($extend)-1;
  34. return $extend[$va]
  35. }
  36. /**
  37. * ロジックの始まり
  38. */
  39. $files = array();
  40. //cdn 上に存在する可能性のあるさまざまなファイル タイプ
  41. $header = array(
  42. 'js' => 'Content-Type: application/x-javascript',
  43. 'css' => ' Content -タイプ: text/css',
  44. 'jpg' => 'Content-Type: image/jpg',
  45. 'gif' => 'Content-Type: image/gif',
  46. 'png' =>コンテンツ タイプ: image/png',
  47. 'jpeg' => 'コンテンツ タイプ: image/jpeg',
  48. 'swf' => 'コンテンツ タイプ: application/x-shockwave-flash'
  49. ); $type = '';
  50. foreach ($_GET as $k => $v) {
  51. //最も一般的な置換ルール
  52. $k = preg_replace(
  53. array('/_(js|css|gif|png | jpg|jpeg|swf)$/','/yui/2_8_0r4/','/yui/3_0_0/','/(d+)_(d+)_(d+)/','/(d+)_( d+ )/','/_v(d)/'),
  54. array('.$1','yui/2.8.0r4','yui/3.0.0','$1.$2.$3','$1. $2 ','.v$1'),
  55. trim($k,'/')
  56. );
  57. //過剰な変換のさまざまなケースをここに追加します
  58. $k = str_replace('global.v5.css',' global_v5.css ',$k);
  59. $k = str_replace('detail.v2.css','detail_v2.css',$k);
  60. $k = str_replace('cubee_combo','cubee.combo',$ k);
  61. if(empty($type)) {
  62. $type = get_extend($k);
  63. }
  64. //ファイルは存在します
  65. if(file_exists($k)) {
  66. $in_str = file_get_contents($k) ;
  67. //テキストを処理します
  68. if(preg_match('/js|css/',$type)){
  69. //$files[] = file_get_contents($k);
  70. if($MINIFY == true && $type = = ' js'){
  71. $files[] = JSMin::minify($in_str);
  72. }else if($MINIFY == true && $type == 'css'){
  73. $files[] = cssmin:: minify( $in_str);
  74. }else{
  75. $files[] = $in_str;
  76. }
  77. }else{
  78. //非テキストの処理
  79. $files[] = array($in_str);
  80. }
  81. }else{
  82. / /ファイルが存在しません
  83. $in_sta = file($YOUR_CDN.$k);
  84. //テキスト処理
  85. if(preg_match('/js|css/',$type)){
  86. $files[] = '/ * http://a.tbcdn.cn/'.$k.' */';
  87. $inner_str = join('',$in_sta);
  88. if($MINIFY == true && $type == 'js' ){
  89. $files[] = JSMin::minify($inner_str);
  90. }else if($MINIFY == true && $type == 'css'){
  91. $files[] = cssmin::minify($inner_str );
  92. }else{
  93. $files[] = $inner_str;
  94. }
  95. }else{
  96. //非テキスト処理
  97. $files[] = $in_sta;
  98. }
  99. }
  100. }
  101. header("有効期限: " . date("D, j M Y H:i:s", strtotime("now + 10 years")) ." GMT");
  102. //テキスト処理
  103. header($header[$type]);// ファイルtype
  104. if(preg_match('/js|css/',$type)){
  105. $result = join("",$files);
  106. }else{
  107. //非テキスト処理
  108. $result = join( " ",$files[0]);
  109. }
  110. cache(md5($result));//etag、Etag の処理は冗長ですか?
  111. echo $result;
  112. ?>
コードをコピー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。