<?php /*************************************************************************************** ~> FTP CONECTOR v1.0 Autor: Anderson Dad�rio Licen�a: GPL E-mail: andersonmvd@hotmail.com ~ Depend�ncias: - Criar um arquivo no mesmo diret�rio deste arquivo com o nome: "info.ftp.class.php" - Criar um diret�rio no mesmo diret�rio deste arquivo com o nome: "temp" - D� permiss�o geral ai nos arquivos e no diret�rio "temp" *****************************************************************************************/ session_start(); set_time_limit(0); require "info.ftp.class.php"; // Arquivo com as configura��es da classe ftp if($_SERVER['QUERY_STRING'] == 'destruir'){ session_destroy();header("Location: ".$_SERVER['PHP_SELF'].""); } class ftp { private $host, $port, $timeout, $user, $pass; var $socket, $info, $dir, $nCampos, $nTamanho; function __construct($host, $port=21, $timeout=90, $user, $pass, $seguro) { if(empty($host)){ $host = base64_decode($conf_host); } if(empty($port)){ $port = base64_decode($conf_port); } if(empty($timeout)){ $timeout = base64_decode($conf_timeout); } if(empty($user)){ $user = base64_decode($conf_user); } if(empty($pass)){ $pass = base64_decode($conf_pass); } if(empty($seguro)){ $seguro = base64_decode($conf_seguro); } $this->host = $host; $this->port = $port; $this->timeout = $timeout; $this->user = $user; $this->pass = $pass; $this->info = "info.ftp.class.php"; // Arquivo no qual estar�o salvas as informa��es da conex�o $this->dir = "temp"; // Diret�rio respons�vel por armazenar os arquivos baixados por FTP $this->nCampos = 5; // Quantidade de campos para enviar arquivos $this->nTamanho = 100; // Tamanho em MB de cada arquivo que pode ser enviado por upload if(@!$this->Con()) { exit("<center><font face=verdana size=2>Houveram problemas durante a tentativa de conex�o<br><br><a href='?destruir'>Conectar-se novamente</a></font></center>"); } if(!isset($_GET['caminho'])) { $this->Salvar(); exit("<script language='JavaScript'>location='?caminho=\.'</script>"); } else{ if(isset($_GET['dwn']) && !empty($_GET['dwn'])){ $this->Download($_GET['dwn']); } elseif(isset($_GET['pasta']) && !empty($_GET['pasta'])){ $this->NovoDir($_GET['pasta']); } elseif(isset($_GET['cmd']) && !empty($_GET['cmd'])){ $this->Comando($_GET['cmd']); } elseif(isset($_GET['enviar']) && !empty($_GET['enviar'])){ $this->UploadForm();exit; } $this->chDir($_GET['caminho']); } } function __destruct() { $this->Des(); # shell_exec("del ".$this->dir."/*.*"); # unlink($this->info); } // ================ Conex�o public function Con() { if($this->seguro == true){ $this->socket = ftp_ssl_connect($this->host,$this->port,$this->timeout); } else{ $this->socket = ftp_connect($this->host,$this->port,$this->timeout); } if($this->Aut()){ return TRUE; } else{ return FALSE; } } // ================ Autentica��o public function Aut() { if(ftp_login($this->socket, $this->user, $this->pass)){ return TRUE; } else{ return FALSE; } } // ================ Desconcetar public function Des() { if(!empty($this->$socket)){ ftp_close($socket); } else { return FALSE; } # unlink($this->file); } // ================ Aloca��o private function Aloc($bytes) { if (ftp_alloc($this->con(), filesize($bytes), $retorno)) { return $retorno; } else{ return FALSE; } } // ================ Upload public function Upload($nome, $file) { // if(!$this->Aloc(filesize($file))){ return FALSE; } if(empty($nome) || empty($file)){ return FALSE; } if(ftp_put($this->socket, $nome, $file, FTP_ASCII)){ fclose($fp);return TRUE; } elseif(ftp_put($this->socket, $nome, $file, FTP_BINARY)){ fclose($fp);return TRUE; } else{ fclose($fp);return FALSE; } } // ================ Upload Form public function UploadForm() { echo "<head><title>Enviar arquivos para: ".$_GET['caminho']."</title></head> <form name='upload' action='?caminho=".$_GET['caminho']."' method='post' enctype='multipart/form-data' onsubmit=\"document.upload.u.value='Aguarde ...';document.upload.u.disabled=true\"><center><p><input type='file' name='arquivo[]' style='color:green; background:white;border: 1px solid darkgray'>"; for($i=0;$i < $this->nCampos; $i++) { echo"<br /> <input type='file' name='arquivo[]' style='color:green; background:white;border: 1px solid darkgray' />\n"; } echo"<br /><input type='submit' name='u' value='Enviar Tudo' style='color:black;background:white;border: 1px solid darkgray;'></p></center></form><br> <center><a href='?caminho=".$_GET['caminho']."'><font face=verdana size=2 color=red>Retornar</font></a></center>"; } // ================ Listar public function Listar() { $var=ftp_nlist($this->socket,$this->Atual()); // var_dump($var) || print_r($var) $pastas = array(); $arquivos = array(); foreach($var as $chave => $valor) { if($this->Tamanho($valor) < 0) { array_unshift($pastas,$valor); } else{ array_unshift($arquivos,$valor); } } # Visualiza��o ~~ Come�a echo "<title>FTP CONECTOR v1.0 - Voc� est� em: ".$this->Atual()."</title>"; echo "<font face=verdana size=2>Diret�rios:<br><br>"; foreach($pastas as $nome){ echo "<a href=\"?caminho=$nome\">$nome</a><br>"; } echo "</font><br><br>"; echo "<font face=verdana size=2>Arquivos:<br><br>"; foreach($arquivos as $nome){ echo "<a href=\"?caminho=".$_GET['caminho']."&dwn=$nome\">$nome</a><br>"; } echo "</font>"; # Visualiza��o ~~ Termina echo "<br><br><center><a href='?destruir'><font face=verdana size=2 color=red>Disconnect</font></a> || <a href=\"?caminho=".$_GET['caminho']."&enviar=true\"><font face=verdana size=2 color=red>Put Files</font></a></center>"; } // ================ Download public function Download($arq_servidor) { $errey = explode("/",$arq_servidor); $errey = array_reverse($errey); $concat = "".$this->dir."/".$errey[0].""; if($var = ftp_get($this->socket, $concat, $arq_servidor, FTP_BINARY)){ $tamanho = filesize($concat); header("Content-Type: application/save"); header("Content-Length: $tamanho"); header("Content-Disposition: attachment; filename=$errey[0]"); header("Content-Transfer-Encoding: binary"); $fp = fopen($concat, "r");fpassthru($fp);fclose($fp);return TRUE; } else{ return FALSE; } } // ================ Dir Atual public function Atual() { return "".ftp_pwd($this->socket).""; } // ================ File Size public function Tamanho($arquivo) { if(empty($arquivo)){ return FALSE; } else{ return ftp_size($this->socket,$arquivo); } } // ================ Cria dir public function NovoDir($dir) { if(empty($dir)){ return FALSE; } else{ return (ftp_mkdir($this->socket,$dir)) ? TRUE : FALSE; } } // ================ Op��es public function Info() { $inf = array(); $inf[0] = ftp_systype($this->socket); $inf[1] = ftp_get_option($this->socket); return $inf; } // ================ Comando public function Comando($cmd) { if(ftp_site($this->socket,$cmd)){ return TRUE; } else{ return FALSE; } } // ================ CD .. public function DirUp() { return ftp_cdup($this->socket); } // ================ mudar CD.. public function chDir($dir) { if(ftp_chDir($this->socket,$dir)){ return TRUE; } else{ return FALSE; } } // ================ CHMOD public function chmod($chmod,$oque) { if(ftp_chmod($this->socket, $chmod, $oque) !== false){ return TRUE; } else{ return FALSE; } } // ================ Salvando public function Salvar() { $fp = fopen($this->info,"w"); fputs($fp,"<?php \$conf_host = \"".base64_encode($this->host)."\"; \$conf_port = \"".base64_encode($this->port)."\"; \$conf_timeout = \"".base64_encode($this->timeout)."\"; \$conf_user = \"".base64_encode($this->user)."\"; \$conf_pass = \"".base64_encode($this->pass)."\"; \$conf_seguro = \"".base64_encode($this->seguro)."\"; ?>"); fclose($fp); } } // fim da classe # Usando: new ftp( [STR] $host, [INT] $porta, [INT] $timeout, [STR] $usuario, [STR] $senha, [BOOL] $conexao_ssl) if(getenv('REQUEST_METHOD') == "POST") { if(isset($_POST['logar'])) { $host = $_POST['host']; $port = $_POST['port']; $timeout = $_POST['timeout']; $user = $_POST['user']; $pass = $_POST['pass']; $seguro = $_POST['seguro']; $form = true; session_register('host'); session_register('port'); session_register('timeout'); session_register('user'); session_register('pass'); session_register('seguro'); session_register('form'); } else { $classe = new ftp($_SESSION['host'],$_SESSION['port'],$_SESSION['timeout'],$_SESSION['user'],$_SESSION['pass'],$_SESSION['seguro']); for($i=0;$i<count($_FILES[arquivo][name]);$i++){ $type=$_FILES[arquivo][type][$i]; $name=$_FILES[arquivo][name][$i]; $name=explode('/',$name); $name=join('',$name); $name=str_replace("\'","",$name); $name=str_replace("'","",$name); $temp_name=$_FILES[arquivo][tmp_name][$i]; $file_erros=$_FILES[arquivo][error][$i]; $tamanho=$_FILES[arquivo][size][$i]; // if (is_file($_FILES[arquivo][$i])) { if(!empty($name)){ if($tamanho > $classe->nTamanho*1024*1024){ echo "O arquivo $name � maior do que o limite definido.";exit; } elseif($file_erros==1 || $file_erros==2) { echo "O arquivo $name � maior do que o limite definido.";exit; } elseif($file_erros==3) { echo "O arquivo $name est� corrompido.";exit; } elseif($file_erros==4) { echo "N�o foi feito a transfer�ncia do arquivo: $name";exit; } elseif(!$file_erros){ move_uploaded_file($temp_name, "".$classe->dir."/" . $name) or die("Erro ao mover arquivo"); if(@!$classe->Upload($name,"".$classe->dir."/" . $name)) { exit("<center><font face=verdana size=2>Houveram erros ao tentar enviar o arquivo para o servidor<br><br><a href='javascript:history.back()'>Tentar novamente</a></font></center>"); } // fim do if } // fim do elseif }// fim do if }// fim do for echo "<center><font face=verdana size=2 color=green>Arquivos enviados com sucesso!<br><br></font></center>"; } // fim do else } // fim do post if($_SESSION['form'] == true){ $ftp = new ftp($_SESSION['host'],$_SESSION['port'],$_SESSION['timeout'],$_SESSION['user'],$_SESSION['pass'],$_SESSION['seguro']); $ftp->Listar(); } else{ echo" <center> <title>FTP CONECTOR v1.0 - Feito por Anderson Dad�rio</title> <font face='Arial Black' size='3'>FTP CONECTOR v1.0</font><br><br> <form action='ftp.class.php' method=post> <input type=hidden name=logar value=true> <table border=0 width='50%' cellspace='0'> <tr><td width='25%' align='center'><font face=verdana size=2>Host:</font></td><td align=center><input type=text name=host style='width: 175px;'></td></tr> <tr><td width='25%' align='center'><font face=verdana size=2>Porta:</font></td><td align=center><input type=text name=port value=21 style='width: 175px;'></td></tr> <tr><td width='25%' align='center'><font face=verdana size=2>Timeout:</font></td><td align=center><input type=text name=timeout value=90 style='width: 175px;'></td></tr> <tr><td width='25%' align='center'><font face=verdana size=2>Usuario:</font></td><td align=center><input type=text name=user style='width: 175px;'></td></tr> <tr><td width='25%' align='center'><font face=verdana size=2>Senha:</font></td><td align=center><input type=password name=pass style='width: 175px;'></td></tr> <tr><td width='25%' align='center'><font face=verdana size=2>Seguro:</font></td><td align=center><select name=seguro style='width: 175px;'><option value=true>TRUE</option><option value=false>FALSE</option></select></td></tr> </table><br> <input type=submit value=Entrar style='background: white;color: black;width: 150px;'> </form><br> <font face='verdana' size='2'>Feito por <a href='mailto:andersonmvd@hotmail.com'>Anderson Dad�rio</a></font>"; } ?>