Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Programação » PHP » Upload Simples com PHP -->
 
Avaliação: | Publicado em: 19/08/2007
Upload Simples com PHP
Humberto Rodrigues Técnico em Informática. Webmaster. Conhecimentos em Photoshop, Flash, Dreamweaver, Visual Basic, Delphi, Access, HTML, CSS, SQL e PHP.


Hoje vamos, criar um sistema de upload, bem simples e funcional, segue abaixo o código com os devidos comentários.

<?php

if (isset($arquivo)) // Verificamos se a variável "arquivo" existe
{
$nome = rand(00,9999); // Aqui criamos um número randômico, para utilizarmos como nome do arquivo
$dir="up/"; //Esse é o diretório onde ficará os arquivos enviados, lembre-se de criá-lo. Este script não cria diretórios

if (is_uploaded_file($arquivo)) // Verificamos se existe algum arquivo na variável "Arquivo"
{ move_uploaded_file($arquivo,$dir.$nome.$arquivo_name); // Aqui, efetuamos o upload, propriamente dito
 echo "Enviado<br>"; // Caso dê tudo certo, imprimi na tela "enviado"
}else{
 echo "erro"; // Caso ocorra algum erro, imprimi na tela "erro"
}
}

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Upload de Imagens</title>
</head>
<link rel="stylesheet" href="estilo.css">
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<table width="375" border="0" cellpadding="0" cellspacing="0">
<tr>

 <td>

    <input type="file" name="arquivo"> </td>
</tr>
<tr>
 <td>
 <input type="submit" value="Enviar"> 
 </td>
</tr>
</table>
</form>
</body>
</html>


Este sistema de upload é realmente muito simples, mas cabe a você agora, pesquisar mais e descobrir formas mais avançadas de criar um sistema de upload.

Abraços

www.humbertorodrigues.com


Muito Bom seu tuto cara, show de bola, mas vc poderia ensinar também como se faz para dar uoload no nome de arquivo que foi gerado em texto para o anco de Dados, assim, ele poderia ser usado em outrasaplicações.
bom post, mas qto ao nome do arquivo eh melhor usar:
nome = md5(time());
assim as chances de repetir são praticamente impossiveis
Eu fiz uma classe de upload, por ter que enviar e fazer muitas validações, tá com umas expressões regulares meio "feia", mas não to com muita vontade de arrumar e tem outra coisa pra fazer, que não tive tempo, na parte de criar um diretório, caso existe mais subníveis, a classe não criará. Exemplo: /pasta1 (será criada)
agora /pasta1/pasta2 (não será criada)

de resto, fiquem a vontade para modificar e melhorar.
s

/
Classe que valida e salva um arquivo enviado pelo usuário

Método construtor
array arq = Array que trás o arquivo enviado pelo usuário
string dir = Diretório onde o arquivo é salvo (Padrão: "arquivo")
string val = Tipo de validação do arquivo ("default" e "imagem" - Padrão: "default")
int tam = Tamanho do arquivo passado em Kb (Kilobytes) (Padrão: 1024 Kb => 1 mb);

Exemplo => obj = new Upload(_FILES"arquivo","arquivo","default",500);

Método de envio => boolean obj->enviarArquivo();
Método que mostra os erros => string obj->erros();

/

