2010-10-12 103 views
0

我想知道是否有辦法找出給定的字符串是否是一個圖像,例如PHP獲得內容類型

$a = 'php';// output false 
$b = 'jpg';// output true 
$c = 'js'; // output false 
$d = 'png';// output : true 

我知道這可以通過檢查數組來完成,但我只是想知道是否有更好的解決方案。

+3

你在這裏混合了幾件事情。在您的標題中,您正在討論「內容類型」,但沒有內容。然後你想知道給定的字符串是否是一個圖像(這是可能的),但是,然後你切換到文件擴展名:)你能澄清你有什麼,以及你想找出什麼? – 2010-10-12 21:25:53

+0

也許mime類型會是一個更好的描述,我只是試圖儘可能好地描述它。 – Val 2010-10-12 21:42:30

回答

3

我發現這個:http://www.php.net/manual/en/function.finfo-file.php

<?php 
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
foreach (glob("*") as $filename) { 
    if substr(finfo_file($finfo, $filename), 0, 6) == "image" 
     printf("%s is an image file.", $filename); 
} 
finfo_close($finfo); 
?> 

此外,就像Pekka的評論所說,你在混淆你的標題和你的問題。如果你想找出一個特定文件的內容類型,你可以使用我提供的代碼片段。

否則,它只是聽起來像你想看看一個文件的擴展名是否表明它是一個圖像。然後,你會只想在預先定義的擴展的陣列來測試字符串的存在:

<?php 

$imageExtensions = array('jpg', 'gif', 'png', ....); 
$someFileExtension = 'jpg'; 

if in_array($someFileExtension, $imageExtensions) 
    printf("%s is an extension indicative of an image file.", $someFileExtension); 

?> 
+0

事實是要麼工作......我知道第二個選項......這是我應該去那個,因爲它可能比'finfo'選項更快(需要將它安裝爲php擴展名) 。 – Val 2010-10-12 21:40:19

+1

@Val爲了從用戶上傳中識別文件的類型,您應該_always_檢查MIME類型。在這種情況下檢查文件擴展名是一個安全問題,並且不可靠。 – MrWhite 2010-10-12 21:48:45