File size: 2.67Kb
<?php
$title='Просмотр архива';
require"../system/config.php";
require"../system/func.php";
require"../system/head.php";
require"../system/error.php";
$pad=prov(base64_decode($_GET['arh'])); $path=pathinfo($pad);
if(!preg_match("/..\/down\/(.*?)\//i",$pad)){header("Location: index.php"); exit;}
echo'<div class="i" align="center">'.$title.' '.$path['basename'].'</div><br>';
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&arh='.$_GET['arh'].'&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&arh='.$_GET['arh'].'&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'Ошибка открытия архива!';
} require"../system/foot.php";
?>