csvファイルのzip圧縮について。
DBから抽出した値をcsvファイルに書き出し、zip圧縮を行う必要があります。
また、csvファイルはn件ごとに[test01.csv、test02.csv・・・]とファイルを分割する必要があります。
しかし、csvファイルに書き出す情報量が膨大な為、[csv出力→zip圧縮]と言う処理を行ってしまうと、
一時的ではありますが大きくハードディスク容量を消費してしまうことになります。
その為、一時的にcsvファイルを出力しzip圧縮するのではなく、zip圧縮されたファイルに直接csvファイルを出力する方法を教えていただきたいと考えています。
また、環境はPHP4.3系+MySQL4.1系ですが、今後PHP5へのバージョンアップも予定されている為、PHP4.3・5両方の環境で動作する必要があります。
現時点で見つけたキーワードとして、「圧縮ストリーム」と言うものを見つけましたが、いまいち理解ができておりません。
「$fp = fopen('zip://./foo.zip#bar.txt', 'r'); 」
と言うサンプルプログラムを見つけましたが、動作しませんでした。
イメージとしてはこのような形になります。
OS が Linux などの unix 系だとしたら、zip コマンドがあるはずです。
それに、パイプを使って流し込んであげれば良いのではないかしら。
<?php
$zip_file = ...; // 圧縮ファイル名
$cmd = "zip - - > " . $zip_file; // 実行するコマンド : "zip - - > hogehoge.zip" という感じ
$pp = popen($cmd, 'w'); // パイプを開いて
fwrite($pp, $csv_data); // CSV のデータを書き込む。ループして書きこんでも、大丈夫。
pclose($pp); // 最後にパイプを閉じる
?>
外部コマンドを使うときには、こんな注意点もあるみたいです。
http://jp.php.net/manual/ja/function.popen.php
注意: セーフモード が有効な場合、 safe_mode_exec_dirの中にある実行プログラムのみ実行可能です。実際的な理由により、現在、実行プログラムへのパスに ..を含めることはできません。