利用PHP判斷文件是否為圖片的方法總結

迷茫
發布: 2023-03-05 10:24:01
原創
4062 人瀏覽過

要判斷一個檔案是否為圖片的功能,透過尋找相關的資料找到了幾種方法,包括利用getimagesize函數獲取圖片信息,然後進行判斷或讀取圖片的前2個字節等方法。下面來一起看看詳細的介紹吧,需要的朋友可以參考下。

前言

在網頁設計中,如果需要圖片,我們通常拿到的是一個圖片的檔案名稱。僅僅通過文件名是無法判斷該文件是否是一個圖片文件的。或許有的人以為透過後綴名就可以判斷,別忘了文件的後綴名是可以隨便改動的。更何況,在 Linux 系統下是不以後綴來區分檔案格式的。如果天真的以為透過後綴名就能區分圖片,那可能出現錯誤時,你連錯誤在哪裡都不知道。例如有一個討厭的人把一個文字檔改成 background.jpg,然後給你用,你可能只會簡單的認為這個圖片被損壞了,萬萬沒想到它竟然只是一個文字檔。

為了避免一些不必要的問題出現,在拿到一個圖片時,應該正確的判斷該文件是否真的一個圖片文件。這裡總結了三種判斷方法,有需要的朋友們可以一起來看看。

方法一

利用getimagesize 函數獲取圖片信息,然後進行判斷:

<?php # Script -- isimg.php
 
/* Author @ Huoty
 * Date @ 2015-11-24 16:59:26
 * Brief @ 
 */
 
function isImage($filename)
{
 $types = &#39;.gif|.jpeg|.png|.bmp&#39;; //定义检查的图片类型
 if(file_exists($filename))
 {
  if (($info = @getimagesize($filename))
   return 0;
   
  $ext = image_type_to_extension($info[&#39;2&#39;]);
  return stripos($types,$ext);
 }
 else
 {
  return false;
 }
}
  
if(isImage(&#39;isimg.txt&#39;)!==false)
{
 echo isImage(&#39;1.jpg&#39;);
 echo &#39;是图片&#39;;
}
else
{
 echo &#39;不是图片&#39;;
}
?>
登入後複製

方法二

方法三

最後一種方法是利用exif_imagetype 函數,該函數用於判斷一個圖像的類型,而採用這種方法更加簡單。讀取一個圖像的第一個位元組並檢查其簽名。 如果發現了適當的簽章則傳回對應的常數,否則傳回 FALSE。傳回值和 getimagesize() 傳回的陣列中的索引 2 的值是一樣的,但函數快得多。

這個函數的回傳值常數定義如下:

<?php # Script -- isimg2.php
 
/* Author @ Huoty
 * Date @ 2015-11-25 16:42:38
 * Brief @ 
 */
 
//判断上传的是不是图片 
function isImg($fileName)
{ 
 $file  = fopen($fileName, "rb"); 
 $bin  = fread($file, 2); // 只读2字节 
 
 fclose($file); 
 $strInfo = @unpack("C2chars", $bin); 
 $typeCode = intval($strInfo[&#39;chars1&#39;].$strInfo[&#39;chars2&#39;]); 
 $fileType = &#39;&#39;; 
 
 if($typeCode == 255216 /*jpg*/ || $typeCode == 7173 /*gif*/ || $typeCode == 13780 /*png*/) 
 { 
  return $typeCode; 
 }
 else
 { 
  // echo &#39;"仅允许上传jpg/jpeg/gif/png格式的图片!&#39;; 
  return false; 
 } 
} 
 
if (isImg("1.jpg"))
{
 echo "是图片";
}
else
{
 echo "不是图片";
}
?>
登入後複製
1 IMAGETYPE_GIF
2 IMAGETYPE_JPEG
3 IMAGETYPE_PNG
4 IMAGETYPE_SWF
5 IMAGETYPE_PSD
6 IMAGETYPE_BMP
7 IMAGETYPE_TIFF_II(Intel 字节顺序)
8 IMAGETYPE_TIFF_MM(Motorola 字节顺序)
9 IMAGETYPE_JPC
10 IMAGETYPE_JP2
11 IMAGETYPE_JPX
12 IMAGETYPE_JB2
13 IMAGETYPE_SWC
14 IMAGETYPE_IFF
15 IMAGETYPE_WBMP
16 IMAGETYPE_XBM
登入後複製

總結

以上就是關於PHP判斷文件是否為圖片的全部內容了,希望本文的內容對大家學習或使用PHP能有一定的幫助,如果有疑問大家可以留言交流。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!