2012-04-28 19 views

Odpowiedz

985

ma potrzeby korzystania z funkcji ciągów. Można użyć czegoś, co faktycznie jest przeznaczony do tego, co chcesz: pathinfo():

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

$ path = $ _FILES ['image'] ['name'] [0]; rzeczywista nazwa pliku znajduje się w tablicy. pathinfo oceni tylko ciąg znaków. – foureight84

+8

@ foureight84: To tylko w przypadku, gdy masz załadowane pola o nazwie 'image []' ... – ThiefMaster

+2

Trochę zmodyfikowałem twój kod i stworzyłem funkcję, na wypadek gdyby ktoś chciał użyć funkcji. Oto kod: function getFileExtension ($ path) { $ ext = pathinfo ($ ścieżka, PATHINFO_EXTENSION); return $ ext; } –

12

Jak o

$ext = array_pop($userfile_extn); 
+7

że to ładny funkcja: P – Michelle

+2

Nie polecam tego. Liczą Państwo, że kolejność tablic będzie taka sama od lat. Jest to leniwe rozwiązanie, które najprawdopodobniej spowoduje problemy w przyszłości. –

25

Lepszym sposobem jest użycie strrpos + substr (szybciej niż eksplodować na to):

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

Jednak, aby sprawdzić typ pliku, używając mime_content_type jest lepszy sposób: http://www.php.net/manual/en/function.mime-content-type.php

+3

Lepsza niż 'pathinfo()'? Nie sądzę. – ThiefMaster

+1

Lepiej niż eksplodować ;-). Ale masz rację, pathinfo jest lepszym sposobem po włączeniu (niektóre z serwerów wzajemnie wyłączają tę funkcję ...). – Julien

+10

** Ważna uwaga **: To się nie powiedzie w przypadku ścieżek takich jak: '/ var/www/website.com/somefile'. – brianreavis

20

można spróbować z tego dla typu MIME

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

$image['mime'] zwróci typ MIME.

Ta funkcja nie wymaga biblioteki GD. Możesz znaleźć dokumentację here.

Powoduje zwrócenie typu MIME obrazu.

Niektóre osoby używają $_FILES["file"]["type"], ale nie są niezawodne, ponieważ zostały podane przez przeglądarkę, a nie przez PHP.

Możesz użyć pathinfo(), ponieważ ThiefMaster zasugerował pobranie rozszerzenia obrazu.

Najpierw upewnij się, że obraz został pomyślnie przesłany podczas programowania przed wykonaniem jakichkolwiek operacji na obrazie.

45

Będzie to działać także:

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

'Tylko zmienne powinny być przekazywane przez referencję', PHP Manual – dader

+1

To nie jest dobre podejście, ponieważ funkcja 'end' ma na celu przesunięcie wewnętrznego wskaźnika tablicy na koniec tablicy i powrót ten element. Problem polega na tym, że tablica jest przekazywana przez odniesienie, a ponieważ twoja tablica jest generowana dynamicznie, nie można jej przekazać przez odniesienie, stąd ostrzeżenie lub niepowodzenie, w zależności od twojej wersji PHP. – SteveK

+25

** Ważna uwaga **: Spowoduje to niepowodzenie w przypadku ścieżek takich jak: '/ var/www/website.com/somefile' (lepiej używać pathinfo). – brianreavis

Powiązane problemy