O PHP é capaz de receber o upload de qualquer browser que siga a norma RFC-1867, o que permite o upload de arquivos cliente => servidor. Ele ainda provê o controle total de quem pode fazer o upload e o que fazer com o arquivo após sua transferência, mas mesmo com esse controle, somente poucas pessoas sabem do perigo real do mal uso desse recurso.
Então continuando... Os arquivos serão guardados no diretório temporário
do servidor a menos que outro lugar seja especificado com a opção
upload_tmp_dir no php.ini. O diretório padrão do servidor
pode ser mudado se mudando o valor da variável de ambiente TMPDIR no
ambiente onde o PHP esta sendo executado PHP. Mudando-a com
putenv() de um script PHP não irá funcionar. Esta variável de
ambiente também pode ser usada para se ter certeza que outras operações
estão funcionando no arquivo do upload.
Note que deve se definir upload_temp_dir no php.ini ou TMPDIR,
não podendo estarem ambos vazios, sendo recomendado no mínimo
upload_tmp_dir.
Agora vamos ao que interessa: vamos validar o upload de arquivos.
O seguinte exemplo irá processar o envio de um arquivo que vem de um
formulário:
<?php
// Nas versões anteriores a 4.1.0, $HTTP_POST_FILES deve ser usado ao invés de $_FILES.
// Nas versões anteriores a 4.0.3, use copy() e is_uploaded_file() ao invés move_uploaded_file
$uploaddir = '/var/www/uploads/';
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
print "O arquivo é valido e foi carregado com sucesso. Aqui esta alguma informação:\n";
print_r($_FILES);
} else {
print "Possível ataque de upload! Aqui esta alguma informação:\n";
print_r($_FILES);
}
?>
O script PHP que irá receber o arquivo do upload deve implementar
qualquer lógica que for necessária para determinar o que deve ser feito
com o arquivo do upload. Você pode, por exemplo, usar a variável
$_FILES['userfile']['size'] para descartar qualquer arquivo que
seja muito pequeno ou muito grande. Você pode usar a variável
$_FILES['userfile']['type'] para descartar qualquer arquivo que
não seja de um certo tipo.
Desde o PHP 4.2.0, você pode usar $_FILES['userfile']['error'] e
planejar a sua lógica de acordo com os códigos de erro. Qualquer que seja
a lógica, você deve excluir o arquivo do diretório temporário ou movê-lo
para outro lugar.
O arquivo será excluído do diretório temporário ao fim do script se não
tiver sido movido ou renomeado.
[1] Comentário enviado por pmichelazzo em 20/01/2004 - 10:28h
Meu caro, esse não é um artigo mas sim uma cópia do manual do PHP com algumas alterações nanicas aqui e ali. Não seria mais honrado escrever um artigo verdadeiramente?
Perdi meu tempo pois tudo o que li aqui, já tinha lido no manual do PHP e nada me acrescentou.
[2] Comentário enviado por Ragen em 12/02/2004 - 17:05h
Caro michelazzo,
Não foi à toa que coloquei "Fonte: Manual do PHP" no rodapé do texto. Mas da proxima vez, antes de usar algo já escrito, farei uma citação antes do mesmo e não mais no rodapé do texto.