Help us understand the problem. What is going on with this article?

gzipファイルをphpでロードしてそのまま公開

More than 3 years have passed since last update.

生のtextを毎度圧縮するには忍びない場合に便利

今回はログファイルをgzに圧縮して貯めこんでるシステムを想定し、セキュアな環境でそのgzファイルを外からみたいなという状況を想定。

http://192.168.1.101/zcat.php?name=201606にアクセスすると/var/log/201606.log.gzが表示される感じを想定

コード

zcat.php
if(!isset($_GET['name']) || !is_file($_GET['name'])){
  header('HTTP/1.0 400 Bad Request');
  exit;
}
header('Content-Encoding: gzip');
readfile('/var/log/' . $_GET['name'] . '.log.gz');

危ないデータが入らない想定。不特定多数がアップロードしたファイルの展開表示は駄目。絶対。

トラブルシューティング

  • logファイルにapacheが参照できるよう権限設定が必要。
  • gzipをデコード出来ないブラウザ(ガラケーとか)は正しく表示できない。(諦めて)

仕組み

特に難しい仕組みでなく大半のブラウザはgzipで圧縮されたデータが読めるということで特に変換などせずに、
生のgzipファイルを適切なヘッダを付けて直接送ればブラウザは正しく読んでくれると言うだけである。

通信圧縮、キャッシング技術の世界は奥が深い

予め用意したgzをロードするというアプローチは使えそうだが商用環境だと余り出番は無い。
大半のデータはDBに格納されているし、キャッシングであれば強力なモジュールが幾つもあるからだ。
奥が深い領域には触れないが単にgzipで通信を圧縮するだけならApacheのmod_deflateというモジュールが有り、都度でかいテキストを配信するならこちらのモジュールを使用するのが適切だろう。

onomame
C#を使うのはVisual Studioがあるから Javaを使うのはVisual Studioを使う必要が無いから PHPを使うのはコンパイル環境がなくていいから Perl/Rubyを使わないのは良さを知らないから Pythonを使うのはAWSでサーバーレスで動くから
http://materialbook.futh.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした