php 数据压缩传输,http压缩传输方案

"由于页面加载速度比较慢,所以想尝试下php的压缩传输方式,鼓捣了一段时间,中间还把php集成环境搞挂了,索性数据库找回来了,不然后果很严重。\n\n经过不断探索实践,终于在同事的帮助下解决了,哈哈。下面记录几种解决方案\n\n## 原理\n\n```\nheader(\"Content-Encoding: gzip\");\necho gzencode('songjiankang');\n```\n## 一、php方式\n\n1. ob_gzhandler(为php内置函数,具体参考手册)\n\n```\nob_start('ob_gzhandler');\nthis.display('index.html');\n```\n2. 自定义\n\n> thinkphp3.x下,函数写在Application/Common/Common/function.php,没有自建\n\n```\nfunction ob_gzip ($content) { // $content 就是要压缩的页面内容,或者说饼干原料\n if (\n ! headers_sent() && // 如果页面头部信息还没有输出\n extension_loaded(\"zlib\") && // 而且zlib扩展已经加载到PHP中\n strstr($_SERVER[\"HTTP_ACCEPT_ENCODING\"], \"gzip\") // 而且浏览器说它可以接受GZIP的页面\n ) {\n $content = gzencode($content . \" \\n//此页已压缩\", 9); // 此页已压缩”的注释标签,然后用zlib提供的gzencode()函数执行级别为9的压缩,这个参数值范围是0-9,0表示无压缩,9表示最大压缩,当然压缩程度越高越费CPU。\n // 然后用header()函数给浏览器发送一些头部信息,告诉浏览器这个页面已经用GZIP压缩过了!\n header(\"Content-Encoding: gzip\");\n header(\"Vary: Accept-Encoding\");\n header(\"Content-Length: \" . strlen($content));\n }\n return $content; // 返回压缩的内容,或者说把压缩好的饼干送回工作台。\n}\n```\n\n使用\n\n```\nob_start('ob_gzip ');\nthis.display('index.html');\n```\n\n### 二、apache方式\n\n打开httpd.conf配置文件\n\n1. 加载so\n\n```\nLoadModule headers_module modules/mod_headers.so\nLoadModule deflate_module modules/mod_deflate.so\nLoadModule filter_module modules/mod_filter.so\n```\n\n2. 添加规则\n\n```\n\nAddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/json application/x-httpd-php application/x-javascript application/javascript\n\n```\n\n### 三、nginx方式\n\n```\nhttp {\n include mime.types;\n default_type application/octet-stream;\n\n #log_format main '$remote_addr - $remote_user [$time_local] \"$request\" '\n # '$status $body_bytes_sent \"$http_referer\" '\n # '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n\n #access_log logs/access.log main;\n\n sendfile on;\n #tcp_nopush on;\n\n #keepalive_timeout 0;\n keepalive_timeout 65;\n\t\n #开启gzip\n gzip on;\n gzip_min_length 1k;\n gzip_buffers 4 16k;\n gzip_comp_level 2;\n gzip_types text/css application/javascript image/jpeg image/gif image/png;\n gzip_vary on;\n gzip_disable \"MSIE [1-6]\\.\";\n\n \n server {\n listen 80;\n server_name localhost;\n client_max_body_size 20M; // 默认1M,加大请求体,上传大文件\n #charset koi8-r;\n\n #access_log logs/host.access.log main;\n\n location / {\n try_files $uri $uri/ /index.html;\n root html/dist;\n index index.html index.htm;\n chunked_transfer_encoding on; // 开启chunk\n }\n \n # 缓存js、css\n location ~ .*\\.(js|css)?$ {\n expires 1h;\n }\n\n location /test {\n proxy_pass http://www.xxx.com/test;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n }\n#...\n```\n\n### 四、node中间件compression\n\nnpm安装地址:https://www.npmjs.com/package/compression\n\n```\nvar compression = require('compression'); // 压缩传输\napp.use(compression());\n```\n\n参考:\n1. [https://www.cnblogs.com/siqi/p/4003421.html](https://www.cnblogs.com/siqi/p/4003421.html)\n2. [https://blog.csdn.net/yutian9793/article/details/78824705](https://blog.csdn.net/yutian9793/article/details/78824705)"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值