Inhaltsverzeichnis
php使用gzip压缩传输js和css文件的方法,
css
gzip
js
php
php使用gzip压缩传输js和css文件的方法,
本文实例讲述了php使用gzip压缩传输js和css文件的方法。分享给大家供大家参考。具体如下:
<?php /** * 完整调用示例: * 1、combine.php?t=j&b=public&fs=jslib.jquery,function * * 该例子调用的是网站根目录下的public/jslib/jquery.js和public/function.js * * 2、combine.php?t=j&fs=jslib.jquery,function * * 该例子调用的是网站根目录下的jslib/jquery.js和function.js * * 3、combine.php?t=c&b=public.css&fs=common,index * * 该例子调用的是网站根目录下的public/css/common.css和public/css/index.css * * 4、combine.php?t=c&fs=css.common * 该例子调用的是网站根目录下的css/common.css * * 注:多个文件名之间用,分隔;只有一个文件名最后不要有, * 用,分隔的多个文件会被压缩进一个文件,一次性传给浏览器 **/ $is_bad_request=false; $cache = true; $doc_root_uri=$_SERVER['DOCUMENT_ROOT'].'/'; $cachedir = $doc_root_uri . 'public/cache'; //文件类型,j为js,c为css $type=isset($_GET['t'])?($_GET['t']=='j'||$_GET['t']=='c'?$_GET['t']:''):''; //存放js和css文件的基目录, 例如:?b=public.js 代表的是/public/js文件夹,出发点是网站根目录 //基目录参数不是必须的,如果有基目录那么这个基目录就会附加在文件名之前 $base =isset($_GET['b'])?($doc_root_uri.str_replace('.','/',$_GET['b'])):$doc_root_uri; //文件名列表,文件名不带后缀名.比如基目录是 //文件名的格式是 :基目录(如果有)+文件包名+文件名 //例如:类型是j, // 文件名public.js.jquery // 如果有基路径且为public, // 那么转换后的文件名就是/public/public/js/jquery.js // 如果没有基路径 // 那么转换后的文件名就是/public/js/jquery.js //多个文件名之间用,分隔 $fs=isset($_GET['fs'])?str_replace('.','/',$_GET['fs']):''; $fs=str_replace(',','.'.($type=='j'?'js,':'css,'),$fs); $fs=$fs.($type=='j'?'.js':'.css'); if($type==''||$fs==''){$is_bad_request=true;} //die($base); if($is_bad_request){header ("HTTP/1.0 503 Not Implemented");} $file_type=$type=='j'?'javascript':'css'; $elements = explode(',',preg_replace('/([^?]*).*/', '\1', $fs)); // Determine last modification date of the files $lastmodified = 0; while (list(,$element) = each($elements)) { $path =$base . '/' . $element; if (($type == 'j' && substr($path, -3) != '.js') || ($type == 'c' && substr($path, -4) != '.css')) { header ("HTTP/1.0 403 Forbidden"); exit; } if (substr($path, 0, strlen($base)) != $base || !file_exists($path)) { header ("HTTP/1.0 404 Not Found"); exit; } $lastmodified = max($lastmodified, filemtime($path)); } // Send Etag hash $hash = $lastmodified . '-' . md5($fs); header ("Etag: \"" . $hash . "\""); if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) == '"' . $hash . '"') { // Return visit and no modifications, so do not send anything header ("HTTP/1.0 304 Not Modified"); header ("Content-Type: text/" . $file_type); header ('Content-Length: 0'); } else { // First time visit or files were modified if ($cache) { // Determine supported compression method $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'); $deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate'); // Determine used compression method $encoding = $gzip ? 'gzip' : ($deflate ? 'deflate' : 'none'); // Check for buggy versions of Internet Explorer if (!strstr($_SERVER['HTTP_USER_AGENT'], 'Opera') && preg_match('/^Mozilla\/4\.0 \(compatible; MSIE ([0-9]\.[0-9])/i', $_SERVER['HTTP_USER_AGENT'], $matches)) { $version = floatval($matches[1]); if ($version < 6) $encoding = 'none'; if ($version == 6 && !strstr($_SERVER['HTTP_USER_AGENT'], 'EV1')) $encoding = 'none'; } // Try the cache first to see if the combined files were already generated $cachefile = 'cache-' . $hash . '.' . $file_type . ($encoding != 'none' ? '.' . $encoding : ''); if (file_exists($cachedir . '/' . $cachefile)) { if ($fp = fopen($cachedir . '/' . $cachefile, 'rb')) { if ($encoding != 'none') { header ("Content-Encoding: " . $encoding); } header ("Content-Type: text/" . $file_type); header ("Content-Length: " . filesize($cachedir . '/' . $cachefile)); fpassthru($fp); fclose($fp); exit; } } } // Get contents of the files $contents = ''; reset($elements); while (list(,$element) = each($elements)) { $path = $base . '/' . $element; $contents .= "\n\n" . file_get_contents($path); } // Send Content-Type header ("Content-Type: text/" . $file_type); if (isset($encoding) && $encoding != 'none') { // Send compressed contents $contents = gzencode($contents, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE); header ("Content-Encoding: " . $encoding); header ('Content-Length: ' . strlen($contents)); echo $contents; } else { // Send regular contents header ('Content-Length: ' . strlen($contents)); echo $contents; } // Store cache if ($cache) { if ($fp = fopen($cachedir . '/' . $cachefile, 'wb')) { fwrite($fp, $contents); fclose($fp); } } }
Nach dem Login kopieren
希望本文所述对大家的php程序设计有所帮助。
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel
R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor
By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor
By 尊渡假赌尊渡假赌尊渡假赌
Wie lange dauert es, um Split Fiction zu schlagen?
3 Wochen vor
By DDD
R.E.P.O. Dateispeicherspeicherort: Wo ist es und wie schützt sie?
3 Wochen vor
By DDD

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein
