Detalhando upload em PHP com detalhes e passo a passo

index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<!DOCTYPE html> <html> <head> <meta charset='utf8'/> <title>Upload com PHP</title> </head> <body> <form method="POST" action="upload.php" enctype="multipart/form-data"> <label>Informar o arquivo</label> <input type="file" name="upload"/> <input type="submit" name="Enviar" value="Enviar"> </form> </body> </html> |
PHP
Finalizado a explicação do formulário HTML vamos para o script PHP que vai receber a submissão do nosso formulário
upload.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<?php /* * Verifica se existe a array de upload e se o arquivo enviado possui seu tamanho maior que zero */ if(isset($_FILES['upload']) && $_FILES['upload']['size'] > ): /* * Verifica se o upload foi enviado via POST */ if(is_uploaded_file($_FILES['upload']['tmp_name'])): /* * Verifica se o diretório de destino existe, senão existir cria o diretório */ if(!file_exists("/img")): mkdir("img"); endif; /* * Monta o caminho de destino do arquivo */ $caminho = "img/" . $_FILES['upload']['name']; /* * Essa função move_uploaded_file() copia e verifica se o arquivo enviado foi copiado com sucesso para o destino */ if (move_uploaded_file($_FILES['upload']['tmp_name'], $caminho)): echo "Arquivo enviado com sucesso!"; else: echo "Houve um erro ao gravar arquivo na pasta de destino!"; endif; endif; else: /* * Switch para verificação de posíveis erros durante o upload */ $erro = $_FILES['upload']['error']; switch ($erro): case : // Não houve erro, o upload foi bem sucedido. break; case 1: echo "O arquivo no upload é maior do que o limite definido em upload_max_filesize no php.ini."; break; case 2: echo "O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE que foi especificado no formulário HTML."; break; case 3: echo "O upload do arquivo foi feito parcialmente."; break; case 4: echo "Não foi feito o upload do arquivo."; break; default: echo "Erro desconhecido!"; break; endswitch; endif; ?> |
Detalhando upload em PHP
É importante entender que quando enviamos uma submissão contendo um elemento input com type=”file” para um script PHP temos acesso a um array associativo chamado $_FILES[], esse array possui elementos contendo informações importantes do arquivo enviado pela submissão, vale ressaltar que mesmo que nenhum arquivo seja enviado o array $_FILES[] vai existir. Através dessas informações podemos manipular o arquivo e até possíveis erros que possam ocorrer durante o upload, vamos aos elementos do $_FILES[‘upload’] usamos o name do input (upload) para acessar o array:
$_FILES[‘upload’][‘name’] – Nome original do arquivo.
$_FILES[‘upload’][‘type’] – O tipo mime do arquivo, se o browser deu esta informação. Um exemplo pode ser “image/gif”.
$_FILES[‘upload’][‘size’] – Tamanho em bytes do arquivo.
$_FILES[‘upload’][‘tmp_name’] – O nome temporário do arquivo, como foi guardado no servidor.
$_FILES[‘upload’][‘error’] – O código de erro associado a este upload de arquivo. (no decorrer do artigo teremos as definições dos erros)
1 |
if(isset($_FILES['upload']) && $_FILES['upload']['size'] > ): |
1 |
if(is_uploaded_file($_FILES['upload']['tmp_name'])): |
1 2 3 |
if(!file_exists("/img")): mkdir("img"); endif; |
1 |
$caminho = "img/" . $_FILES['upload']['name']; |
1 2 3 4 5 |
if (move_uploaded_file($_FILES['upload']['tmp_name'], $caminho)): echo "Arquivo enviado com sucesso!"; else: echo "Houve um erro ao gravar arquivo na pasta de destino!"; endif; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$erro = $_FILES['upload']['error']; switch ($erro): case : // Não houve erro, o upload foi bem sucedido. break; case 1: echo "O arquivo no upload é maior do que o limite definido em upload_max_filesize no php.ini."; break; case 2: echo "O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE que foi especificado no formulário HTML."; break; case 3: echo "O upload do arquivo foi feito parcialmente."; break; case 4: echo "Não foi feito o upload do arquivo."; break; default: echo "Erro desconhecido!"; break; endswitch; |