2013-04-24 28 views
1

有沒有辦法在不寫擴展名的情況下獲得圖像的擴展名?如何使用PHP獲取圖像的擴展?

例如在下面的代碼中,我必須編寫image.GIF來知道它是GIF文件。

pathinfo('/testdir/dir2/image.gif', PATHINFO_EXTENSION); 
+0

所以你想檢測圖像的*文件格式* – Jon 2013-04-24 11:26:54

+0

所以你知道這個名字,但你不知道文件夾中的擴展名? – HamZa 2013-04-24 11:27:17

+0

是喬恩,這正是我想弄明白的 – user2310422 2013-04-24 11:29:57

回答

-1
$ext = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION); 

擺脫我的「自家釀製的代碼」,進行了我的一個downvote出於某種原因。

上面的代碼可能會幫助更多?

大家都對,PHP有它自己的設備,並且pathinfo應該可以正常工作。

相關信息:

function get_file_extension($file_name) { 
    return substr(strrchr($file_name,'.'),1); 
} 

可以作爲某種形式的替代。不知道要讀取的文件的確切性質,很難給出確切的答案。

+0

不,因爲a)它不會改變任何東西,b)它會用一個自制軟件替換一個完美的內置實現(爲什麼?) – Jon 2013-04-24 11:27:39

+0

因爲即使這是一種家庭釀造溶劑,即使我以某種方式 - 重新發明輪子。它仍然可以解決類似或類似的問題。沒有必要在downvote,因爲你不覺得它對你有用。給出的代碼對其他人仍然有用,並且應該如此顯示。 – 2013-04-24 11:49:43

+0

我很抱歉,但我不認爲複製內置的功能是有用的。事實上,我認爲這是一種損害,因爲它a)較慢,b)未經測試和c)不必要的代碼 - 因此是不好的做法,我們應該全部引導人們遠離。無論如何,這要取決於你*證明這個代碼提供了一些新的東西,而不是由我或任何其他人來證明否定。 – Jon 2013-04-24 11:54:13

1

我一直使用此功能,找出一個文件MIME類型:

function validateMimeType($filePath, $extensions) { 
    $finfo  = finfo_open(FILEINFO_MIME); 
    $mimeType = finfo_file($finfo, $filePath); 

    finfo_close($finfo); 

    return preg_match("/$extensions/i", $mimeType); 
} 

其中$擴展爲一個字符串,在這裏你定義你想要的格式,如:

$extension = "jpg|jpeg|png"; 
+0

如果您想驗證來自不可信來源的文件是否真的是圖像,則使用此功能。如果您只想查找擴展名,請檢查MIME類型。 – fje 2013-04-24 11:38:39

0

在交換機中使用exif_imagetype($ file_name)時,如果值的情況下會得到您的名字中沒有它的分機。

http://php.net/manual/en/function.exif-imagetype.php

$type = false; 
switch(exif_imagetype($file_name)) { 
    case 1: 
     $type = 'gif'; 
    break; 
    case 2: 
     $type = 'jpeg'; 
    break; 
    case 3: 
     $type = 'png'; 
    break; 
} 
0

基本上沒有。

如果有2個圖像image.gif和image.jpg,那麼您會得到什麼結果?您想獲得關於文件的信息,因此您必須使用其名稱來調用該文件。延伸是名字的一部分。

你可以讀取目錄的所有內容,並過濾掉你想要的文件。

$dir = "/testdir/dir2"; 
foreach(scandir($dir) as $file) 
{ 
    if(is_dir($file) == false && $file != ".." && $file != ".") 
    { 
    var_dump(pathinfo(dir . '/' . $file, PATHINFO_EXTENSION)); 
    } 
} 

Pathinfo是爲了簡化將文件名拆分爲擴展名和名稱而製作的。這並不是要確定文件類型,如果知道硬編碼的名稱,爲什麼還要將名稱分成若干部分?