php判斷是否是文件_PHP判斷文件是否為圖片文件的方法總結

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

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

方法一:利用getimagesize 函數獲取圖片信息,然后進行判斷<?php # Script -- isimg.php

/* 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 個字節,然后判斷是不是圖片<?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['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能有一定的幫助,如果有疑問大家可以留言交流。最后是一段遍歷文件的代碼<?php

function read_all ($dir){

if(!is_dir($dir)) return false;

$handle = opendir($dir);

if($handle){

while(($fl = readdir($handle)) !== false){

$temp = $dir.DIRECTORY_SEPARATOR.$fl;

//如果不加 ?$fl!='.' && $fl != '..' ?則會造成把$dir的父級目錄也讀取出來

if(!is_dir($temp) && $fl!='.' && $fl != '..'){

echo '文件:'.$temp.'
';

echo "
";

}

}

}

}

read_all('D:\phpstudy\WWW\table');

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

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

相關文章

盤點大廠的那些開源項目 - 滴滴出行

滴滴出行是涵蓋出租車、 專車、滴滴快車、 順風車、代駕及大巴、貨運等多項業務在內的一站式出行平臺。Nightingale 夜鶯分類&#xff1a;監控系統夜鶯是一套分布式高可用的運維監控系統&#xff0c;最大的特點是混合云支持&#xff0c;既可以支持傳統物理機虛擬機的場景&#…

oracle 基本異常的練習及各個錯誤碼

DECLAREv_deptno emp.deptno%TYPE :&deptno;v_sal emp.sal%TYPE;v_empno emp.empno%TYPE; BEGINSELECT sal INTO v_sal FROM emp WHERE deptno v_deptno;IF v_sal<1500 THEN UPDATE emp SET salsal100 WHERE empno v_empno; DBMS_OUTPUT.PUT_LINE(編碼為||v_empno…

阿里巴巴發布智能運維故障管理AI+生態計劃

摘要&#xff1a; 為響應馬老師“家國情懷&#xff0c;世界擔當”的號召&#xff0c;開放“AI”生態計劃&#xff0c;將讓集團內部服務過程中積累下的技術與經驗更好地回饋社會&#xff0c;任何企業或合作伙伴均可以簡單方便的接入阿里巴巴智能故障管理平臺&#xff0c;通過對接…

tomcat 插件

1. http://www.eclipsetotale.com/tomcatPlugin.html

PHP使用for循環打出星號表格,console - JavaScript中,使用for循環輸出如下圖形(等腰三角形,和平行四邊形)?原理是啥?...

小皮2017-04-11 13:13:591樓以下代碼用了ES6,取名比較隨意s就是space,空格的意思,n是要總次數,第二個參數是輸出的圖形第一個很簡單,累加就好了//ES6function first(n,print "*"){for(let i 0; i < n ;i)console.log(i > 0 ? print.repeat(i 1) : print);}…

k8s 讀書筆記 - Pod 的升級和回滾

Pod 升級可能面臨的問題當集群中的某個服務需要升級時&#xff0c;我們需要停止目前與該服務相關的所有 Pod&#xff0c;然后下載新版本鏡像并創建新的 Pod。但是當集群規模比較龐大時&#xff0c;那么這個工作就會變成一個挑戰&#xff0c;而且先全部停止然后再逐步升級的方式…

WeakHashMap和Java引用類型詳細解析

WeakHashMap是種弱引用的HashMap&#xff0c;這是說&#xff0c;WeakHashMap里的key值如果沒有外部強引用&#xff0c;在垃圾回收之后&#xff0c;WeakHashMap的對應內容也會被移除掉。 1.1 Java的引用類型 在講解WeakHashMap之前&#xff0c;我們需要了解Java中引用的相關類&…

KVOController代碼分析和踩坑

KVOController是FaceBook的一個開源庫&#xff0c;提供了方便的姿勢讓你去使用KVO。 github.com/facebook/KV… 大概的用法如下&#xff1a; [self.KVOController observe:target keyPath:keyPath options:NSKeyValueObservingOptionNew block:^(id observer, id object, NSDic…

java中compareto方法詳解,Java中compareTo()方法的詳解

例如&#xff1a;String a "abc";String b "abc";System.out.println("num "a.compareTo(b));a是String類型的字符串,它的比較用compareTo方法,它從第一位開始比較, 如果遇到不同的字符,則馬上返回這兩個字符的ascii值差值.返回值是int類型1.…

《ASP.NET Core 6框架揭秘》實例演示[21]:如何承載你的后臺服務

借助 .NET提供的服務承載&#xff08;Hosting&#xff09;系統&#xff0c;我們可以將一個或者多個長時間運行的后臺服務寄宿或者承載我們創建的應用中。任何需要在后臺長時間運行的操作都可以定義成標準化的服務并利用該系統來承載&#xff0c;ASP.NET Core應用最終也體現為這…

使用DBCA工具創建自己的數據庫

ylbtech-Oracle&#xff1a;使用DBCA工具創建自己的數據庫 DBCA創建數據庫 默認安裝的Oracle數據庫一般不能滿足實際應用的需求&#xff0c;例如數據庫名稱、數據庫塊的大小等都需要修改&#xff0c;那么我們應該自己創建一個滿足實際應用系統需要的Oracle數據實例&#xff08;…

免去架構算法調優,如何讓你的系統風馳電掣?|圖說

通用計算場景下的云服務器領域從來都是兵家必爭之地&#xff0c;價格戰曾打了一波又一波&#xff0c;可用戶痛點卻依然是“頑疾”。由于采用的基礎硬件、架構和調優技術千差萬別&#xff0c;類似配置的云服務器之間存有較大的性能差異。 但市面上五花八門的云服務器不絕于耳&am…

PHP URL的處理函數,php中url處理函數總結

在php中url處理函數有很多,如有:http_build_query,compact,urldecode、urlencode,parse_url,rawurldecode等等函數。http_build_query(PHP 5) http_build_query — 生成 URL-encode 之后的請求字符串,實例代碼如下:$dataarray(foo>bar,baz>boom,cow>milk,php>hyper…

記一次 .NET 某數控機床控制程序 卡死分析

一&#xff1a;背景 1. 講故事前段時間有位朋友微信上找到我&#xff0c;說它的程序出現了卡死&#xff0c;讓我幫忙看下是怎么回事&#xff1f; 說來也奇怪&#xff0c;那段時間求助卡死類的dump特別多&#xff0c;被迫訓練了一下對這類問題的洞察力 &#x1f604;&#x1f60…

TODO-MVP-Loaders源碼體驗

大家好&#xff0c;我是蒼王。以下是我這個系列的相關文章&#xff0c;有興趣可以參考一下&#xff0c;可以給個喜歡或者關注我的文章。[Android]如何做一個崩潰率少于千分之三噶應用app--章節列表相信有關注我的人&#xff0c;都會看過我上一編介紹的Todo-mvp源碼體驗&#xf…

.NET Framework 4.8預覽

雖然人們的大多數關注點都在.NET Core上&#xff0c;但經典的.NET Framework仍然在開發中。.NET 4.8的“早期訪問”預覽版表明了微軟最關心的領域包括高DIP、可訪問性和并發性。\\.NET 4.8預計將于2019年發布。目前的預期是&#xff0c;它將在稍后的Windows 10 build 1607上運行…

java項目商品的排名,分析了5萬個開源項目,得出的排名前16的Java工具類

原文:https://www.jianshu.com/p/9e937d178203在Java中&#xff0c;工具類定義了一組公共方法&#xff0c;這篇文章將介紹Java中使用最頻繁及最通用的Java工具類。以下工具類、方法按使用流行度排名&#xff0c;參考數據來源于Github上隨機選取的5萬個開源項目源碼。一. org.ap…

IDEA遠程調試

參考鏈接&#xff1a;http://www.cnblogs.com/wy2325/p/5600232.html 調試端口是catlina.sh中的 JAVA_OPTS-agentlib:jdwptransportdt_socket,servery,suspendn,address5023 -Xms1024m -Xmx3072m -XX:MaxNewSize128m #!/bin/sh 配置的端口&#xff0c;是address ******&#…

ASP.NETCoreWeb開發之OptionsPattern

這節我們來講一下&#xff0c;在ASP.NET Core Web開發中&#xff0c;讀取配置文件信息的新方式&#xff1a;Options。前言 /Options在ASP.NET Web框架中&#xff0c;我們讀取配置文件中的數據&#xff0c;在不使用第三方框架的情況下&#xff0c;可能需要通過ConfigurationMana…

SpringMVC執行流程圖

2019獨角獸企業重金招聘Python工程師標準>>> 轉載于:https://my.oschina.net/u/2607324/blog/827946