Windowsで圧縮されたZipファイルをLinuxでPHPを使って展開するには?

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

同じタグの記事: Linux
同じタグの記事: PHP
同じタグの記事: Zip
同じタグの記事: ZipArchive
同じカテゴリの記事: Linux
関連書籍: PHP