Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Teria como passar um exemplo de formulário e como faz para salvar no BANCO DE DADOS...
Muito bom!
Obrigada =)