如何用 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');
现在,如果客户端接受,任何输出都将使用 gzip 或 deflate 进行压缩。
【讨论】:
+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?的主要内容,如果未能解决你的问题,请参考以下文章