如何用 PHP 压缩 JSON?

Posted

技术标签:

【中文标题】如何用 PHP 压缩 JSON?【英文标题】:How to compress JSON with PHP? 【发布时间】:2011-01-03 11:41:28 【问题描述】:

我正在编写一个小分析页面,它可以帮助我找出应用程序中的错误。本质上,它允许直观地比较实际数据和日志条目,并对数据进行一些分析。

由于这仅用于调试,并且我将在实时站点上部署它,因此我希望它具有尽可能少的服务器负载。一些分析选项将包括相当繁重的子字符串搜索或 n2 操作,因此我将把它卸载到客户端。

这意味着 php 页面只会从表和日志中获取数据,其中的一部分是 JSON,然后将其写出。然后客户端 javascript 将执行所有分析等。

问题在于 JSON 化的数据将有几 MB 大,而且我与服务器的连接速度很慢。以某种方式压缩数据会很好。有人有想法吗?

环境是PHP+Apache;我不知道是否会安装 mod_gzip;我无法控制它。

【问题讨论】:

【参考方案1】:

您可以使用PHP’s output control 压缩数据。只需将此调用放在脚本开头的任何输出之前:

ob_start('ob_gzhandler');

现在,如果客户端接受,任何输出都将使用 gzipdeflate 进行压缩。

【讨论】:

+1 -- 绝对是要走的路。但是请注意,PHP 必须配置 --with-zlib 才能使其工作us2.php.net/manual/en/zlib.installation.php 这确实使 JSON 字符串作为压缩数据传输,但在 1.00x 的压缩因子下,300kb json 数据的长度减少了 0 个字节,熵很小。我编写了一个小测试脚本,它只是将 Content-Type 标头设置为“application/json”,然后初始化输出缓冲区,然后使用 echo json_encode(...) 传输 json 数据。知道我做错了什么吗?【参考方案2】:

在 PHP 5.4 中现在是 JSON_UNESCAPED_UNICODE,因此您可以替换 char:

\u00f3 -> Ĺ› = Ś

当量:

 json_encode($data,JSON_UNESCAPED_UNICODE);

【讨论】:

【参考方案3】:

如果 apache 是您的选择(就像在原始问题中提到的那样),您可以在 .htaccess 中添加一些规则:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html
    # Add any mime-type you think is appropriate here
    AddOutputFilterByType DEFLATE application/json
</IfModule>

【讨论】:

以上是关于如何用 PHP 压缩 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP框架下如何用PHP自带的ZipArchive类打包压缩文件

问大佬php中如何用 foreach解析json

js获取到的值如何用ajax传到php中

如何用grunt压缩文件

如何用 smarty 生成 json?

如何用7 zip压缩和解压文件