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

前言

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

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

方法一

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

/* Author @ Huoty

* Date @ 2015-11-24 16:59:26

* Brief @

*/

function isImage($filename)

{

$types = '.gif|.jpeg|.png|.bmp'; //定義檢查的圖片類型

if(file_exists($filename))

{

if (($info = @getimagesize($filename))

return 0;

$ext = image_type_to_extension($info['2']);

return stripos($types,$ext);

}

else

{

return false;

}

}

if(isImage('isimg.txt')!==false)

{

echo isImage('1.jpg');

echo '是圖片';

}

else

{

echo '不是圖片';

}

?>

方法二

讀取圖片的前 2 個字節,然后判斷是不是圖片:

/* 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['chars1'].$strInfo['chars2']);

$fileType = '';

if($typeCode == 255216 /*jpg*/ || $typeCode == 7173 /*gif*/ || $typeCode == 13780 /*png*/)

{

return $typeCode;

}

else

{

// echo '"僅允許上傳jpg/jpeg/gif/png格式的圖片!';

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

示例:

/* 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能有一定的幫助,如果有疑問大家可以留言交流。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260250.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

textedit怎么插入數據_還在手動插入Excel交叉空白行?這個小技巧10秒搞定

導讀:前幾天有同學在后臺提問,怎么快速在Excel中隔行插入一行或者多行空白行,其實在早期我們分享的小視頻中有利用過類似的小技巧來制作工資條,今天我們用它來插入空白行。文/ 芒種學院指北針Hello,大家好,…

python制作安裝包(setup.py)

1.制作setup.py from distutils.core import setupsetup(nameMyblog,version1.0,descriptionMy Blog Distribution Utilities,authorlujianxing,author_emaillujianxinglujianxing.com,urlhttp://blog.lujianxing.com,py_modules[foo] ) py_modules 定義 需要打包的模塊名 2.創…

[Ruby]$: 是什么意思?

ruby comes with a set of predefined variables$: default search path (array of paths)其他Ruby特殊變量: $! 最近一次的錯誤信息 $ 錯誤產生的位置 $_ gets最近讀的字符串 $. 解釋器最近讀的行數(line number) $& 最近一次與正則表達式匹配的字符串 $~ 作為…

rocketmq 啟動_016【windows版Rocketmq】小白學習Rocketmq單機部署

以前都是聽說MQ,或者在別人搭建好的基礎上去使用,沒有自己動手搭建過,就沒有更深入去理解。現在機會來啦.啦啦.啦啦啦......引用自己的CSDN文章href"https://blog.csdn.net/chenzhong2010/article/details/106699590或點擊左下角“閱讀原…

WPF WebBrowser 加載 html ,出現安全警告, 運行 腳本和 activeX 控件,

對于你的問題&#xff0c;只需要在你的HTML首行添加如下代碼即可隱藏安全提示條&#xff1a; <!-- saved from url(0014)about:internet --> 還有一個可選方案是使用Winform的WebBrowser控件&#xff0c;不需要更改HTML代碼&#xff0c;也不會出現安全提示&#xff0c;需…

資料下載資源網站

腳本之家&#xff1a;www.jb51.net 轉載于:https://www.cnblogs.com/dreammyle/p/3850250.html

php異步處理下載文件,異步處理Excel文件導入【流程圖+PHP示例】

面向管理后臺的系統中&#xff0c;經常會有文件導入的需求。常規的做法就是同步等待&#xff0c;但在業務關系復雜(多表數據校驗)、數據量較大的情況下&#xff0c;管理人員只能等結果&#xff0c;也可能會等到超時。使用異步的話&#xff0c;將導入數據的功能與后端接口解耦&a…

tcp client.cs

public class stateobject { public socket worksocket null; public const int Buffer_Size2048; public byte[] buffer new byte[Buffer_size]; public stringbuilder sb new stringbuilder(); } 轉載于:https://www.cnblogs.com/neumik/archive/2012/11/15/2771024.ht…

[python] 之 常用內建函數

本博客僅列舉了一些常用的內建函數&#xff0c;歡迎大家補充&#xff01; 1. dir([obj]) 顯示對象的屬性&#xff0c;若果沒有提供參數&#xff0c;則顯示全局變量的名字 2. help([obj]) 以一種整齊美觀的方式&#xff0c;顯示對象的文檔字符串&#xff1b;如果沒有提供任何參數…

python查詢模塊所有類_python 小技巧(import模塊、查詢類繼承關系、安裝包)

作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01;在這里列舉一些我使用Python時積累的小技巧。這些技巧是我在使用Python過程中經常使用的。之前很零碎的記在筆記本中&#xff0c;現在整理出來&am…

4.2 access函數實例

int access(const char *filenpath, int mode); 功 能: 確定文件或文件夾的訪問權限。 mode&#xff0c;要判斷的模式在頭文件unistd.h中的預定義如下&#xff1a;#define R_OK 4 /* Test for read permission. */#define W_OK 2 /* Test for write permission. */#define X_OK…

php 簡易 blog,PHP實現簡易blog的制作

最近&#xff0c;有時間看了點PHP的代碼。參考PHP100教程做了簡單的blog&#xff0c;這里面簡單的記錄一下。首先是集成環境&#xff0c;這里選用的WAMP&#xff1a;http://www.wampserver.com/en/首先通過&#xff0c;phpMyAdmin創建一張blog表。純界面操作&#xff0c;過程比…

jquery 事件對象屬性小結

jquery 事件對象屬性小結 使用事件自然少不了事件對象. 因為不同瀏覽器之間事件對象的獲取, 以及事件對象的屬性都有差異, 導致我們很難跨瀏覽器使用事件對象. jQuery中統一了事件對象, 當綁定事件處理函數時, 會將jQuery格式化后的事件對象作為唯一參數傳入: $("#testDiv…

ABP文檔 - Mvc 視圖

文檔目錄 本節內容&#xff1a; 簡介AbpWebViewPage 基類簡介 ABP通過nuget包Abp.Web.Mvc集成到Mvc視圖里&#xff0c;你可以像往常那樣創建常規的視圖。 AbpWebViewPage 基類 ABP也提供了AbpWebViewPage&#xff0c;它定義了一些有用的屬性和方法&#xff0c;如果你使用啟動模…

ThinkPad L440 FN鍵設置

剛入手了ThinkPad L440&#xff0c;用起來相當不錯&#xff0c;嘿嘿&#xff01; L440系統默認&#xff08;F1-F12&#xff09;鍵盤為系統默認功能鍵&#xff0c;主要控制音量、亮度、連接投影儀等。 因為編寫程序需要調試&#xff0c;經常用到F10&#xff0c;F11等鍵&#xff…

離散數學反對稱關系_《離散數學》學習記錄 - 集合論

來源&#xff1a;北京大學《離散數學》公開課地址&#xff1a;https://www.bilibili.com/video/av18896337/?p122.1 有序對和卡氏積有序對<a,b>&#xff1a;有順序&#xff0c;類似于數組&#xff0c;可以用集合定義。性質&#xff1a;有序對內元素對應相等卡氏積AB&…

收集的博客列表

前端&#xff1a; ———————————————————— 宅居 - 裸: http://otakustay.com/ 轉載于:https://www.cnblogs.com/ccdc/archive/2012/11/21/2780879.html

php創建表并插入數據,php數據庫操作-創建庫和表以及插入數據

以上我們正確連接到了mysql數據庫&#xff0c;本文將進一步創建數據庫&#xff0c;表&#xff0c;在表中填充數據。大家知道連接上數據庫才能進行操作&#xff0c;同樣的代碼搬過來/** 數據庫操作*(創建數據庫&#xff0c;表&#xff0c;插入數據&#xff0c;插入多條數據)** T…

C#配置及使用log4net

首先從官方網站http://logging.apache.org/log4net/下載最近版本的log4net組件。在程序中添加對log4net.dll的引用&#xff0c;就可以在程序中使用了。 下一步&#xff0c;編寫配置文件&#xff0c;內容如下 <?xml version"1.0" encoding"utf-8" ?>…

ORACLE EBS常用表及查詢語句(最終整理版)

建議去看參考二 參考一&#xff1a; call fnd_global.APPS_INITIALIZE(1318,50583,401) select fnd_profile.VALUE(ORG_ID) FROM DUAL select * from hr_operating_units hou where hou.organization_id204 --fn…