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