>백엔드 개발 >PHP 튜토리얼 >콤보 스크립트는 타오바오를 모방한 스크립트를 자동으로 병합/압축합니다.

콤보 스크립트는 타오바오를 모방한 스크립트를 자동으로 병합/압축합니다.

WBOY
WBOY원래의
2016-07-25 09:02:17918검색
콤보 스크립트는 자동으로 스크립트를 병합/압축합니다.
전체 코드 다운로드: http://www.ctdisk.com/file/9402163

스크립트 사용법:
- php5 이상이 필요합니다.
- 프로그램이 로컬 파일을 찾을 수 없으면 지정된 CDN으로 이동하여 동일한 이름의 파일을 찾습니다.
- 프로그램은 자동으로 -min 파일을 소스 파일로 이스케이프하므로 -min 파일과 원본 파일이 쌍으로 나타나야 한다는 점에 동의해야 합니다.
- 콤보.php 및 minify.php에서 $YOUR_CDN 변수를 정의해야 합니다.
- 로컬 파일을 병합하고 압축하기만 하면 $YOUR_CDN 변수를 재설정할 필요가 없습니다.
- tbcdn의 개발 환경을 시뮬레이션하기 위해 cb.php가 제공됩니다. 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

Taobao CDN 시뮬레이션
- http://a.tbcdn.cn/??1.js,2.js
- http://a.tbcdn.cn/subdir/??1/js,2.js

파일 목록:
- 콤보.php는 압축하지 않고 파일을 결합합니다.
- minify.php는 압축 파일을 병합합니다.
- cssmin.php CSS 압축
- jsmin.php 압축 js
- Taobao CDN 병합 파일 전략의 cb.php 시뮬레이션

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. 함수 캐시 ($etag){
  11. $etag = $etag; //태그 문자열, 임의로 수정 가능
  12. if ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag){
  13. header('Etag:' .$etag,true,304);
  14. 종료;
  15. }
  16. else header('Etag:'.$etag);
  17. }
  18. function get_contents($url){ <…
  19. cur_close($ch);
  20. if ($str !==false) {
  21. return $str;
  22. }else {
  23. return '';
  24. }
  25. }
  26. //확장자 가져오기
  27. function get_extend($file_name) {
  28. $extend =explode("." , $file_name)
  29. $va=count($extend)-1 ;
  30. return $extend[$va];
  31. }
  32. /**
  33. * 논리 시작
  34. */
  35. $files = array();
  36. //존재하는 각 파일 CDN 가능한 파일 형식
  37. $header = array(
  38. 'js' => 'Content-Type: application/x-javascript',
  39. 'css' => 'Content-Type: text/ css',
  40. 'jpg' => '콘텐츠 유형: 이미지/jpg',
  41. 'gif' => '콘텐츠 유형: 이미지/gif',
  42. 'png' => '콘텐츠 유형: 이미지/png',
  43. 'jpeg' => '콘텐츠 유형: 이미지/jpeg',
  44. 'swf' => '
  45. );
  46. $type = '';
  47. foreach ($_GET as $k => $v) {
  48. //가장 일반적인 교체 규칙
  49. $k = preg_replace(
  50. array('/_(js|css|gif|png|jpg|jpeg|swf)$/','/yui/2_8_0r4/','/yui/3_0_0/','/(d )_( d )_(d )/','/(d )_(d )/','/_v(d)/'),
  51. array('.$1','yui/2.8.0r4',' yui/3.0.0','$1.$2.$3','$1.$2','.v$1'),
  52. Trim($k,'/')
  53. );
  54. // 여기에 과도한 변환의 다양한 사례를 추가하세요
  55. $k = str_replace('global.v5.css','global_v5.css',$k);
  56. $k = str_replace('detail.v2.css' ,' Detail_v2.css',$k);
  57. $k = str_replace('cubee_combo','cubee.combo',$k);
  58. if(empty($type)) {
  59. $ type = get_extend($k);
  60. }
  61. //파일이 존재함
  62. if(file_exists($k)) {
  63. $in_str = file_get_contents($k);
  64. // 텍스트 처리
  65. if(preg_match('/js|css/',$type)){
  66. //$files[] = file_get_contents($k);
  67. if($MINIFY == true && $ type = = 'js'){
  68. $files[] = JSMin::minify($in_str);
  69. }else if($MINIFY == true && $type == 'css'){
  70. $files [] = cssmin::minify($in_str);
  71. }else{
  72. $files[] = $in_str;
  73. }
  74. }else{
  75. //텍스트가 아닌 처리
  76. $files[] = array($in_str);
  77. }
  78. }else{
  79. //파일이 존재하지 않습니다
  80. $in_sta = file($YOUR_CDN.$k);
  81. / /텍스트 처리
  82. if(preg_match('/js|css/',$type)){
  83. $files[] = '/* http://a.tbcdn.cn/'.$k. ' */';
  84. $inner_str = Join('',$in_sta);
  85. if($MINIFY == true && $type == 'js'){
  86. $files[] = JSMin: :minify($inner_str);
  87. }else if($MINIFY == true && $type == 'css'){
  88. $files[] = cssmin::minify($inner_str);
  89. } else{
  90. $files[] = $inner_str;
  91. }
  92. }else{
  93. //비텍스트 처리
  94. $files[] = $in_sta;
  95. }
  96. }
  97. }
  98. header("만료: " . date("D, j M Y H:i:s", strtotime("현재 10년")) ." GMT");
  99. / /텍스트 처리
  100. header($header[$type]);//파일 유형
  101. if(preg_match('/js|css/',$type)){
  102. $result = Join(" " ,$files);
  103. }else{
  104. //비텍스트 처리
  105. $result = Join("",$files[0]);
  106. }
  107. cache(md5( $ result));//etag, Etag 처리가 중복되나요?
  108. echo $result;
  109. ?>
  110. 코드 복사
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.