<?php
error_reporting(0);
$k=trim($_GET['k']); include("key.php");
$d=rawurldecode(trim($_GET['d'])); $n=rawurldecode(trim($_GET['n']));
if ($d==NULL) {$d="";} else {if ($d=="/") {$d="";}}
if ($n==NULL) {$n=preg_replace("~.*/([^/]*)~m","\\1",$d);
$d=preg_replace("~(.*)/[^/]*~m","\\1",$d);}
$rd=rawurlencode($d); $rn=rawurlencode($n);
$d=str_replace(".|htaccess",".htaccess",$d);
$n=str_replace(".|htaccess",".htaccess",$n);
$ac=trim($_GET['ac']); $nm=trim($_POST['nm']);
$chd=trim($_POST['chd']); $chf=trim($_POST['chf']);
if ($nm<>NULL) {
 $repl=array("\\"=>"","/"=>"",":"=>"","*"=>"","?"=>"","\""=>"","<"=>"",">"=>"","|"=>"");
 $nm=trim(strtr($nm,$repl));
 include("repl.php"); $nm=u2t($nm);
 if (($nm==".")||($nm=="..")) {$nm=".";}
}

include "includes/header.php";


if ($nm<>NULL) {
 if (($ftp=@ftp_connect($sr))&&(@ftp_login($ftp,$lg,$ps))) {
  @ftp_pasv($ftp,true); $sz=ftp_size($ftp,"$d/$n");
  if (($sz==-1)||($sz>716800)) {header("Location: $dftp/ftp.php?k=$k&d=$rd"); exit;}
  mkdir("data/$k",0777); ftp_get($ftp,"data/$k.zip","$d/$n",FTP_BINARY);
  include_once('pclzip.php'); $zip=new PclZip("data/$k.zip");
  if ($zip->extract(PCLZIP_OPT_PATH,"data/$k")==0) {
   $st="Файлы из архива не извлечены. Возможно архив повреждён.";
  } else {$st="";
   if ($nm<>".") {ftp_mkdir($ftp,"$d/$nm"); $nm="/$nm/";} else {$nm="/";}
   function scan($dir) {$arr=NULL; $lst=NULL;
    $dh=opendir($dir); while (false!==($filename=readdir($dh))) {$lst[]=$filename;}
    if ($lst<>NULL) {
     for ($i=0;$i<count($lst);$i++) {
      if (is_file($dir."/".$lst[$i])) {
       $arr.="1:".$dir."/".$lst[$i]."\r\n";
      } elseif ((is_dir($dir."/".$lst[$i]))&&($lst[$i]<>".")&&($lst[$i]<>"..")) {
       $arr.="0:".$dir."/".$lst[$i]."\r\n"; $arr.=scan($dir."/".$lst[$i]);
      }
     } return $arr;
    } else {return false;}
   }
   $str=scan("data/$k");
   if ($str==false) {
    $st="Файлы из архива не извлечены.";
   } else {
    $ar=explode("\r\n",$str); sort($ar);
    for ($i=0;$i<count($ar);$i++) {
     if ($ar[$i]<>NULL) {
      list($p1,$p2)=split(":",$ar[$i]); $p1=trim($p1); $p2=trim($p2);
      if ($p1==0) {
       $name=str_replace("data/$k/","",$p2);
       ftp_mkdir($ftp,"$d$nm".$name);
       if ($chd<>NULL) {$cmd="chmod 0$chd $d$nm".$name; @ftp_site($ftp,$cmd);}
      } else {
       $name=str_replace("data/$k/","",$p2);
       ftp_put($ftp,"$d$nm".$name,"data/$k/".$name,FTP_BINARY);
       if ($chf<>NULL) {$cmd="chmod 0$chf $d$nm".$name; @ftp_site($ftp,$cmd);}
      }
     }
    }
   }
  }
  @ftp_close($ftp);
  unlink("data/$k.zip"); include("rmdir.php"); rdir("data/$k");
  if ($st==NULL) {$st.="Файлы извлечены из архива.";}
 
echo '
<div class="box_2">
Путь: <b><a href="ftp.php?k='.$k.'&amp;d='.$rd.'">'.$d.'</a></b><br/>
</div>
<div class="box_1">
'.$st.'
</div>';  

 } else {
echo '<div class="box_1">
Нет соединения с сервером</div>
<div class="title_page"><a href="index.php">Главная</a></div>';
 }
} else {
$d=str_replace('$','$$',$d); $n=str_replace('$','$$',$n);
$num=@file_get_contents("allnumbd.dat"); $nar=NULL;
$num++; $nar=$num; if ($num>99999999) {$num=0;}
$f=@fopen("allnumbd.dat","w"); @fwrite($f,$num); @fclose($f);
if (file_exists("data/$k")) {include("rmdir.php"); rdir("data/$k");}
$dnm=preg_replace("~([^.]*).*~m","\\1",$n);


echo '
<div class="box_2">
Путь: <b><a href="ftp.php?k='.$k.'&amp;d='.$rd.'">'.$d.'/</a></b>'.$n.'<br/>
</div>
<div class="box_1">
<form action="zip.php?k='.$k.'&amp;d='.$rd.'&amp;n='.$rn.'&amp;ac='.$ac.'" method="post">
Извлекать в:<br/>
<input name="nm" type="text" value="'.$dnm.'" maxlength="150"/><br/>
CHMOD файлов:<br/>
<input name="chf" type="text" value="644" size="3" maxlength="3" format="*N"/><br/>
CHMOD папок:<br/>
<input name="chd" type="text" value="755" size="3" maxlength="3" format="*N"/><br/>
<input type="submit" value="Разархивировать"><br/>
</form>
</div>';

}
include "includes/footer.php";
?>