En primer lugar, encontrar la extensión:
$pos = strrpos($filename, '.');
if ($pos === false)
{
// file has no extension; do something special?
$ext = "";
}
else
{
// includes the period in the extension; do $pos + 1 if you don't want it
$ext = substr($filename, $pos);
}
luego llame a su archivo de todos modos que desee, y anexar al nombre de la extensión:
$newFilename = "foobar" . $ext;
move_uploaded_file($_FILES['picture']['tmp_name'], 'peopleimages/' . $newFilename);
EDITAR Pensando en ello, nada de esto es óptima. Las extensiones de archivo más a menudo describen el tipo de archivo, pero este no es siempre el caso. Por ejemplo, podría cambiar el nombre de un archivo .png a una extensión .jpg, y la mayoría de las aplicaciones seguirían detectando que se trata de un archivo png. Aparte de eso, ciertos sistemas operativos simplemente no usan extensiones de archivo para determinar el tipo de archivo.
Con cargas $_FILE
, también se le proporciona un elemento type
que representa el tipo MIME del archivo que ha recibido.Si puedes, te sugerimos que dependen de ella en lugar de en la extensión dada:
$imagetypes = array(
'image/png' => '.png',
'image/gif' => '.gif',
'image/jpeg' => '.jpg',
'image/bmp' => '.bmp');
$ext = $imagetypes[$_FILES['myfile']['type']];
puede ordenar una more complete list of MIME types here.
También uso el is_uploaded_file() función para comprobar si el archivo que estamos apuntando en realidad es un archivo cargado. –
@Niels Bom: 'move_uploaded_file' lo hace por usted. – zneak
@zneak Soy corregido. –