検索プログラマのメモ帳

壁にぶつかったら検索で調べるプログラマのちょっと遅れたメモ帳。たまに自分で挑戦する。

Skip to: Content | Sidebar | Footer

phpのZipArchiveでzipファイルを作成時に、改行コードの「CRLF」が「LF」に変換される問題の解決策

14 11月, 2013 (13:59) | PHP | By: admin

webサーバーのosがlinuxの場合は改行コードが「LF」で、Windowsでの改行コードが「CRLF」だったりすると、Windowsからアップロードしたファイルの改行コードが「LF」に変換される場合がある。

phpでZipArchiveを使って複数のファイルをまとめてzipファイルを作成する場合に、「CRLF」だったはずの改行コードが「LF」に変化されていました。テキストファイルが含まれていたので、改行コードは維持したかったので対策をとりました。

方法

$zip->addFromString(ファイル名、文字列)というファイル指定ではなく、文字列指定でzipファイルに投入することができるメソッドがあったので、それをテキストファイルの時にだけ使いました。画像ファイルでおかしなことになると大変なので、それ以外の場合は普通に、$zip->addFile(ファイル名、ファイルパス)というメソッドでファイルパスを指定して入れました。

$zip = new ZipArchive();
$zip->open($zipPath , ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);

//テキストファイルだったらファイルの中身を読み込んで、改行コードを「CRLF」にしてzipに文字列として入れる。

if (mb_strpos($tmp1, ‘txt’)) {
$data = file_get_contents($dl_files_url[$j]);
$data = str_replace(array(“\n”), “\r\n”, $data);
$zip->addFromString($dl_files_name[$j], $data);
}else{
$zip->addFile($dl_files_url[$j] , $dl_files_name[$j]);
}

Write a comment