Просмотр RAR-архивов

// вспомогательная функция, выводит размер файла
function sizer($s){
$o=1;
while($s>1024){
   $s = round($s / 1024, 1);
   $o++;
   }
switch($o){
   case(1):
    $o='b'; break;
   case(2):
        $o='Kb';break;
   case(3):
        $o='Mb';break;
   case(4):
        $o='Gb';break;
   }
return $s.$o;
}

$filepath = 'test.rar';

$rar = rar_open($filepath) or die('Ошибка открытия RAR архива');
$list = rar_list($rar);
$c = count($list);
echo 'Файлов в архиве: '.$c.'<hr/>';

for($i = 0; $i<$c; $i++) {
   echo $list[$i]->name.
    ' ['.sizer($list[$i]->unpacked_size).
    '/'.sizer($list[$i]->packed_size).']<br/>';
}
rar_close($rar);

Распаковка RAR архива

function unpack($f){
$rar_file = rar_open($f);
$path1= fb_tmpdir . 'tmp_'.basename($f); if(!is_dir($path1))mkdir($path1); // создаю временный каталог
$list = rar_list($rar_file);
$f2='';
foreach($list as $f1){
    if(in_array(substr($f1, -4),array('.csv','.xls'))) {
        $entry = rar_entry_get($rar_file, $f1);
    // $entry = $rar_file->getEntry('file2.txt');
        // $entry->extract($path1); // extract to the current dir
        $f2=fb_tmpdir.$f1; @unlink($f2);
        $entry->extract(false,$f2);
    }
}
rar_close($rar_file);
rmdir($path1); // удаляю временный каталог
if(is_file($f2)){
    unlink($f); // удаляю исходный архив
    return $f2;
}
return false
}

.