2013-03-22 33 views
6

我正在使用file_get_contents()從遠程服務器上拉出一些圖像,並且我希望在進一步處理之前確認結果字符串是否爲JPG/PNG圖像,例如在本地保存並創建拇指。PHP:如何檢查file_get_contents()的結果字符串是否爲JPG圖像?

$string = file_get_contents($url); 

你會怎麼做?

+0

這是怎麼回事? http://stackoverflow.com/questions/1141227/php-checking-if-the-images-is-jpg – George 2013-03-22 14:11:05

回答

3

您可以使用getimagesize()

$url = 'http://www.geenstijl.nl/archives/images/HassVivaCatFight.jpg'; 
$file = file_get_contents($url); 
$tmpfname = tempnam("/tmp", "FOO"); 
$handle = fopen($tmpfname, "w"); 
fwrite($handle, $file); 

$size = getimagesize($tmpfname); 
if(($size['mime'] == 'image/png') || ($size['mime'] == 'image/jpeg')){ 
    //do something with the $file 
    echo 'yes an jpeg of png'; 
} 
else{ 
    echo 'Not an jpeg of png ' . $tmpfname .' '. $size['mime']; 
    fclose($handle); 
} 

我只是測試它,所以它的工作原理。您需要創建一個臨時文件,因爲圖像功能可以與本地數據一起工作,並且它們只接受本地目錄路徑,如'C:\ wamp2 \ www \ temp \ image.png'

如果您不使用fclose($handle); PHP會自動腳本結束後刪除tmp。

2

您可以使用

exif_imagetype()

評估您的文件。請檢查php手冊。

編輯:

請注意,PHP_EXIF必須啓用。你可以閱讀更多關於它here

+0

PS:PHP_EXIF擴展必須安裝並啓用 – HamZa 2013-03-22 14:11:37

+1

@HamZaDzCyber​​DeV感謝您的更正,我編輯它,如你所說。 – 2013-03-22 14:14:27

2

我從這answer得到一個JPG圖像的起始位。所以基本上你可以做的是檢查起始位是否相等:

$url = 'http://i.stack.imgur.com/Jh3mC.jpg?s=128&g=1'; 
$jpg = file_get_contents($url); 

if(substr($jpg,0,3) === "\xFF\xD8\xFF"){ 
    echo "It's a jpg !"; 
} 
+1

這是IMO此問題的最佳答案,因爲它不需要臨時文件策略或已安裝的擴展。 – jwhazel 2017-03-01 18:29:48

相關問題