note 46068 rejected from ref.zlib by betz
| From: | betz@php.net | Date: | Tue, 28 Sep 2004 15:15:26 +0000 |
| Subject: | note 46068 rejected from ref.zlib by betz | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-77529@lists.php.net to get a copy of this message | ||
Note Submitter: sit1way at hotmail dot com
----
Hey all.
I've run into a problem using zlib compression & Apache's ForceType directive.
The problem:
Internet Explorer 6.0+ users are getting a download prompt, the d-loaded file contents being 5k of
compressed data which IE , for some reason, isn't able to interpret/decompress.
I'm running RedHat9 with PHP 4.3.8, Apache 2.0.51, MySql 4.0, & Zlib 1.1.4.
My httpd.conf has Forcetype directive set as follows:
<FilesMatch ^(view)>
ForceType application/x-httpd-php
</FilesMatch
This allows for urls in the format of domain.com/view/var1/var2/ to be evaluated as view.php, &
the vars accessed via script path_info.
My php.ini file has the following zlib settings:
zlib.output_compression = On
zlib.output_compression_level = 6
and my view controller script has the following to send gzip compressed content:
*************************************************
<?
session_start();
/* Start output buffering */
ob_start();
ob_implicit_flush(0);
/* get some content */
php code to get content here
/* Get buffered content */
$contents = ob_get_contents();
ob_end_clean();
/* If browser accepts compression, compress it */
if(ereg("gzip, deflate",$_SERVER['HTTP_ACCEPT_ENCODING'])) {
header("Content-Encoding: gzip");
echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
/* Figure out the size and CRC of the original for later */
$Size = strlen($contents);
$Crc = crc32($contents);
/* Compress the data */
$contents = gzcompress($contents, 9);
$contents = substr($contents, 0, strlen($contents) - 4);
echo $contents;
function gzip_PrintFourChars($Val) {
for ($i = 0; $i < 4; $i ++) {
echo chr($Val % 256);
$Val = floor($Val / 256);
}
}
/* Output the CRC, then the size of the original */
gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size);
}
else { echo $contents; }
*************************************************
In other browsers (e.g. Mozilla, Opera, etc.), the forcetype/zlib combo works flawlessly; however,
IE, still unfortunately the major player in browser market, is screwing up something, or I'm
doing something wrong on my end -- I just don't know what that might be!
If anyone has encountered this issue, please, please let me know. I don't want to drop zlib,
it's way to useful an extension to drop....
TIA,
--Noah