Windowsで圧縮されたファイルをLinuxで展開するには、どうすれば良いでしょう。ファイル名が文字化けしてしまって、困ったことがありませんか? 展開後のファイルについて convmv コマンドで変換する方法もありますが、ちょっとしたPHPプログラムを用意して対応してみましょう。Windowsで圧縮されたZipファイルをLinuxのPerlで展開するには? | hiro345にはPerl版があります。
Perlでできるなら、PHP5でもできるだろう、ということで調べてみました。Javaと同じような感じでファイル書き込みまで自分でコーディングする方法もありますが、面倒なのでオリジナルのZIPファイルに修正が入ってしまいますが、ZipArchiveのrenameNameを使って対応してみました。
<?php $archive_file = $argv[1]; $destination_path = "."; $encodeCharset="UTF-8"; $decodeCharset="CP932"; $zip = new ZipArchive; if ($zip->open("$archive_file") === TRUE) { $index = 0; while($zip->statIndex($index)) { $zipEntry = $zip->statIndex($index); $zipEntryName = $zipEntry['name']; $destName = mb_convert_encoding($zipEntry['name'], $encodeCharset, $decodeCharset); echo $zipEntryName . "\n"; echo $destName . "\n"; $zip->renameName($zipEntryName, $destName); $zip->extractTo($destination_path, $destName); $zip->renameName($destName, $zipEntryName); $index++; } $zip->close(); } ?>
使い方は下記のとおり。PHPのプログラムファイルはunzip.php という名前で用意してあるとします。
$ php -f unzip.php sample.zip
こちらの記事もどうぞ。Windowsで圧縮されたZipファイルをLinuxでPHPを使って展開するには? その2 | hiro345