搜尋
首頁後端開發PHP問題php如何判斷檔案是不是圖片

php判斷檔案是不是圖片的方法:1、利用getimagesize函數獲取圖片信息,然後進行判斷;2、讀取圖片的前2個字節,然後進行判斷;3、利用exif_imagetype函數實現判斷。

php如何判斷檔案是不是圖片

推薦:《php影片教學

用PHP判斷檔案是否為圖片的方法

最近在工作中遇到一個需要,要判斷一個文件是否為圖片的功能,通過查找相關的資料找到了幾種方法,包括利用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;;
}
?>

方法二

讀取圖片的前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 "不是图片";
}
?>

方法三

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

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

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 # Script -- isimg3.php
 
/* Author @ Huoty
 * Date @ 2015-11-25 16:53:04
 * Brief @ 
 */
 
$mimetype = exif_imagetype("1.jpg");
if ($mimetype == IMAGETYPE_GIF || $mimetype == IMAGETYPE_JPEG || $mimetype == IMAGETYPE_PNG || $mimetype == IMAGETYPE_BMP)
{
 echo "是图片";
}
?>

以上是php如何判斷檔案是不是圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。