Файл: loads/zip.php
Строк: 161
<?php
require '../system/sid.php';
require '../system/config.php';
include '../system/user.php';
include '../system/head.php';
include '../system/navigator.php';
include 'pclzip.lib.php';
whorm(0, 'loads');
$onpage = 10;
$id = my_int($_GET['id']);
$page = my_int($_GET['page']);
$start = my_int($_GET['start']);
$action = (isset($_GET['action']) && $_GET['action'] == 'preview') ? my_check($_GET['action']) : NULL;
$d = mysql_fetch_assoc(mysql_query('SELECT * FROM `loads_f` WHERE `id` = ' . $id));
if (!file_exists($d['url']))
{
err('Файл не найден!');
include '../system/foot.php';
exit();
}
if ($user['level'] < 5 && $d['activity'] > $user['activity'])
{
err('Для просмотра содержимого файла нехватает активности!');
include '../system/foot.php';
exit();
}
###############Получаем каталог#############
$filename = pathinfo($d['url']);
$ext = strtolower($filename['extension']);
if ($ext != 'zip') die('Файл не является ZIP архивом');
$dir = $filename['dirname'] . '/';
$back = mysql_fetch_assoc(mysql_query("SELECT * FROM `loads_f` WHERE `url` = '$dir'"));
###############Заголовок###################
#echo 'Просмотр архива ' . basename($d['url']) . '<br/>';
###############Содержимое###################
if (!$action)
{
$zip = new PclZip($d['url']);
if (!$list = $zip->listContent()) die('Ошибка: '.$zip->errorInfo(true));
for($i = 0; $i < sizeof($list); ++$i)
{
for(reset($list[$i]); $key = key($list[$i]); next($list[$i]))
{
$zfilesize = strstr($listcontent, '--size');
$zfilesize = str_replace('--size:', '', $zfilesize);
$zfilesize = str_replace($zfilesize, $zfilesize . '|', $zfilesize);
$sizelist .= $zfilesize;
$listcontent = "[$i]--$key:" . $list[$i][$key];
$zfile = strstr($listcontent, '--filename');
$zfile = str_replace('--filename:', '', $zfile);
$zfile = str_replace($zfile, $zfile . '|', $zfile);
$savelist .= $zfile;
}
}
$sizefiles2 = explode('|', $sizelist);
$sizelist2 = array_sum($sizefiles2);
$obkb = round($sizelist2 / 1024, 2);
$preview = $savelist;
$preview = explode('|', $preview);
$count = count($preview) - 1;
echo 'Всего файлов: ' . $count . '<br/>Вес распакованного архива: ' . $obkb . ' kb<br/>';
if (!isset($page)) $page = 1;
$n = 0;
$pages = ceil($count / $onpage);
if (!$pages) $pages = 1;
if ($page) $n = ($onpage * $page) - $onpage;
if ($count == 0) echo 'Пусто...';
$sizefiles = explode('|', $sizelist);
$selectfile = explode('|', $savelist);
//------------------------------------------------------------------------------------------
for ($i = 1; $i <= $onpage; ++$i)
{
if (empty($selectfile[$n]))
{
$n++;
continue;
}
$path = $selectfile[$n];
$fname = preg_replace('/.*[/]/', '', $path);
#$zdir = preg_replace('/[/]?[^/]*$/', '', $path);
if ($user['level'] == 5) $dl = '<a href="zip.php?id='.$id.'&x='.$fname.'">[X]</a> ';
echo $dl . '<a href="zip.php?action=preview&id='.$id.'&open='.$path.'">' . $fname . '</a>';
if ($sizefiles[$n] != 0) echo ' [' . round($sizefiles[$n] / 1024, 2) . 'kb]';
echo '<br/>';
$n++;
}
if (isset($_GET['x']))
{
if ($user['level'] != 5)
{
header('location: unzip-' . $id);
die();
}
$zip = new ZipArchive;
if ($zip->open($d['url']) === TRUE)
{
$zip->deleteName($_GET['x']);
$zip->close();
}
header('location: unzip-' . $id);
}
//------------------------------------------------------------------------------------------
echo '<br/>Страницы: ';
$asd = $page - 2;
$asd2 = $page + 3;
if ($asd < $count && $asd > 0 && $page > 3) echo '<a href="zip.php?id='.$id.'&page=1">1</a> ... ';
for($i = $asd; $i < $asd2; $i++)
{
if ($i < $count && $i > 0)
{
if ($i > $pages) break;
if ($page == $i) echo '<b>[' . $i . ']</b> ';
else echo '<a href="zip.php?id='.$id.'&page='.$i.'">' . $i . '</a> ';
}
}
if ($i <= $pages)
{
if ($asd2 < $count) echo ' ... <a href="zip.php?id='.$id.'&page='.$pages.'">' . $pages . '</a>';
}
echo '<br/>';
}
###############Просмотр файла###################
if ($action == 'preview')
{
$open = check($_GET['open']);
if (strpos($open , '..') !== false or strpos($open , './') !== false)
{
err('В хакера решил поиграть?');
include '../system/foot.php';
exit();
}
$zip = new PclZip($d['url']);
$content = $zip->extract(PCLZIP_OPT_BY_NAME, $open, PCLZIP_OPT_EXTRACT_AS_STRING);
$content = $content[0]['content'];
$preview2 = explode("n", $content);
$count = count($preview2);
echo '<b>Файл: ' . $open . '</b><br/>';
$eX = strtolower(strrchr($open, '.'));
$php = array('.php', '.pl', '.js', '.jsp', '.html', '.xhtml', '.xml', '.wml', '.asp', '.aspx');
$txt = array('.txt', '.sql', '.dat', '.css', '.ini', '.function', '.htaccess', '.tpl');
$img = array('.gif', '.jpg', '.jpeg', '.png', '.bmp', '.wbmp', '.ico', '.swf');
if (empty($content)) echo 'Файл пуст.<br/>';
if (isset($_GET['img']))
{
$ext = strtolower(substr($open, strrpos($open, '.') + 1));
ob_end_clean();
ob_clean();
header("Content-type: image/$ext");
header("Content-Length: " . strlen($content));
header('Content-Disposition: inline; filename="' . $open . '"');
echo $content;
exit();
}
if (in_array($eX, $php))
{
echo (!empty($content) ? 'Строк: ' . $count . '<br/>' : '');
if (is_utf($content)) echo highlight($content);
else echo highlight(win_to_utf($content));
}
elseif (in_array($eX, $txt))
{
$content = htmlspecialchars($content);
echo (!empty($content) ? 'Строк: ' . $count . '<br/>' : '');
if (is_utf($content)) echo '<div style="background:#dedede; color:#727272; overflow: auto;"><code>' . wordwrap($content, 75, '<br/>') . '</code></div>';
else echo '<div style="background:#dedede; color:#727272; overflow: auto;"><code>' . win_to_utf(wordwrap($content, 75, '<br/>')) . '</code></div>';
}
elseif (in_array($eX, $img))
{
echo '<img src="?action=preview&id='.$id.'&open='.$open.'&img" alt=""/><br/>';
}
else
{
echo 'Невозможно прочесть файл!<br/>';
}
}
echo '<br/>« <a href="info-'.$id.'">К файлу</a>';
if (isset($_GET['action'])) echo '<br/>« <a href="unzip-'.$id.'">К просмотру архива</a>';
include '../system/foot.php';
?>