PHP - Como atualizar arquivos

Dezembro 2016

A linguagem PHP pode gerenciar arquivos enviados (upload) graças ao formulário HTML.


Formulário de envio de arquivos

Para começar, é preciso criar um formulário HTML que permitirá a escolha do arquivo a ser enviado:
FORM method="POST" action="[seu arquivo PHP para upload.php]" ENCTYPE="multipart/form-data"> 
<INPUT type=hidden name=MAX_FILE_SIZE VALUE=2048>
<INPUT type=file name="nome do arquivo">
<INPUT type=submit value="enviar">
</FORM>

É fundamental não esquecer a
ENCTYPE="multipart/form-data"
! Caso contrário, o formulário não terá nenhum efeito.

Além disso, o campo
MAX_FILE_SIZE
indica o tamanho máximo do arquivo a ser enviado pelo navegador, porém isto não é o bastante para garantir que os arquivos enviados não ultrapassem um determinado tamanho, na medida em que nem todos os navegadores o levem em conta. O valor do tamanho máximo do arquivo enviado é ajustável no disco rígido dentro da pasta de configuração php.ini.

Como configurar o PHP para fazer upload

O arquivo de configuração php.ini contém diretivas que ajustam e autorizam, ou não, o envio de arquivos através de um formulário:
file_uploads= On/Off autoriza, ou não, o envio de arquivos.
upload_tmp_dir = o diretório permite definir o diretório temporário, possibilitando a recepção do arquivo enviado.
upload_max_filesize = 2M define o tamanho máximo permitido do arquivo. Se este limite for ultrapassado, o servidor enviará um alerta de erro.
post_max_size = indica o tamanho máximo de dados enviados por formulário. Esta diretiva tem primazia sobre o "upload_max_filesize". Desta forma, certifique-se que você tem "post_max_size" superior a "upload_max_filesize".

Se você não tiver acesso à configuração (no caso de um site hospedado em um servidor do provedor de acesso ou de uma hospedagem compartilhada), você poderá verificar a configuração graças à função phpinfo():

<? 
phpinfo();
?>

Como recuperar o arquivo com PHP

O arquivo e suas informações podem ser encontrados através da variável superglobal $_FILES[].

Para mostrar o seu conteúdo, utilize o seguinte script:
<pre><?  print_r($_FILES); ?></pre>

A saída deste código será assim:
Array 
(
[nome_do_arquivo] => Array
(
[name] => MinhaBelaImagem.jpg
[type] => imagem/jpg
[tmp_name] => caminho_completo_do_arquivo_enviado
[error] => 0
[size] => 1000
)
)

No caso acima, trata-se de uma imagem JPEG pesando 1 MB.

Os campos $_FILES[name], $_FILES[type], $_FILES|error], $_FILES[size] permitem testar o tipo de arquivo, seu tamanho, seu nome e verificar se houve erros.

Assim, você poderá corrigir os erros da seguinte maneira:

<?       
if ($_FILES['nome do arquivo']['error']) {
switch ($_FILES['nome_do_arquivo']['error']){
caso 1: // UPLOAD_ERR_INI_SIZE
echo"O arquivo ultrapassa o limite autorizado pelo servidor(arquivo php.ini) !";
break;
caso 2: // UPLOAD_ERR_FORM_SIZE
echo " O arquivo ultrapassa o limite autorizado no formulário HTML !");
break;
caso 3: // UPLOAD_ERR_PARTIAL
echo "O envio do arquivo foi interrompido durante a transferência!";
break;
caso 4: // UPLOAD_ERR_NO_FILE
echo "O arquivo que você enviou tem um tamanho zero !");
break;
}
}
else {
// $_FILES['nome_do arquivo']['error'] vale 0 ou seja UPLOAD_ERR_OK
// o que significa que não houve erro
}
?>


Com o move_uploaded_files() é possível transferir uma imagem do diretório temporário para um diretório de destino:

<? 
if ((isset($_FILES['nome_do_arquivo']['arquivo'])&&($_FILES['nome_do arquivo']['error'] == UPLOAD_ERR_OK)) {
$caminho_destino = '/var/www/arquivos/';
move_uploaded_file($_FILES['nome_do_arquivo']['tmp_name'], $caminho_destino.$_FILES['nome_do_arquivo']['name']);
}
?>

Foto: © PHP.

Veja também :
Este documento, intitulado « PHP - Como atualizar arquivos »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.