Листинг ZIP-архивов

<?php

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;

}

 

 

if(!empty($_GET['arh']))

$arh = base64_decode($_GET['arh']);

if(!is_file($arh))

die('Файла не существует!');

if(!empty($_GET['act']))

$act = $_GET['act'];

else

$act = 'main';

$zip = new ZipArchive ();

if($zip-> open ($arh) === TRUE){

switch($act){

case('main'):

echo'Обьектов: '.$zip->numFiles.'<br/>';

if($zip->comment != NULL)

echo'Комментарий: '.$zip->comment.'<br/>';

for ($i = 0; $i < $zip->numFiles; $i++) {

$t = $zip-> statIndex($i);

if(preg_match('/\/$/',$t['name']))

echo 'Каталог <strong>'.$t['name'].'</strong>';

else

echo '<a href="zip.php?act=pre&amp;arh='.$_GET['arh'].'&amp;index='.$t['index'].'">'.$t['name'].'</a> ['.sizer($t['size']).'/'.sizer($t['comp_size']).']';

echo'<br/>';

}

break;

case('pre'):

if($info = $zip->statIndex(abs((int)$_GET['index']))){

echo'Файл '.$info['name'].'<br/>

<a href="zip.php?act=down&amp;arh='.$_GET['arh'].'&amp;index='.$info['index'].'">Скачать файл</a>

<br/>

Вес запакованого файла '.sizer($info['comp_size']).' ('.$info['comp_size'].' b)<br/>

Вес распакованого файла: '.sizer($info['size']).' ('.$info['size'].' b)<br/>

Метод сжатия: '.$info['comp_method'].'<br/>';

$highlight=array('php','html','htm');

$astext=array('txt','css','ini','htaccess');

$type=substr($info['name'],strrpos($info['name'],'.')+1);

if(in_array($type, $highlight)){

highlight_string($zip->getFromIndex($info['index']));

}elseif(in_array($type, $astext)){

echo nl2br(htmlspecialchars($zip->getFromIndex($info['index'])));

}

}else{

echo 'Ошибка извлечения файла!';

}

break;

case('down'):

$index = abs((int)$_GET['index']);

if($name = $zip->getNameIndex($index)){

header('Content-Type: application/octet-stream', true);

header('Content-Disposition: attachment; filename="'.urlencode(basename($name)).'";');

echo $zip->getFromIndex($index);

}else{

echo 'Ошибка извлечения файла!';

}

break;

default:

echo'Не известное действие';

break;

}

$zip->close();

}else{

echo'Ошибка открытия архива!';

}

?>

Описание:
Простой листинг zip-архивов без постраничной навигации. Создайте файл zip.php и туда скопируйте код. zip.php?arh=путь_в_base64
Для тех кто не знает как зашифровать путь - функция base64_encode()

»Скачать в формате .ТХТ
»Скачать в формате .ZIP
»На главную
© allPHP.pp.ru