PHPでテキストファイル(ログ)のダウンロードスクリプトを作っています。(共有サーバーで使います)


ログの圧縮にシステムコマンドを利用してtar cvzf $tmp_file $dir
という感じで$dirディレクトリに含まれるログを$tmp_fileという名称で圧縮します。

このときにログの改行コード(CR+LF)がLFに変わってしまうのですが、
システムコマンドを使う場合は避けようがないのでしょうか?

システムコマンドを使った場合でも、改行コードを変えない圧縮方法があれば教えて下さい。


ちなみに,PHPのgz*関数を使うとDLしたあとで解凍がうまく出来ません。
解凍ソフトは3種類ほど試しましたが全滅でした。(php4.3.9ですが)
またzip圧縮のライブラリなども使ったことはあり便利なのですが、
今回は外部ライブラリを使わない方針で、なるべくシンプルな方法を探しています。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/05/04 12:58:15
  • 終了:2007/05/04 19:37:56

回答(2件)

id:kurukuru-neko No.1

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/05/04 15:22:35

ポイント35pt

tarはデータを保管するだけなので

改行コードの変換を行いません。

アップロードされたファイルが$dirに格納された

データがそのような形式保存されている。

PHP gzで圧縮したファイルを

xxx.gzとした場合

gunzip xxx.gzで復元できます。

拡張子がgz以外の場合例えば xxx.tmp

の場合

gunzip -S .tmp xxx.tmp

http://jp2.php.net/manual/ja/ref.zlib.php

id:gekikawa

復元方法まで、ご回答ありがとうございます。

改行コードの変換はやはり行われないものなんですか。

↓コメント↓に書いたようにFTP経由ではCR+LF

http経由だとLFになってしまうんです。

いずれも.gz拡張子で、DLして+Lhaca1.2.0.0で解凍した結果です。

「Windowsでメモ帳を使ってもダウンロードしたログが見られるように」

という目標なんですが、困りました。

なんか変なことやっているんでしょうか?

unix環境の知識がほとんどないので困っています

2007/05/04 15:44:53
id:studioes No.2

studioes回答回数522ベストアンサー獲得回数612007/05/04 18:49:09

ポイント35pt

 たまにありますね・・・

 全部ファイルをアップしたつもりが、1個だけ更新できていなかったとかでエラーが出ることって。

 とにかく解決して何よりです。

id:gekikawa

なんともお恥ずかしい限りです。

予想外のことが起きると、スクリプトをドンドン書き換えてしまうので、更新漏れだったんですね。

今回はtarの勉強ができたということで収穫ありでした。

2007/05/04 19:37:10
  • id:studioes
    >このときにログの改行コード(CR+LF)がLFに変わってしまうのですが、
     逆じゃないの? もともとLFで保存しているのかと。 圧縮コマンドで勝手に内容書き換えられたら、バイナリとかゴミになる。
  • id:gekikawa
    あれ?慌てて確認したりして...
    ファイルに書き出すときに"\r\n"って付け足して書き込んでいるんですよ。

    生成されるログをFTPでDLすればCR+LF(FTPソフトは自動変換無し)
    のままなのですけどね。
  • id:kurukuru-neko
    >DLして+Lhaca1.2.0.0

    gz対応なので
    ftp等でバイナリー転送していますか?
  • id:gekikawa
    ftpはスクリプトのアップロードにのみ利用しています。
    このときはバイナリ転送です。

    作成されるデータのサイズをみていて、やっと理解できたんですが
    tarは圧縮はしていないんですね。(今頃...)
  • id:studioes
    >tarは圧縮はしていないんですね。(今頃...)
    zオプションがあればgzip圧縮します。 無ければ、複数のファイルを1ファイルにまとめるだけです(fオプションの場合)

    >FTP経由ではCR+LF
    >http経由だとLFになってしまうんです。
    >ftpはスクリプトのアップロードにのみ利用しています。
    矛盾しているようですが。
    ファイルのダウンロード時に、TYPE Aで転送すれば、ftpクライアントの自動変換が無くとも改行コードは変換されます。
  • id:gekikawa
    Zオプションですね。ありがとうございます。

    >矛盾しているようですが。
    「FTP経由ではCR+LF」というのはダウンロードされるデータファイル
    (tar済みのtarボール?拡張子は.gz)を試しにFTPでダウンロードして解凍してみたら...
    と言う意味です。言葉が足りませんでした。

    ファイルの転送時には、書き換えが起こらないように、常にバイナリにしているつもりなんですが...
  • id:gekikawa
    studioesさん
    kurukuru-nekoさん
    大変お騒がせしました。

    スクリプト一式サーバーから消して、再度アップロード
    しなおしたら、問題なくhttp経由でもCR+LFでログが得られるように
    なりました。

    原因がはっきりしない(FTPソフトの設定は変えていない)のですが、
    多分ログデータの作成部分が間違っていたのだと思います。

    お付き合いいただきありがとうございました。
    P.S.studioesさん
    回答欄にもご回答頂けますか?
    あとzオプションは入っていた様ですね(自分で書いていながらお恥ずかしい)
    ただ使えない場合もあるとか...
    圧縮対象のディレクトリのファイル合計<圧縮後のファイル
    というサイズになったので圧縮していないのかと思いました。
    (アルゴリズムや圧縮対象によってそうなり得るというのはわかるつもりですが)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません