Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

rar 1.0.0を試してみた

stable版がリリースされたので、試してみました。


PHP extension for reading Rar archives using bundled unRAR library.

PHPマニュアルに掲載されたサンプルにちょっと付け加えて、rar拡張モジュールで提供されているすべての関数・メソッドを一気に試すサンプルです。なお、test.rarには、以下の4ファイルが含まれています。

<?php
$fp = rar_open('test.rar') || die("アーカイブをオープンできません。");

$entries = rar_list($fp);

foreach ($entries as $entry) {
    echo 'ファイル名: ' . mb_convert_encoding($entry->getName(), mb_internal_encoding(), 'utf-8,sjis-win,eucjp-win') . "\n";
    echo '圧縮時のファイルサイズ  : ' . $entry->getPackedSize() . "\n";
    echo '展開後のファイルサイズ  : ' . $entry->getUnpackedSize() . "\n";
    echo 'ファイルのCRC           : ' . $entry->getCrc() . "\n";
    echo 'ファイルのタイムスタンプ: ' . $entry->getFileTime() . "\n";
    echo 'ファイルの属性          : ' . $entry->getAttr() . "\n";
    echo 'ファイルの圧縮方法      : ' . $entry->getMethod() . "\n";
    echo 'ファイルのホストOS      : ' . $entry->getHostOs() . "\n";
    echo "使用したRarのバージョン : " . $entry->getVersion() . "\n";

    $entry->extract('./extract/');
}

var_dump(rar_entry_get($fp, 'pr.htm'));
var_dump(rar_entry_get($fp, 'non_exist.html'));

rar_close($fp);

実行結果は次のような感じです。

$ php -v
PHP 5.2.5 (cli) (built: Feb 18 2008 19:23:28)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
    with Xdebug v2.0.2-dev, Copyright (c) 2002-2007, by Derick Rethans
    with eAccelerator v0.9.5.2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
$ ls
rar.php  test.rar
$ php rar.php
ファイル名: php_5_1_3-php_egg_logo.gif
圧縮時のファイルサイズ  : 3804
展開後のファイルサイズ  : 3810
ファイルのCRC           : f2fd6461
ファイルのタイムスタンプ: 2008-02-27 00:28:14
ファイルの属性          : 32
ファイルの圧縮方法      : 51
ファイルのホストOS      : 2
使用したRarのバージョン : 29
ファイル名: pukiwiki.css
圧縮時のファイルサイズ  : 1966
展開後のファイルサイズ  : 8742
ファイルのCRC           : 6c3ee619
ファイルのタイムスタンプ: 2008-02-08 20:17:12
ファイルの属性          : 32
ファイルの圧縮方法      : 51
ファイルのホストOS      : 2
使用したRarのバージョン : 29
ファイル名: pr.htm
圧縮時のファイルサイズ  : 3892
展開後のファイルサイズ  : 22136
ファイルのCRC           : 16c7b78d
ファイルのタイムスタンプ: 2008-01-28 00:56:06
ファイルの属性          : 32
ファイルの圧縮方法      : 51
ファイルのホストOS      : 2
使用したRarのバージョン : 29
ファイル名: tracのセットアップ.txt
圧縮時のファイルサイズ  : 5730
展開後のファイルサイズ  : 19922
ファイルのCRC           : 797e0b60
ファイルのタイムスタンプ: 2008-01-28 15:07:20
ファイルの属性          : 32
ファイルの圧縮方法      : 51
ファイルのホストOS      : 2
使用したRarのバージョン : 29
object(RarEntry)#5 (10) {
  ["rarfile"]=>
  resource(4) of type (Rar file)
  ["name"]=>
  string(6) "pr.htm"
  ["unpacked_size"]=>
  int(22136)
  ["packed_size"]=>
  int(3892)
  ["host_os"]=>
  int(2)
  ["file_time"]=>
  string(19) "2008-01-28 00:56:06"
  ["crc"]=>
  string(8) "16c7b78d"
  ["attr"]=>
  int(32)
  ["version"]=>
  int(29)
  ["method"]=>
  int(51)
}
NULL
$ ls extract/
php_5_1_3-php_egg_logo.gif  pr.htm  pukiwiki.css  tracのセットアップ.txt
$ 

まあ、今回試してみて分かった事が2つ。
1つ目は、最後のrar_entry_get関数でNULLが返ってきていますが、PHPマニュアルにはfalseが返されるとなっています。どっちが正しいんだ?
2つ目は、rarの作成って、ライセンスの都合で有償なんですね。。。道理で今までほとんど使わなかったわけだ。