下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
- 在服务器缓存了压缩过的文件,再次访问减少再压缩时间,降低cpu占用率。
- 通过设置客户端文件缓存时间,降低再次请求次数,可降低85%以上。
- 图片因为已经是压缩格式,只是设置客户端缓存时间,不做压缩处理。
- 服务器必须支持gzip,Rewrite功能。
- 在.htacess文件的“RewriteBase /”下面一行添加下面的代码 RewriteRule (..css$|..js$|..jpg$|..gif$|.*.png$) gzip.PHP?$1
- 上传gzip.PHP到根目录
<?PHP /** * @author Seraphim * @copyright 2012 */ // <!-- 公共的返回header的子程序 --> function sendheader($last_modified,$p_type,$content_length = 0) { // 设置客户端缓存有效时间 header("Expires: " . gmdate("D,d M Y H:i:s",time() + 15360000) . "GMT"); header("Cache-Control: max-age=315360000"); header("Pragma: "); // 设置最后修改时间 header("Last-Modified: " . $last_modified); // 设置文件类型信息 header($p_type); header("Content-Length: " . $content_length); } define('ABSPATH',dirname(__file__) . '/'); $cache = true; $cachedir = 'cache/'; //存放gz文件的目录,确保可写 if (empty($_SERVER['QUERY_STRING'])) exit(); $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip'); if (empty($gzip)) $cache = false; $key = array_shift(explode('?',$_SERVER['QUERY_STRING'])); $key = str_replace('../','',$key); $filename = ABSPATH . $key; $symbol = '_'; $rel_path = str_replace(ABSPATH,dirname($filename)); $namespace = str_replace('/',$symbol,$rel_path); $cache_filename = ABSPATH . $cachedir . $namespace . $symbol . basename($filename) . '.gz'; //生成gz文件路径 $ext = array_pop(explode('.',$filename)); //根据后缀判断文件类型信息 $type = "Content-type: text/html"; //默认的文件类型 switch ($ext) { case 'css': $type = "Content-type: text/css"; break; case 'js': $type = "Content-type: text/javascript"; break; case 'gif': $cache = false; $type = "Content-type: image/gif"; break; case 'jpg': $cache = false; $type = "Content-type: image/jpeg"; break; case 'png': $cache = false; $type = "Content-type: image/png"; break; default: exit(); } if ($cache) { if (file_exists($cache_filename)) { // 假如存在gz文件 $mtime = filemtime($cache_filename); $gmt_mtime = gmdate('D,d M Y H:i:s',$mtime) . ' GMT'; if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';',$_SERVER['HTTP_IF_MODIFIED_SINCE'])) == $gmt_mtime)) { // 与浏览器cache中的文件修改日期一致,返回304 header("HTTP/1.1 304 Not Modified"); // 发送客户端header header("content-encoding :gzip"); sendheader($gmt_mtime,$type); } else { // 读取gz文件输出 $content = file_get_contents($cache_filename); // 发送客户端header sendheader($gmt_mtime,$type,strlen($content)); header("content-encoding: gzip"); // 发送数据 echo $content; } } else if (file_exists($filename)) { // 没有对应的gz文件 $mtime = mktime(); $gmt_mtime = gmdate('D,$mtime) . ' GMT'; // 读取文件 $content = file_get_contents($filename); // 去掉空白的部分 // $content = ltrim($content); // 压缩文件内容 $content = gzencode($content,9,$gzip ? FORCE_GZIP : FORCE_DEFLATE); // 发送客户端header sendheader($gmt_mtime,strlen($content)); header("content-encoding: gzip"); // 发送数据 echo $content; // 写入文件 file_put_contents($cache_filename,$content); } else { header("HTTP/1.0 404 Not Found"); } } else { // 处理不使用Gzip模式下的输出。原理基本同上 if (file_exists($filename)) { $mtime = filemtime($filename); $gmt_mtime = gmdate('D,$_SERVER['HTTP_IF_MODIFIED_SINCE'])) == $gmt_mtime)) { // 与浏览器cache中的文件修改日期一致,返回304 header("HTTP/1.1 304 Not Modified"); // 发送客户端header sendheader($gmt_mtime,strlen($content)); header("content-encoding :gzip"); } else { // 读取文件输出 $content = file_get_contents($filename); // 发送客户端header sendheader($gmt_mtime,strlen($content)); // 发送数据 echo $content; } } else { header("HTTP/1.0 404 Not Found"); } } ?>
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。