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

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
同じタグの記事: CentOS
同じタグの記事: Linux
同じタグの記事: PHP
同じタグの記事: ZipArchive
同じカテゴリの記事: Linux
関連書籍: CentOS
関連書籍: PHP