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