1

Openshift で gzip 圧縮を無効にするにはどうすればよいですか (特定の要求に対して)? より具体的には、php-ie によって提供されるファイルのダウンロードの場合ですfpassthrough

私はいくつかのことを試しました:

  • ini_set('zlib.output_compression', 'Off');phpファイルで
  • apache_setenv('no-gzip', '1');そしてapache_setenv('dont-vary', '1');phpファイルで
  • SetEnv no-gzip dont-vary.htaccess ファイル内

まだ簡単なテスト経由で次のcurl -v -H 'Accept-Encoding: gzip,deflate' http://downloadtest-***.rhcloud.comことが得られます。

> GET http://downloadtest-***.rhcloud.com/ HTTP/1.1
> User-Agent: curl/7.41.0
> Host: downloadtest-***.rhcloud.com
> Accept: */*
> Proxy-Connection: Keep-Alive
> Accept-Encoding: gzip,deflate
>
< HTTP/1.1 200 OK
< Date: Fri, 22 May 2015 12:47:41 GMT
< Server: Apache/2.2.15 (Red Hat)
< Content-Disposition: attachment; filename="myfile.tmp"
< Content-Lenght: 54
< Content-Type: application/octet-stream
< Vary: Accept-Encoding
< Content-Length: 77
< Proxy-Connection: Keep-Alive
< Connection: Keep-Alive
< Content-Encoding: gzip

背景:既にgzipされたファイルが破損するため、gzip 圧縮を無効にする必要があります。 .info/david/computers/corrupted-zip-file-downloads-with-php .


完全なテスト コード:

index.php:

$file = __DIR__ . '/test.txt.gz'; //This file is acutally 54 bytes

ini_set('zlib.output_compression', 'Off');

apache_setenv('no-gzip', '1');
apache_setenv('dont-vary', '1');

header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="myfile.tmp"');
header('Content-Lenght: '.filesize($file));

if(!file_exists($file)) {
    echo "file does not exist!\n";
    exit(0);
}
$handle = fopen($file, 'rb');
fpassthru($handle);
fclose($handle);
exit(0);

.htaccess:

RewriteEngine On
SetEnv no-gzip dont-vary
4

1 に答える 1

2

圧縮はOpenShift プロキシによって実行されるため、サーバーの構成は影響しません。圧縮を無効にする方法が見つかりませんでした。たとえば、Cache-Control: no-transform応答ヘッダーを使用しようとしましたが、機能しませんでした

于 2015-06-26T18:43:30.497 に答える