在PHP中是否有任何標準函數只能從相應的文件路徑中找到圖像的擴展名?如何在PHP中找到路徑中圖片的擴展名?
例如,如果我的圖像路徑類似'/testdir/dir2/image.gif',那麼函數應該返回'gif'。
感謝
在PHP中是否有任何標準函數只能從相應的文件路徑中找到圖像的擴展名?如何在PHP中找到路徑中圖片的擴展名?
例如,如果我的圖像路徑類似'/testdir/dir2/image.gif',那麼函數應該返回'gif'。
感謝
$ext = pathinfo('/testdir/dir2/image.gif', PATHINFO_EXTENSION); //$ext will be gif
更新:我看到很多downvotes的。我的方法有什麼問題?請告訴我。
基本字符串函數strrpos()
和substr()
可以爲您做到這一點。以及許多其他奇特的方式。
這是一個問題的直接答案,其中OP可能需要的是徹底的文件類型檢查,而不僅僅是擴展。按照你的邏輯,這應該是-1。只是說';) – 2010-07-05 12:09:56
@皮卡「找到一個圖像的擴展名」。聽起來對我來說毫不含糊 – Robus 2010-07-05 12:13:42
@Robus是的。我只是在嘲笑@Col,因爲當明確的要求實際上不是OP真正需要達到最佳解決方案時,他已經低估了我對這種明確要求的直接答案。他的反饋總是有道理的(我非常重視@Col的知識和輸入,PHP標籤需要它),但他總是非常直接地關注它,這就是爲什麼當他犯同樣的錯誤時我會變成一個雞巴:)我想要指出的是,這個答案已經收到的downvote不是來自我,但。 – 2010-07-05 12:16:52
As Col. Shrapnel提到;有相當多的方式
$path = '/some/where/img.gif';
$path = explode('.',$path);
$path = end($path);
謝謝,這段代碼看起來很酷,但正如我上面所說的,我只是想使用一個直接的標準函數,如'pathinfo'。 – Siva 2010-07-06 04:56:55
它通常是更可取(不擴展,而是由它的內容),以檢測實際圖像類型。爲此,請使用getimagesize()
。
這應該是正確答案。名稱的擴展可以是任何東西。 – Nishanthan 2014-06-29 07:51:05
我建議您通過GD/ImageMagick檢查運行任何上傳/鏈接的圖像並重新保存,以防止圖像中隱藏任何惡意代碼。這也可以讓你保存所有具有相同擴展名的圖像,使你更容易。
這是一個很好的建議,儘管它與問題無關。不值得讚賞。但是,將JPG轉換爲GIF,反之亦然永遠不會產生好的結果。 – 2010-07-05 12:18:55
謝謝。我知道這與問題並不完全相關,但我想如果他接受上傳的圖片,最好在發生不良事件之前吐出這些信息。您也可以首先檢查擴展名,查看給定的結果是否存在於允許的擴展數組中,然後將其保存爲與通過GD/ImageMagick檢查完全相同的擴展名。如果找不到結果,也要保留默認值(比如說PNG)。 – eklundchristopher 2010-07-05 13:01:16
謝謝,這是一個很好的建議。 – Siva 2010-07-06 05:19:30
我有問題,第一個答案和URL錨前。 google.com/image.jpg#anchor
更好的解決方案
$filename_from_url = parse_url($url);
$ext = pathinfo($filename_from_url['path'], PATHINFO_EXTENSION);
我建議你完美的方式
$file_path = '/some/where/img.gif';
$info = new SplFileInfo($file_path);
$file_extension = $info->getExtension();
var_dump($file_extension);
我希望這會幫助你。
乾杯!
Mudassar阿里
我認爲最正確的方法是使用回聲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)];
}
即使該網址用於對服務器上的圖像進行編碼,這種方式也能正常工作 - 幹得好。 – pgee70 2017-03-18 06:19:36
我想用最簡單的方式strrpos()
和substr()
方法
$path = "/testdir/dir2/image.gif";
$ext = substr($path, strrpos($path, '.')+1);
echo $ext; // output will be gif
更多的答案爲Another Question與此相關問題
這是太過分了。 – RobertPitt 2010-07-05 12:12:41
我有一個'hello.jpg',但我將它重命名爲'hello.gif'並上傳它,以便獲得擴展名,但不是正確的類型。佩卡的問題是國際海事組織最好的一個 – DrColossos 2010-07-05 12:46:40
原始問題只是要求找到擴展名。沒有安全檢查或其他需求。 – fabrik 2010-07-05 12:51:10