1

サーバー上の .csv ファイルを圧縮し、PHP を使用して .gz (gzip) ファイルに入れたいと考えています。

以下のように `file_put_contents() を使用しました。

$input = "test.csv";
$output = $input.".gz";

file_put_contents("compress.zlib://$output", file_get_contents($input));

しかし、(winrar / 7zip を使用して) gzip ファイルを開くと、.gz アーカイブにファイル拡張子がありません。それは単なる「テスト」(ファイル拡張子なし)ですか?

test.csv」が表示されていません。修正方法は?

4

5 に答える 5

1

その圧縮ファイル内の「ファイル名」に関する情報はありません。入力ファイルの生のバイナリデータを圧縮し、それを出力ファイルにダンプしているだけです。.gzファイルには、その中に含まれているファイルの数やその名前に関するメタ情報はありません。そのようなメタ情報を提供するために、TARファイル形式はそのためのものです。tarballを作成してから、gzを使用して.tar.gzに圧縮する必要があります。

を介してシェルコマンドを実行する以外に、PHPを使用してこれを行う方法がわかりませんexec。ネイティブPHPをサポートする代替手段としてZIP
を検討することをお勧めします。

于 2012-07-17T11:30:49.617 に答える
1

あなたの例は少なくともPHP 5.3.10で正しく動作します:

-rw-rw-r-- 1 mats mats  8 Jul 17 13:05 test.csv
-rw-rw-r-- 1 mats mats 31 Jul 17 13:05 test.csv.gz

エクスプローラー/ナビゲーターで既知のファイルの種類のファイル拡張子を隠していませんか?

于 2012-07-17T11:06:30.113 に答える
1

これを試してみましょう。

$input = "test.txt";
exec("gzip ".$input);

Linuxサーバーで動作します...

于 2012-07-17T10:58:50.157 に答える
1

あなたが何を求めているのか正確にはわかりませんが、PHPにはすでに gzip 圧縮用の関数gzencodeがあります。

このように使用してください

<?php
    $data = implode("", file("bigfile.txt"));
    $gzdata = gzencode($data, 9);
    $fp = fopen("bigfile.txt.gz", "w");
    fwrite($fp, $gzdata);
    fclose($fp);
?>
于 2012-07-17T10:59:42.433 に答える