Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

diegoholiveira

Classe para Upload de arquivos

Recommended Posts

Galera.

 

Implementei essa classe de upload de arquivos, ta bem simples (se alguem quiser colaborar e ajudar a melhora-la).

Eu escrevi ela para PHP 5, mas facilmente pode ser reescrita em PHP 4.

Nota que ele já verifica automaticamente se o upload é simples ou multiplo.

 

 

O codigo:

<?php
/*
 * Classe Upload
 * Executa o upload de arquivos
 * @Author = Diego Henrique (diegoholiveira@yahoo.com.br)
 */
class Upload {

	private $file;		// Armazena o arquivo
	private $fileName;	// Armazena o novo nome do arquivo
	private $single;	// Armazena o tipo de upload
	
	/*
	 * Metodo construtor
	 * @param $fieldName = Nome do campo que vai ser recebido
	 */
	public function __construct( $fieldName ) {
		
		// Verifica se existe mais de um arquivo
		$i = 0;
		
		// Verifica se o upload é multiplo
		if (isset($_FILES[$fieldName]['name']) && is_array($_FILES[$fieldName]['name'])) {
			
			$this->single = false;
			
			while (isset($_FILES[$fieldName]['error'][$i]) && $_FILES[$fieldName]['error'][$i] == UPLOAD_ERR_OK) {
				
				$tmp_file[$i]['name']		= $_FILES[$fieldName]['name'][$i];
				$tmp_file[$i]['type']		= $_FILES[$fieldName]['type'][$i];
				$tmp_file[$i]['error']		= $_FILES[$fieldName]['error'][$i];
				$tmp_file[$i]['size']		= $_FILES[$fieldName]['size'][$i];
				$tmp_file[$i]['tmp_name']	= $_FILES[$fieldName]['tmp_name'][$i];
				
				$tmp_names[$i]	= $this->cleanFileName($tmp_file[$i]['name']);
				
				$this->file 	= $tmp_file;
				$this->fileName = $tmp_names;
				
				$i++;
			}
			
		}
		else if (isset($_FILES[$fieldName]['name']) && is_string($_FILES[$fieldName]['name'])) {
			
			$this->single = true;
			
			// Verifica se o arquivo passado é valido
			if ( $_FILES[$fieldName]['error'] == UPLOAD_ERR_OK ) {

				$this->file		= $_FILES[$fieldName];
				$this->fileName = $this->cleanFileName($this->file['name']);

			}

		}

	}
	
	/*
	 * Metodo cleanFileName
	 * Remove acentos, espaços e caracteres especiais
	 * @param $string = string a ser limpa
	 */
	private function cleanFileName( $string ) {
		
		// Converte todos os caracteres para minusculo
		$string = strtolower($string);

		// Remove os acentos
		$string = eregi_replace('[aáàãâä]', 'a', $string);
		$string = eregi_replace('[eéèêë]', 'e', $string);
		$string = eregi_replace('[iíìîï]', 'i', $string);
		$string = eregi_replace('[oóòõôö]', 'o', $string);
		$string = eregi_replace('[uúùûü]', 'u', $string);
		
		// Remove o cedilha e o ñ
		$string = eregi_replace('[ç]', 'c', $string);
		$string = eregi_replace('[ñ]', 'n', $string);
		
		// Substitui os espaços em brancos por underline
		$string = eregi_replace('( )', '_', $string);
		
		// Remove hifens duplos
		$string = eregi_replace('--', '_', $string);
		
		return $string;
		
	}
	
	/*
	 * Metodo upload
	 * Executa o upload
	 * @param $path = caminho onde será salvo o arquivo
	 * @param $replace = indica se o arquivo pode substituir
	 * outro arquivo com o mesmo nome
	 */
	public function upload( $path, $replace = false ) {
		
		// Seta o limite de execução em zero para evitar erros
		set_time_limit(0);
		
		// Verifica se o diretorio passado como parametro existe
		if (!is_dir($path)) {
			@mkdir( $path );
		}
		
		if ($this->single) {
			
			// Verifica se é para substituir o arquivo
			if (!$replace) {
			
				// verifica se é o arquivo existe
				if ( file_exists( sprintf("%s/%s", $path, $this->fileName) )  ) {
					return "O arquivo já existe na pasta indicada!";
				}
				
			}
			
			if (move_uploaded_file( $this->file['tmp_name'], sprintf( "%s/%s", $path, $this->fileName ) )) {
				return true;
			}
			else {
				return "Erro ao fazer o upload do arquivo!";
			}
			
		}
		else {
			
			// Armazena os erros
			$erros = array();
			
			// Verifica se é para substituir o arquivo
			if (!$replace) {
				
				for ($i = 0; $i < count($this->file); $i++) {
					
					// verifica se é o arquivo existe
					if ( file_exists( sprintf("%s/%s", $path, $this->fileName[$i]) )  ) {
						 $erros[] = sprintf(
						 	"O arquivo %s já existe na pasta indicada!",
						 	$this->fileName[$i]
						 );
					}
					
				}
				
				if (count($erros)) return $erros;
				
			}
			
			for ($i = 0; $i < count($this->file); $i++) {
				
				if (!move_uploaded_file( $this->file[$i]['tmp_name'], sprintf( "%s/%s", $path, $this->fileName[$i] ) )) {
					$erros[] = sprintf(
						"Erro ao fazer o upload do arquivo %s!",
						$this->fileName[$i]
					);
				}

			}

			if (count($erros)) return $erros;
			else return true;

		}

	}
	
	/*
	 * Metodo getFileName
	 * Retorna o nome do arquivo em upload simples
	 * Retorna um vetor com os nomes dos arquivos em uploads multiplo
	 */
	public function getFileName() {
		return $this->fileName;
	}
	
	/*
	 * Metodo getExtension
	 * Retorna a extensão do arquivo
	 * Este metodo só funciona em uploads simples
	 */
	public function getExtension() {
		if ($this->single) return strrchr( $this->fileName, "." );
		else return false;
	}

}

 

para executar uploads é simples:

$upload = new Upload("arquivos"); // nome do campo tipo file do formulario
// arquivo voce passa a pasta de destino como primeiro parametro, e como segundo, se o arquivo pode ou não ser substituido
if ($upload->upload("pasta/destino", true)) {
echo "upload feito com sucesso!";
}

 

É isso.

 

Aberto a sugestões, criticas, qualquer coisa. rs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.