ОБСУЖДЕНИЕ

скрипт не видит zip архив

5 сообщений1 просмотровОткрыта
#1
всем доброго дня!
решил поставит на своём зц просмотр архива.
создал zip.php с php кодом (код внизу)
проверил но результата нет, пишет "архив не найден"
надо указать ссылку таким образом:
site.ru/zip.php?arh=путь к zip архиву в base64 (пример не зашифрованной ссылки : /files/arhiv.zip
я так и сделал, но, пишет что архив не найден. (
я ссылку и таким образом поставил
http://site.ru/files/arhiv.zip
но и так не пашет.
подскажите пожалуйста, может я что то не правильно сделал?
буду благодарен



PHP
<?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'Ошибка открытия архива!'; 
} 
?>
#2
проверь при полном адресе на архив
#3
спасибо, понял. надо было только название скрипта и расширение зашифровать в base64 а папку нет )
#4
только вот один нюанс, скрипт открывает архив но выдаёт ошибку:
Warning: preg_match(): Unknown modifier '$' in/storage/emulated/0/htdocs/zip.php on line 42

#42 строка
CODE
if(preg_match('//$/',$t['name'])) 
#5
сделал вот так и ошибка пропала.. надеюсь правильно сделал? :-D
CODE

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