2012-04-28 14 views

risposta

985

Non c'è bisogno di utilizzare le funzioni di stringa. È possibile utilizzare qualcosa che in realtà è stato progettato per ciò che si vuole: pathinfo():

$path = $_FILES['image']['name']; 
$ext = pathinfo($path, PATHINFO_EXTENSION); 
+0

$ path = $ _FILES ['image'] ['name'] [0]; il nome del file attuale è in una matrice. pathinfo valuterà solo una stringa. – foureight84

+8

@ foureight84: Questo è solo il caso se hai campi di caricamento chiamati 'image []' ... – ThiefMaster

+2

Ho modificato leggermente il tuo codice e ho fatto una funzione, nel caso qualcuno volesse usare una funzione. Ecco il codice: function getFileExtension ($ path) { $ ext = pathinfo ($ path, PATHINFO_EXTENSION); return $ ext; } –

12

Come su

$ext = array_pop($userfile_extn); 
+7

che è una funzione carino: P – Michelle

+2

Non consiglio questo. Ti stai affidando all'ordine in cui l'array sarà negli anni a partire da ora. È una soluzione pigra che molto probabilmente causerà problemi in futuro. –

25

Un metodo migliore sta usando strrpos + substr (più veloce di esplodere per questo):

$userfile_name = $_FILES['image']['name']; 
$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.')+1); 

Ma, per verificare il tipo di un file, utilizzando mime_content_type è un modo migliore: http://www.php.net/manual/en/function.mime-content-type.php

+3

Meglio di 'pathinfo()'? Io non la penso così – ThiefMaster

+1

Meglio che esplodere ;-). Ma hai ragione, pathinfo è un modo migliore quando abilitato (alcuni server mutualizzati disabilitano questa funzione ...). – Julien

+10

** Nota importante **: Questo fallirà con percorsi come: '/ var/www/website.com/somefile'. – brianreavis

20

si potrebbe provare con questo per tipo mime

$image = getimagesize($_FILES['image']['tmp_name']); 

$image['mime'] restituirà il tipo mime.

Questa funzione non richiede la libreria GD. È possibile trovare la documentazione here.

Questo restituisce il tipo mime dell'immagine.

Alcune persone usano il $_FILES["file"]["type"] ma non è affidabile come è stato dato dal browser e non da PHP.

È possibile utilizzare pathinfo() come suggerito da ThiefMaster per recuperare l'estensione dell'immagine.

Prima assicurarsi che l'immagine venga caricata correttamente durante lo sviluppo prima di eseguire qualsiasi operazione con l'immagine.

45

Questo funziona così:

$array = explode('.', $_FILES['image']['name']); 
$extension = end($array); 
+17

'Solo le variabili devono essere passate per riferimento', il manuale PHP – dader

+1

Questo non è un buon approccio poiché la funzione 'end' è destinata a spostare il puntatore interno di una matrice alla fine dell'array e restituire quell'elemento Il problema è che l'array viene passato per riferimento e dal momento che l'array viene generato dinamicamente, non può essere passato per riferimento, quindi l'avviso o l'errore, a seconda della versione di PHP. – SteveK

+25

** Nota importante **: Questo fallirà con percorsi come: '/ var/www/website.com/somefile' (è meglio usare pathinfo). – brianreavis

Problemi correlati