class Upload {
var arquivo;
var nome = '';
var diretorio;
var tamanho;
var validacao;
var largura = 20;
var altura = 20;
var erro = array();

function Upload(arq = '',dir = 'arquivo',val = 'default',tam = 1024) {
this->arquivo = arq;
this->diretorio = dir;
this->validacao = val;
this->tamanho = (tam 1024);
}
function setDiretorio(dir) {
this->diretorio = dir;
}
function getDiretorio() {
return this->diretorio;
}
function setTamanho(tam) {
this->tamanho = (tam 1024);
}
function getTamanho() {
return this->tamanho;
}
function setArquivo(arq) {
this->arquivo = arq;
}
function getArquivo() {
return this->arquivo;
}
function setResolucao(x,y) {
this->largura = x;
this->altura = y;
}
function getLargura() {
return this->largura;
}
function getAltura() {
return this->altura;
}
function setValidacao(val) {
this->validacao = val;
}
function setNome(nom) {
this->nome = nom;
}
function getNome() {
return this->nome;
}
function arquivoExiste() {
if (this->arquivo) {
return (is_uploaded_file(this->arquivo"tmp_name") && !empty(this->arquivo"tmp_name")) ? true : false;
}
else {
return false;
}
}
function validarArquivo() {
if (this->arquivoExiste()) {
if (this->arquivo"size" > this->tamanho) {
this->erro = "O arquivo enviado é maior que o permitido pelo servidor.";
return false;
}
switch (this->validacao) {
case 'default':
if (!eregi("(phpaspcgibatphpsaspx)",this->arquivo"name")) {
return true;
}
else {
this->erro = "O arquivo enviado não é um arquivo aceito pelo servidor.";
return false;
}
break;
case 'imagem':
if (eregi("image/(gifx-pngpjpeg)",this->arquivo"type")) {
res = getimagesize(this->arquivo"tmp_name");
if (res0 > this->largura res1 > this->altura) {
this->erro = "A imagem enviada não pode superar os limites de ".this->largura." x ".this->altura.".";
return false;
}
return true;
}
else {
this->erro = "Imagem inválida, por favor, envie novamente.";
return false;
}
break;
case 'html':
if (eregi("text/html",this->arquivo"type")) {
return true;
}
else {
this->erro = "Arquivo HTML inválido, por favor, envie novamente.";
return false;
}
break;
default:
this->erro = "O tipo de validação "".this->validacao."" não existe.";
return false;
}
}
else {
this->erro = "O arquivo não existe.";
return false;
}
}
function enviarArquivo() {
if (this->validarArquivo()) {

set_time_limit(0);

if (!file_exists(this->diretorio)) {
if (!mkdir(this->diretorio)) {
this->erro = "Não foi possível criar o diretório de destino para o arquivo.";
return false;
}
}

if (!this->nome) {
this->nome = this->arquivo"name";
}
else {
extArq = explode(".",this->arquivo"name");
if (strpos(this->nome,'.') === false) {
this->nome .= ".".extArq1;
}
else {
extNom = explode(".",this->nome);
if (extNom1 != extArq1) {
this->nome = extNom0.".".extArq1;
}
}
}

while (file_exists(this->diretorio.this->nome)) {
this->nome = preg_replace("/(.?)(_?)(d)(..)?/e", "'1_'.(31).'4'",this->nome);
}

if (!move_uploaded_file(this->arquivo"tmp_name",this->diretorio."/".this->nome)) {
this->erro = "Não foi possível salvar o arquivo.";
return false;
}

return true;
}
else {
return false;
}
}
function erros() {
message = '';
foreach (this->erro as msg) {
message .= msg."<br />";
}
return message;
}
}
leonardo horta <leonardo_br2006@hotmail.com>
Olá gostei muito da matéria.. mas estou com uma dúvida quanto a segurança. como eu faço para limitar o tipo de arquivo, nao deixando por exemplo upar nenhum arquivo sem ser jpg, gif ou bmp por exemplo. Obrigado.. e parabéns mais uma vez
leonardo César <leonardo_zona@hotmail.com>
amigo, gostaria de saber para que diretorio ele vai no banco de dados, e como eu faço para exibir o arquivo que foi incluso, na pagina... desde já agradeço
Aproveite e divirta-se aqui http://muoc.sytes.net:8090/
Comunidade official: http://www.orkut.com/Community.aspx?cmm=48373125

muoceano news

ou entao digita no explore o nome do melhor mu q vc ja viu

muoceano.rg3.net


e so vc digitar no google ou no cade

obrigado bora jogar