Top > Blog > Programming

PHPで作成したZipファイルが開けない

という問題が発生しました。一部のソフトでしか解凍できないです。

感覚的には、圧縮前のファイルサイズが1MBを超えていると、圧縮ファイルが壊れるような感じ。。 Lhaplusだと警告付きで解凍できますが、Windows のエクスプローラで開けません。

ですがいろいろ試した結果、サイズは特に関係なく、これ、php.ini で zlib.output_compression=On に設定していると発生するエラーのようでした。(もしかして常識?)

PHP: header – Manualを参考に、ダウンロードさせるコードの直前に、

if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');

を記述すると、問題なく解凍できるようになりました。

CodeIgniterの場合は、system/libraries の Zip.php を継承して My_Zip.php を作り、download() メソッドあたりでこのコードを書いておけば良さそうです。

コメントの投稿