人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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'); 」
と言うサンプルプログラムを見つけましたが、動作しませんでした。
イメージとしてはこのような形になります。


●質問者: Neroemf
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3

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の中にある実行プログラムのみ実行可能です。実際的な理由により、現在、実行プログラムへのパスに ..を含めることはできません。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