Sempre que implemento algumas coisas no And After surgem mil idéias para posts aqui no O Desenvolvedor, desta vez vou abordar como lidar com upload de arquivos com PHP através do método POST.
Formulário para envio de arquivo
Para permitir o upload de arquivos com PHP o formulário deve ter o atributo enctype da seguinte forma:
form enctype="multipart/form-data" action="post.php" method="post"
E o campo de arquivo, onde o usuário vai selecionar o arquivo que será submetido através do método POST"
input name="userfile" type="file"
Upload de arquivo com PHP
Na sua página PHP que receberá o post do formulário você terá acesso ao objeto $_FILES, que será um array com todos os arquivos submetidos no post.
Para acessar um arquivo específico, usamos o valor do atributo "name" que foi utilizado no inpute de arquivo no formulário, no exemplo anterior o nome é "userfile", portanto teremos $_FILES['userfile'].
Para visualizar no navegador todas as informações existentes no objeto faça o seguinte:
print_r($_FILES['userfile']);
Você terá
- $_FILES['userfile']['name']
- $_FILES['userfile']['type']
- $_FILES['userfile']['size']
- $_FILES['userfile']['tmp_name']
- $_FILES['userfile']['error'] (veja a lista de código de erros do upload PHP)
Com estas informações você pode aplicar toda a lógica e tratamento necessário como verificação da extensão, tamanho, nomenclatura do arquivo, etc.
Perceba que o arquivo é salvo temporariamente no servidor, portanto neste ponto do código não existe nenhuma mágica, o upload já foi feito e você só precisa mover e renomear o arquivo para onde você deseja.
Função move_uploaded_file
Depois de fazer os tratamentos necessários no PHP, você pode utilizar a função move_uploaded_file para mover o arquivo para o diretório onde ele deverá ficar (veja como criar pastas em PHP).
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
echo "Upload com sucesso";
} else {
echo "Erro no upload";
}
print_r($_FILES);
Espero ter ajudado no entendimento de como funciona o upload de arquivos com PHP, atualmente deixo o Code Igniter gerenciar quase tudo isso nas minhas aplicações. 🙂