2010-07-05 80 views

回答

41
$ext = pathinfo('/testdir/dir2/image.gif', PATHINFO_EXTENSION); //$ext will be gif 

更新:我看到很多downvotes的。我的方法有什麼問題?請告訴我。

+0

這是太過分了。 – RobertPitt 2010-07-05 12:12:41

+1

我有一個'hello.jpg',但我將它重命名爲'hello.gif'並上傳它,以便獲得擴展名,但不是正確的類型。佩卡的問題是國際海事組織最好的一個 – DrColossos 2010-07-05 12:46:40

+2

原始問題只是要求找到擴展名。沒有安全檢查或其他需求。 – fabrik 2010-07-05 12:51:10

-2

基本字符串函數strrpos()substr()可以爲您做到這一點。以及許多其他奇特的方式。

+0

這是一個問題的直接答案,其中OP可能需要的是徹底的文件類型檢查,而不僅僅是擴展。按照你的邏輯,這應該是-1。只是說';) – 2010-07-05 12:09:56

+0

@皮卡「找到一個圖像的擴展名」。聽起來對我來說毫不含糊 – Robus 2010-07-05 12:13:42

+1

@Robus是的。我只是在嘲笑@Col,因爲當明確的要求實際上不是OP真正需要達到最佳解決方案時,他已經低估了我對這種明確要求的直接答案。他的反饋總是有道理的(我非常重視@Col的知識和輸入,PHP標籤需要它),但他總是非常直接地關注它,這就是爲什麼當他犯同樣的錯誤時我會變成一個雞巴:)我想要指出的是,這個答案已經收到的downvote不是來自我,但。 – 2010-07-05 12:16:52

1

As Col. Shrapnel提到;有相當多的方式

$path = '/some/where/img.gif'; 
$path = explode('.',$path); 
$path = end($path); 
+0

謝謝,這段代碼看起來很酷,但正如我上面所說的,我只是想使用一個直接的標準函數,如'pathinfo'。 – Siva 2010-07-06 04:56:55

14

它通常是更可取(不擴展,而是由它的內容),以檢測實際圖像類型。爲此,請使用getimagesize()

+1

這應該是正確答案。名稱的擴展可以是任何東西。 – Nishanthan 2014-06-29 07:51:05

0

我建議您通過GD/ImageMagick檢查運行任何上傳/鏈接的圖像並重新保存,以防止圖像中隱藏任何惡意代碼。這也可以讓你保存所有具有相同擴展名的圖像,使你更容易。

http://www.php.net/imagepng
http://www.php.net/imagegif

+0

這是一個很好的建議,儘管它與問題無關。不值得讚賞。但是,將JPG轉換爲GIF,反之亦然永遠不會產生好的結果。 – 2010-07-05 12:18:55

+1

謝謝。我知道這與問題並不完全相關,但我想如果他接受上傳的圖片,最好在發生不良事件之前吐出這些信息。您也可以首先檢查擴展名,查看給定的結果是否存在於允許的擴展數組中,然後將其保存爲與通過GD/ImageMagick檢查完全相同的擴展名。如果找不到結果,也要保留默認值(比如說PNG)。 – eklundchristopher 2010-07-05 13:01:16

+0

謝謝,這是一個很好的建議。 – Siva 2010-07-06 05:19:30

5

我有問題,第一個答案和URL錨前。 google.com/image.jpg#anchor

更好的解決方案

$filename_from_url = parse_url($url); 
$ext = pathinfo($filename_from_url['path'], PATHINFO_EXTENSION); 
0

我建議你完美的方式

$file_path = '/some/where/img.gif'; 
$info = new SplFileInfo($file_path); 
$file_extension = $info->getExtension(); 
var_dump($file_extension); 

這裏更詳細The SplFileInfo class

我希望這會幫助你。

乾杯!

Mudassar阿里

1

我認爲最正確的方法是使用回聲exif_imagetype功能:

exif_imagetype("/testdir/dir2/image.gif"); 

    function get_image_type($image_path){ 

     $extension = array(IMAGETYPE_GIF => "gif", 
     IMAGETYPE_JPEG => "jpeg", 
     IMAGETYPE_PNG => "png", 
     IMAGETYPE_SWF => "swf", 
     IMAGETYPE_PSD => "psd", 
     IMAGETYPE_BMP => "bmp", 
     IMAGETYPE_TIFF_II => "tiff", 
     IMAGETYPE_TIFF_MM => "tiff", 
     IMAGETYPE_JPC => "jpc", 
     IMAGETYPE_JP2 => "jp2", 
     IMAGETYPE_JPX => "jpx", 
     IMAGETYPE_JB2 => "jb2", 
     IMAGETYPE_SWC => "swc", 
     IMAGETYPE_IFF => "iff", 
     IMAGETYPE_WBMP => "wbmp", 
     IMAGETYPE_XBM => "xbm", 
     IMAGETYPE_ICO => "ico"); 

     return $extension[exif_imagetype($image_path)]; 
} 
+0

即使該網址用於對服務器上的圖像進行編碼,這種方式也能正常工作 - 幹得好。 – pgee70 2017-03-18 06:19:36

0

我想用最簡單的方式strrpos()substr()方法

$path = "/testdir/dir2/image.gif"; 
$ext = substr($path, strrpos($path, '.')+1); 
echo $ext; // output will be gif 

更多的答案爲Another Question與此相關問題

相關問題