如何在PHP的HTTP响应中发送压缩(ASCII)数据

时间:2009-11-06 15:55:56

标签: php encryption compression http-headers http-compression

我正在编写一个服务,将数据作为响应发送给客户端。

我正在发送文本(PLAIN ASCII)数据,但我想首先压缩数据(uzing任何标准压缩例程),然后使用header()函数将压缩数据发送回服务器。

我对PHP比较新,所以收集了数据后,我知道需要知道如何将HTTP响应中的(压缩)数据发送给用户

这是我到目前为止的伪代码:

<?php
   function createResponse($args)
   {
      if ( ($data = fetch_data($args)) !== NULL)
      {
         /* Assumption is that $data is a string consisting of comma separated
            values (for the columns) and each "row" is separated by a CRLF
            so $data looks like this:

            18-Oct-2009, 100.2, -10.5, 15.66, 34.2, 99.2, 88.2, 'c', 'it1', 1000342\r\n
            19-Oct-2009, -33.72, 47.5, 24.76, 8.2, 89.2, 88.2, 'c', 'it2', 304342\r\n

            etc ..
         */


         //1. OPTIONAL - need to encrypt $data here (how?)
         //2. Need to compress (encrypted?) $data here (how?)
         //3. Need to send HTTP Status 200 OK and mime/type (zip/compressed here)
         //4. Need to send data

      }
      else
      {
         //5. Need to send HTTP error code (say 404) here
      }
   }
?>

任何有经验的PHP编码员都可以告诉我上面的1-5使用哪些语句?

2 个答案:

答案 0 :(得分:0)

您可以使用ob_gzhandler对其进行压缩(因此您的浏览器会自行解压缩)或者您可以使用ZipArchive将数据存档并将其传输给用户,就像真正的.zip文件一样 - 您需要类似的东西:

// Headers for an download:
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="yourarchive.zip"');
header('Content-Transfer-Encoding: binary');
// load the file to send:
readfile('yourarchive.zip');

注意,必须在输出之前发送标题。

答案 1 :(得分:0)

Google快速启动此库以创建压缩数据流:http://pablotron.org/software/zipstream-php/

希望有所帮助。