Windowsで圧縮されたファイルをLinuxで展開するには、どうすれば良いでしょう。ファイル名が文字化けしてしまって、困ったことがありませんか? 展開後のファイルについて convmv コマンドで変換する方法もありますが、ちょっとしたPHPプログラムを用意して対応してみましょう。ということで、Windowsで圧縮されたZipファイルをLinuxでPHPを使って展開するには? | hiro345を書きましたが、オリジナルのZIPファイルに変更を加えなくても簡単に実装できる方法がありました。
copy関数を使うときに、zip://を使うというのがポイントです。
<?php
$archive_file = $argv[1];
$destination_path = getcwd();
$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);
if (strrpos($zipEntryName, "/")==(strlen($zipEntryName)-1)) {
mkdir($destination_path."/".$destName);
} else {
copy("zip://".$archive_file."#".$zipEntryName, $destination_path."/".$destName);
}
$index++;
}
$zip->close();
}
?>
使い方は下記のとおり。PHPのプログラムファイルはunzip2.php という名前で用意してあるとします。
$ php -f unzip2.php sample.zip