Forum und email

is_uploaded_file

(PHP 4 >= 4.0.3, PHP 5)

is_uploaded_file — Diz se o arquivo foi enviado por POST HTTP

Descrição

bool is_uploaded_file ( string $filename )

Retorna TRUE se o arquivo com o nome filename foi enviado por POST HTTP. Isto é útil para ter certeza que um usuário malicioso não está tentando levar o script a trabalhar em arquivos que não deve estar trabalhando --- por exemplo, /etc/passwd.

Este tipo de confirmação é importante principalmente se existe alguma chance que qualquer coisa feita com os arquivos carregados possa revelar seu conteúdo para o usuário, ou mesmo para outros usuários no mesmo sistema.

Para o funcionamento apropriado, a função is_uploaded_file() precisa de um argumento como $_FILES['userfile']['tmp_name'], - o nome do arquivo enviado na máquina do cliente $_FILES['userfile']['name'] não funciona.

Parâmetros

filename

O nome do arquivo sendo checado.

Valor Retornado

Retorna TRUE em caso de sucesso ou FALSE em falhas.

Exemplos

Example#1 Exemplo de is_uploaded_file()

<?php

if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
   echo 
"O arquivo "$_FILES['userfile']['name'] ." foi enviado com sucesso.\n";
   echo 
"Mostrando o conteúdo\n";
   
readfile($_FILES['userfile']['tmp_name']);
} else {
   echo 
"Possível ataque de envio de arquivo: ";
   echo 
"nome do arquivo '"$_FILES['userfile']['tmp_name'] . "'.";
}

?>

Example#2 Exemplo de is_uploaded_file() para PHP 4 < 4.0.3

O exemplo seguinte não funcionará em versões do PHP posteriores a 4.0.2. Isto depende de uma funcionalidade interna do PHP que mudou depois dessa versão.

<?php
/* Teste de arquivo carregado pelo usuário */
function is_uploaded_file_4_0_2($filename)
{
    if (!
$tmp_file get_cfg_var('upload_tmp_dir')) {
        
$tmp_file dirname(tempnam(''''));
    }
    
$tmp_file .= '/' basename($filename);
    
/* Podem haver barras sobressalentes no php.ini... */
    
return (ereg_replace('/+''/'$tmp_file) == $filename);
}

/* Assim é como utilizá-la, uma vez que você também não tem
 * move_uploaded_file() nessas versões mais antigas: */
if (is_uploaded_file_4_0_2($HTTP_POST_FILES['userfile'])) {
    
copy($HTTP_POST_FILES['userfile'], "/lugar/onde/colocar/arquivo/enviado");
} else {
    echo 
"Possível ataque de envio de arquivo: nome do arquivo '$HTTP_POST_FILES[userfile]'.";
}
?>

Veja também