ログの圧縮にシステムコマンドを利用してtar cvzf $tmp_file $dir
という感じで$dirディレクトリに含まれるログを$tmp_fileという名称で圧縮します。
このときにログの改行コード(CR+LF)がLFに変わってしまうのですが、
システムコマンドを使う場合は避けようがないのでしょうか?
システムコマンドを使った場合でも、改行コードを変えない圧縮方法があれば教えて下さい。
ちなみに,PHPのgz*関数を使うとDLしたあとで解凍がうまく出来ません。
解凍ソフトは3種類ほど試しましたが全滅でした。(php4.3.9ですが)
またzip圧縮のライブラリなども使ったことはあり便利なのですが、
今回は外部ライブラリを使わない方針で、なるべくシンプルな方法を探しています。
よろしくお願いします。
tarはデータを保管するだけなので
改行コードの変換を行いません。
アップロードされたファイルが$dirに格納された
データがそのような形式保存されている。
PHP gzで圧縮したファイルを
xxx.gzとした場合
gunzip xxx.gzで復元できます。
拡張子がgz以外の場合例えば xxx.tmp
の場合
gunzip -S .tmp xxx.tmp
逆じゃないの? もともとLFで保存しているのかと。 圧縮コマンドで勝手に内容書き換えられたら、バイナリとかゴミになる。
ファイルに書き出すときに"\r\n"って付け足して書き込んでいるんですよ。
生成されるログをFTPでDLすればCR+LF(FTPソフトは自動変換無し)
のままなのですけどね。
gz対応なので
ftp等でバイナリー転送していますか?
このときはバイナリ転送です。
作成されるデータのサイズをみていて、やっと理解できたんですが
tarは圧縮はしていないんですね。(今頃...)
zオプションがあればgzip圧縮します。 無ければ、複数のファイルを1ファイルにまとめるだけです(fオプションの場合)
>FTP経由ではCR+LF
>http経由だとLFになってしまうんです。
>ftpはスクリプトのアップロードにのみ利用しています。
矛盾しているようですが。
ファイルのダウンロード時に、TYPE Aで転送すれば、ftpクライアントの自動変換が無くとも改行コードは変換されます。
>矛盾しているようですが。
「FTP経由ではCR+LF」というのはダウンロードされるデータファイル
(tar済みのtarボール?拡張子は.gz)を試しにFTPでダウンロードして解凍してみたら...
と言う意味です。言葉が足りませんでした。
ファイルの転送時には、書き換えが起こらないように、常にバイナリにしているつもりなんですが...
kurukuru-nekoさん
大変お騒がせしました。
スクリプト一式サーバーから消して、再度アップロード
しなおしたら、問題なくhttp経由でもCR+LFでログが得られるように
なりました。
原因がはっきりしない(FTPソフトの設定は変えていない)のですが、
多分ログデータの作成部分が間違っていたのだと思います。
お付き合いいただきありがとうございました。
P.S.studioesさん
回答欄にもご回答頂けますか?
あとzオプションは入っていた様ですね(自分で書いていながらお恥ずかしい)
ただ使えない場合もあるとか...
圧縮対象のディレクトリのファイル合計<圧縮後のファイル
というサイズになったので圧縮していないのかと思いました。
(アルゴリズムや圧縮対象によってそうなり得るというのはわかるつもりですが)