Não está usando a function basename com $ _FILES Redundante?

De acordo com a seção uploads do método POST do Manual do PHP , $_FILES['userfile']['name'] é o nome original do arquivo na máquina do cliente. O Exemplo # 2 nessa seção usa a function basename com $_FILES['userfile']['name'] como o seguinte:

 $uploaddir = '/var/www/uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

Eu fiz alguns experimentos no meu host local ( Apache 2.2.14, PHP 5.3.1, Windows XP ) e descobriu que as duas linhas a seguir são equivalentes:

 $_FILES['userFile']['name']; // "file.txt" basename($_FILES['userFile']['name']); // "file.txt" 

Ou seja, usar a function basename com $_FILES['userFile']['name'] parece bastante redundante. Não é?

Ou seja, usar a function basename com $ _FILES [‘userFile’] [‘name’] parece bastante redundante. Não é?

Não, em primeiro lugar, por razões de segurança, como o @Gumbo descreve na sua resposta; Em segundo lugar, porque versões antigas do IE costumavam fornecer o caminho completo do arquivo no lado do cliente, como

 C:\Documents and Settings\Username\Desktop\Image_cropped.jpg 

Esse comportamento parou tão recentemente quanto o IE8. A partir desta input do blog MSDN descoberta através desta pergunta SO :

Controle do carregamento de arquivos

Além disso, o “Incluir caminho do diretório local ao carregar arquivos” URLAction foi definido como “Desativar” para a Zona da Internet. Esta alteração evita o vazamento de informações do sistema de arquivos locais potencialmente sensíveis na Internet. Por exemplo, ao invés de enviar o caminho completo C: \ users \ ericlaw \ documents \ secret \ image.png, o Internet Explorer 8 agora enviará apenas o nome do arquivo image.png.

Os pedidos HTTP podem ser forjados e, portanto, o nome do arquivo fornecido no header também pode ser manipulado.

Se você quiser garantir que apenas um nome de arquivo seja fornecido, valide o valor ou filtre-o com o nome do arquivo para obter apenas o nome do arquivo.

usando basename () em um caminho completo, por exemplo, /path/mydir/file.txt , retorna o file.txt . É útil quando você tem um caminho completo para analisar e você quer apenas obter a última parte do caminho.