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

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]);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です