Файл: zip.php
Строк: 132
<?php
session_start();
if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != null)
$_SESSION['back'] = str_replace('&', '&', ereg_replace('^http://[^/]*/', '/', $_SERVER['HTTP_REFERER']));
list($msec, $sec) = explode(chr(32), microtime());
$HeadTime = $sec + $msec;
include 'inc/db_connect.php';
include 'inc/function.php';
include 'inc/set.php';
include 'inc/head.php';
require 'inc/pclzip.lib.php';
$page = valid_int($_GET['page']);
$start = valid_int($_GET['start']);
$onpage = $step;
if (isset($_GET['id']) && isset($_GET['c']))
{
$id = valid_int($_GET['id']);
$table = clean($_GET['c']);
} else
{
header("location: index.php?error=invalid_id");
exit();
}
###############Если zip выключен##########
//if($setup['zip_change']==0) {header("location: index.php?error=invalid_id");
// exit();}
$file_info = mysql_fetch_array(mysql_query('SELECT * FROM `' . $table . '` WHERE `id` = ' . $id . ' LIMIT 1'));
if (!file_exists($file_info['s_name']))
{
} elseif ($file_info['f_ras'] !== 'zip')
{
header("location: index.php?error=file_not_found");
exit();
}
###############Получаем данные о файле#############
$file = pathinfo($file_info['s_name']);
$file_name = $file['basename']; // реальное имя
$file_size = size_file($file_info['size']); // красивый размер
$name = str_replace('*', '', $file_info['r_name']); // Имя файла в базе
$f_ras = $file_info['f_ras']; // расширение файла в базе
###############Заголовок###################
echo '<div><img src="ext/zip.gif" alt=""><strong>Просмотр архива ' . $file_name . '</strong></div><div class="a">';
###############Содержимое###################
if (!$_GET['action'])
{
$zip = new PclZip($file_info['s_name']);
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</div><div class="a">';
if (!isset($page))
$page = 1;
$n = 0;
$pages = ceil($count / $step);
if (!$pages)
$pages = 1;
if ($page)
$n = ($step * $page) - $step;
if ($count == 0)
echo 'Пока пусто :(';
$sizefiles = explode('|', $sizelist);
$selectfile = explode('|', $savelist);
//------------------------------------------------------------------------------------------
for ($i = 1; $i <= $step; $i++)
{
if (empty($selectfile[$n]))
{
$n++;
continue;
}
$path = $selectfile[$n];
$fname = ereg_replace(".*[\/]", '', $path);
$zdir = ereg_replace("[\/]?[^\/]*$", '', $path);
echo $zdir . '/<a href="' . $_SERVER['PHP_SELF'] . '?action=preview&c=' . $table . '&id=' . $id . '&open=' . $path . '">' . $fname . '</a>';
if ($sizefiles[$n] != '0')
echo ' [' . round($sizefiles[$n] / 1024, 2) . 'kb]';
echo '<br>';
$n++;
}
//------------------------------------------------------------------------------------------
echo '</div><div class="a">Страницы: ';
$asd = $page - 2;
$asd2 = $page + 3;
if ($asd < $count && $asd > 0 && $page > 3)
echo '<a href="zip.php?c=' . $table . '&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 '<strong>[' . $i . ']</strong> ';
else
echo '<a href="zip.php?c=' . $table . '&id=' . $id . '&page=' . $i . '">' . $i . '</a> ';
}
}
if ($i <= $pages)
{
if ($asd2 < $count)
echo ' ... <a href="zip.php?c=' . $table . '&id=' . $id . '&page=' . $pages . '">' . $pages . '</a>';
}
echo '<br>';
}
###############Просмотр файла###################
if ($_GET['action'] == 'preview')
{
if (strpos($_GET['open'], '..') !== false or strpos($_GET['open'], './') !== false)
die('Произошла ошибка');
$_GET['open'] = clean(del($_GET['open']));
$zip = new PclZip($file_info['s_name']);
$content = $zip->extract(PCLZIP_OPT_BY_NAME, $_GET['open'], PCLZIP_OPT_EXTRACT_AS_STRING);
$content = $content[0]['content'];
$letters = array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я');
for ($b = 0; $b < 66; $b++)
{
if (strstr($content, $letters[$b]) !== false)
{
$utf = 'ok';
}
}
$preview2 = explode("rn", $content);
$count = count($preview2);
function highlight_code($code)
{
$code = trim($code);
return highlight_string($code, true);
}
echo '<strong>Файл: ' . $_GET['open'] . '</strong><br>Строк: ' . $count . '</div><div class="a">';
if ($utf == 'ok')
echo highlight_code($content);
else
echo highlight_code(iconv('windows-1251', 'utf-8', $content));
echo '</div>';
}
include 'inc/foot.php';
?>