Nome:
Local: Rio de Janeiro, RJ, Brazil

Que perguntinha hein?! Mas vamos lá, adoro estudar assuntos relacionados à web, sempre que posso aprendo uma tecnologia, técnica ou linguagem nova. Tento sempre ver quais são as tendências e acompanha-las, enfim eu sou um eterno aprendiz. Deixando o lado profissional, entrando no lado pessoal, sou uma pessoa super gente-boa (pelo menos eu me acho. rs), adoro curtir a night, sair com os amigos, fazer novas amizades e viajar (tem coisa melhor do que isso?) Acho que você já está sabendo demais sobre mim. Fuiii...

terça-feira, 24 de julho de 2007

Upload no PHP

Entrei em período de férias por isso que estou meio sumido e o pan também está gastando muito do meu tempo, adoro esportes, apesar de não praticá-los muito. rs
Olá galerinha, hoje vamos ver como se faz upload de arquivos no php, é molezinha.

Arquivo HTML:

<form enctype="multipart/form-data" action="/upload.php" method="POST">
<label for = "arqUsuario">Imagem</label>
<input name="arqUsuario" type="file" />
<input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
<input type="submit" value="Send File" />
</form>



  • O "tipo" do formulário tem que ser multipart/form-data, para fazer o upload lá no servidor.

  • Um input do tipo file, responsavel por armazenar o endereço do arquivo na máquina do usuário, junto com ele vem um botão, que no FF o value é Browser, para procurar o arquivo, sem precisar digitar o endereço, porém não sei como mudar as características desse botão :(.

  • Um input hidden com name MAX_FILE_SIZE, responsável por indicar o tamanho máximo permitido do arquivo que vai ser feito o upload.

  • E é claro um submit para mandar o arquivo ao servidor e o php armazená-lo.



Agora no arquivo php:


$uploaddir = '/home/meusProjetos/upload/';
$arquivo = $_FILES['arqUsuario'];
$uploadfile = $uploaddir . basename($arquivo['name']);
if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"])) {
echo "Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif
ou png. Envie outro arquivo";
} else if($arquivo["size"] > $_POST["MAX_FILE_SIZE"]) {
echo "Arquivo em tamanho muito grande! Envie outro arquivo";
} else {
if (move_uploaded_file($arquivo['tmp_name'], $uploadfile)) {
echo "Arquivo válido e o upload feito.\n";
chmod($uploadfile , 0766);
} else {
echo "Não foi possivel fazer o upload!\n";
}
}
?>


Antes de explicar, o código acima existem algumas observações a serem feitas.
Obs1: No phpconfig, tem que estar autorizado o upload de arquivos, e também, deve ser verificado o tamanho máximo de upload, que por padrão é dois megas, dependendo da sua necessidade terá que aumentá-lo.

Obs2:Quando a página php, é chamada já foi feito o upload do arquivo, porém ele está em uma pasta temporária, o php só vai ser responsável de mudar o diretório e o nome do arquivo.


  • $uploaddir é responsável pelo endereço definitivo do arquivo.

  • A variável $arquivo que recebe $_FILES['userfile'], possui todos os valores do arquivo

  • $uploadfile terá todo o caminho do arquivo

  • no primeiro if é verificado se o tipo do arquivo é diferente à uma imagem dos tipos (pjpeg|jpeg|png|gif|bmp), se for, ele não move o arquivo para uma pasta definitiva.

  • A instrução move_uploaded_file é a responsável por mover o arquivo de um diretório temporário para um definitivo (Oh! não me diga).

  • a instrução chmod(), irá trocar as permissões do arquivo, isso se faz necessário, para visualizar e modificar os arquivos, o 0766 lhe dá permissão de alterar e remover.



Acho que está tudo explicadinho, nos mííííííííínimos detalhes.

fuiii...

Marcadores: , ,

6 Comentários:

Blogger Rodrigo P. Maruyama disse...

Olá amigo
gostei do seu passo a passo.
agora como eu poderia fazer isso numa pagina de cadastro onde ao fazer o upload a foto ja apareça ao lado no mesmo formulário?
att
Rodrigo

11 de outubro de 2007 às 10:28  
Blogger ramon disse...

Há duas formas de serem feitas,

primeira->Se esse upload, não for feito dinamicamente, quando for fazer o reload da página, pega-se o endereço em que foi salvo a nova imgagem e seta ela no atributo src do elemento img, via PHP.

Segunda -> Utilizando a mesma idéia da primeira, porém faz-se isso javascript. Pra fazer dessa forma, acredito que só seja legal, se o seu site utilizar ajax, senão a primeira forma é melhor, pois essa é um pouco mais complicada, pra quem não está acostumado

11 de outubro de 2007 às 11:32  
Blogger 丸山ロドリゴ disse...

Olá amigo,
fiz da forma 1 mas a imagem não está carregando. Nao consigo postar o codigo aqui no comentario para vc ver melhor.

Mas a duvida e se posso pegar direto a varialvel uploadfile e colocar no src do img? Pq dessa forma o endereço da imagen fica localhost/var/www/site.....oque é estranho não é mesmo?

att
Rodrigo

16 de outubro de 2007 às 12:01  
Blogger ramon disse...

Você pode só que a variável $uploadfile, tem que ser enviada (ou por POST ou GET).

Passa o seu código para o meu e-mail, para eu poder dar uma olhada

noobshadown[at]gmail[dot]com

16 de outubro de 2007 às 12:13  
Blogger Unknown disse...

Teria como enviar o form por GET ?

24 de junho de 2008 às 11:36  
Blogger ramon disse...

Tem como sim, só que na hora de pegar os valores substitui POST por GET

24 de junho de 2008 às 22:45  

Postar um comentário

Assinar Postar comentários [Atom]

<< Página inicial