Просмотр файла downs/zip.php

Размер файла: 2.67Kb
  1. <?php
  2.  
  3. $title='Просмотр архива';
  4. require"../system/config.php";
  5. require"../system/func.php";
  6. require"../system/head.php";
  7. require"../system/error.php";
  8. $pad=prov(base64_decode($_GET['arh'])); $path=pathinfo($pad);
  9.  
  10. if(!preg_match("/..\/down\/(.*?)\//i",$pad)){header("Location: index.php"); exit;}
  11.  
  12. echo'<div class="i" align="center">'.$title.' '.$path['basename'].'</div><br>';
  13.  
  14. function sizer($s)
  15. {
  16. $o=1;
  17. while($s>1024){
  18. $s=round($s/1024,1);
  19. $o++;
  20. }
  21. switch($o){
  22. case(1):
  23. $o='b';
  24. break;
  25.  
  26. case(2):
  27. $o='Kb';
  28. break;
  29. case(3):
  30. $o='Mb';
  31. break;
  32. case(4):
  33. $o='Gb';
  34. break;
  35. }
  36. return $s.$o;
  37. }
  38.  
  39.  
  40. if(!empty($_GET['arh']))
  41. $arh = base64_decode($_GET['arh']);
  42. if(!is_file($arh))
  43. die('Файла не существует!');
  44. if(!empty($_GET['act']))
  45. $act = $_GET['act'];
  46. else
  47. $act = 'main';
  48. $zip = new ZipArchive ();
  49. if($zip-> open ($arh) === TRUE){
  50. switch($act){
  51. case('main'):
  52. echo'Обьектов: '.$zip->numFiles.'<br/>';
  53. if($zip->comment != NULL)
  54. echo'Комментарий: '.$zip->comment.'<br/>';
  55. for ($i = 0; $i < $zip->numFiles; $i++) {
  56. $t = $zip-> statIndex($i);
  57. if(preg_match('/\/$/',$t['name']))
  58. echo 'Каталог <strong>'.$t['name'].'</strong>';
  59. else
  60. echo '<a href="zip.php?act=pre&arh='.$_GET['arh'].'&index='.$t['index'].'">'.$t['name'].'</a> ['.sizer($t['size']).'/'.sizer($t['comp_size']).']';
  61. echo'<br/>';
  62. }
  63.  
  64. break;
  65. case('pre'):
  66. if($info = $zip->statIndex(abs((int)$_GET['index']))){
  67. echo'Файл '.$info['name'].'<br/>
  68. <a href="zip.php?act=down&arh='.$_GET['arh'].'&index='.$info['index'].'">Скачать файл</a>
  69. <br/>
  70. Вес запакованого файла '.sizer($info['comp_size']).' ('.$info['comp_size'].' b)<br/>
  71. Вес распакованого файла: '.sizer($info['size']).' ('.$info['size'].' b)<br/>
  72. Метод сжатия: '.$info['comp_method'].'<br/>';
  73. $highlight=array('php','html','htm');
  74. $astext=array('txt','css','ini','htaccess');
  75. $type=substr($info['name'],strrpos($info['name'],'.')+1);
  76. if(in_array($type, $highlight)){
  77. highlight_string($zip->getFromIndex($info['index']));
  78. }elseif(in_array($type, $astext)){
  79. echo nl2br(htmlspecialchars($zip->getFromIndex($info['index'])));
  80. }
  81. }else{
  82. echo 'Ошибка извлечения файла!';
  83. }
  84. break;
  85. case('down'):
  86. $index = abs((int)$_GET['index']);
  87. if($name = $zip->getNameIndex($index)){
  88. header('Content-Type: application/octet-stream', true);
  89. header('Content-Disposition: attachment; filename="'.urlencode(basename($name)).'";');
  90. echo $zip->getFromIndex($index);
  91. }else{
  92. echo 'Ошибка извлечения файла!';
  93. }
  94. break;
  95. default:
  96. echo'Не известное действие';
  97. break;
  98. }
  99. $zip->close();
  100. }else{
  101. echo'Ошибка открытия архива!';
  102. } require"../system/foot.php";
  103. ?>