利用PHP实现智能文件类型检测的实现代码_PHP
通常我们想严格限制文件类型的时候,可以简单地用$_FILES['myFile']['type'] 取得文件的 MIME类型然后来检测它是否是合法的类型。
或者我们可以取文件名的最后几个字符来获取文件后缀,不幸的是,这些方法并不足够,可以很容易地改变文件的扩展名绕过这个限制。此外,MIME类型信息是由浏览器发送的,而且,对于大多数浏览器,即使不是全部,是根据文件的扩展名的来给出MIME类型信息的!因此,MIME类型,就像扩展名一样,可以很容易地欺骗。
使用“魔术字节”
确定文件类型的最佳方法是通过检查文件的前几个字节 – 称为“魔字节”。魔术字节本质上是文件头中不同长度在2到40个字节之间的,或在文件末尾的签名。有上百个类型的文件,他们中相当多的文件类型有好几个文件签名与它们相关联。在这里你可以看到一个文件签名列表。
偷懒的办法是使用fileinfo扩展,PHP 5.3.0 默认是启用的(根据官方MANUAL),如果没有启用,你可以自己启用
如在windows下面:
复制代码 代码如下:
extension=php_fileinfo.dll
linux下面:
复制代码 代码如下:
extension=fileinfo.so
#如不能正常工作,再加上下面这条
#mime_magic.magicfile=/usr/share/file/magic
windows下面如不能正常工作:
可参考:http://www.php.net/manual/en/fileinfo.installation.php#82570
下载file-5.03-bin.zip ,解压出来,在其中的share目录有magic.mgc 、magic 两个文件。
然后添加一个名为MAGIC的系统环境变量指向magic 文件。如D:\software\PHP\extras\misc\magic
复制代码 代码如下:
function getFileMimeType($file) {
$buffer = file_get_contents($file);
$finfo = new finfo(FILEINFO_MIME_TYPE);
return $finfo->buffer($buffer);
}
$mime_type = getFileMimeType($file);
switch($mime_type) {
case "image/jpeg":
// your actions go here...
}
处理图像上传
如果你打算只允许图像上传,那么你可以使用内置的getimagesize()函数,以确保用户实际上是上传一个有效的图像文件。如果该文件不是有效的图像文件,这个函数返回false。
复制代码 代码如下:
// 假设file input 域的name 属性为myfile
$tempFile = $_FILES['myFile']['tmp_name']; // path of the temp file created by PHP during upload
$imginfo_array = getimagesize($tempFile); // returns a false if not a valid image file
if ($imginfo_array !== false) {
$mime_type = $imginfo_array['mime'];
switch($mime_type) {
case "image/jpeg":
// your actions go here...
}
}
else {
echo "This is not a valid image file";
}
手动读取和解释“魔法字节”
如果由于某种原因,你不能安装FileInfo扩展,那么你仍然可以手动确定,通过读取文件的前几个字节,并比较它们与已知的魔法与特定文件类型相关联的字节的文件类型。这个过程肯定少许的试验和错误,因为还有一种可能,有少数非法的魔法字节与合法文件格式关联了。
然而这不是不可能的,几年前,我被要求做一个只允许真正的 mp3 文件上传的脚本文件,并且,当时我们不能用 Fileinfo, 我们只能依靠这种手动检测的方式了.
我花了一段时间来解析一些mp3文件的非法魔法字节,但很快,我得到了一个稳定的上传脚本。
在本文结束前,我想给大家一个警告: 确保你永远没有调用一个 include() 来包含一个上传的文件,因为PHP代码很可能会巧妙地隐藏在图片里面,并且图片也可以成功的通过你的文件检测,当这样的脚本运行时,只可能给系统带来破坏。
译自:http://designshack.co.uk/articles/php-articles/smart-file-type-detection-using-php/

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

智慧型應用程式控制是Windows11中非常有用的工具,可幫助保護你的電腦免受可能損害資料的未經授權的應用程式(如勒索軟體或間諜軟體)的侵害。本文將解釋什麼是智慧型應用程式控制、它是如何運作的,以及如何在Windows11中開啟或關閉它。什麼是Windows11中的智慧型應用控制?智慧型應用程式控制(SAC)是Windows1122H2更新中引入的新安全功能。它與MicrosoftDefender或第三方防毒軟體一起運行,以阻止可能不必要的應用,這些應用程式可能會減慢設備速度、顯示意外廣告或執行其他意外操作。智慧應用

好強大的AI模仿能力,真的防不住,完全防不住。現在AI的發展已經達到這種程度了嗎?你前腳讓自己的五官亂飛,後腳,一模一樣的表情就被復現出來,瞪眼、挑眉、噘嘴,不管多麼誇張的表情,都模仿的非常到位。加大難度,讓眉毛挑的再高些,眼睛睜的再大些,甚至連嘴型都是歪的,虛擬人物頭像也能完美復現表情。當你在左邊調整參數時,右邊的虛擬頭像也會相應地改變動作給嘴巴、眼睛一個特寫,模仿的不能說完全相同,只能說表情一模一樣(最右邊)。這項研究來自慕尼黑工業大學等機構,他們提出了GaussianAvatars,這種

本文經自動駕駛之心公眾號授權轉載,轉載請洽出處。原標題:MotionLM:Multi-AgentMotionForecastingasLanguageModeling論文連結:https://arxiv.org/pdf/2309.16534.pdf作者單位:Waymo會議:ICCV2023論文想法:對於自動駕駛車輛安全規劃來說,可靠地預測道路代理未來行為是至關重要的。本研究將連續軌跡表示為離散運動令牌序列,並將多智能體運動預測視為語言建模任務。我們提出的模型MotionLM有以下幾個優點:首

《ComputerWorld》雜誌曾經寫過一篇文章,說“編程到1960年就會消失”,因為IBM開發了一種新語言FORTRAN,這種新語言可以讓工程師寫出他們所需的數學公式,然後提交給電腦運行,所以程式設計就會終結。圖片又過了幾年,我們聽到了一種新說法:任何業務人員都可以使用業務術語來描述自己的問題,告訴電腦要做什麼,使用這種叫做COBOL的程式語言,公司不再需要程式設計師了。後來,據說IBM開發了一門名為RPG的新程式語言,可以讓員工填寫表格並產生報告,因此大部分企業的程式設計需求都可以透過它來完成圖

定位在自動駕駛中佔據不可取代的地位,而且未來有著可期的發展。目前自動駕駛中的定位都是依賴RTK配合高精地圖,這為自動駕駛的落地增加了不少成本與難度。試想一下人類開車,並非需要知道自己的全局高精定位及周圍的詳細環境,有一條全局導航路徑並配合車輛在該路徑上的位置,也就足夠了,而這裡牽涉到的,便是SLAM領域的關鍵技術。什麼是SLAMSLAM (Simultaneous Localization and Mapping),也稱為CML (Concurrent Mapping and Localiza

身高1.65米,體重55公斤,全身44個自由度,能夠快速行走、敏捷避障、穩健上下坡、抗衝擊幹擾的人形機器人,現在可以帶回家了!傅利葉智慧的通用人形機器人GR-1已開啟預售機器人大講堂傅利葉智慧FourierGR-1通用人形機器人現已開放預售。 GR-1擁有高度仿生的軀幹構型和擬人化的運動控制,全身44個自由度,具備行走、避障、越障、上下坡、抗干擾、適應不同路面等運動能力,是通用人工智慧的理想載體。官網預售頁:www.fftai.cn/order#FourierGR-1#傅利葉智能需要改寫的內

近日,華為宣布將於9月推出搭載玄璣感知系統的全新智慧穿戴新品,預計為華為的最新智慧手錶。該新品將整合先進的情緒健康監測功能,玄璣感知系統以其六大特性——準確性、全面性、快速性、靈活性、開放性和延展性——為用戶提供全方位的健康評估。系統採用超感知模組,優化了多通道光路架構技術,大幅提升了心率、血氧和呼吸速率等基礎指標的監測精度。此外,玄璣感知系統也拓展了以心率資料為基礎的情緒狀態研究,不僅限於生理指標,還能評估使用者的情緒狀態和壓力水平,並支持超過60項運動健康指標監測,涵蓋心血管、呼吸、神經、內分泌、

軌跡預測近兩年風頭正猛,但大都聚焦於車輛軌跡預測方向,自動駕駛之心今天就為大家分享頂會NeurIPS上關於行人軌跡預測的演算法—SHENet,在受限場景中人類的移動模式通常在一定程度上符合有限的規律。基於這個假設,SHENet透過學習隱含的場景規律來預測一個人的未來軌跡。文章已經授權自動駕駛之心原創!作者的個人理解由於人類運動的隨機性和主觀性,目前預測一個人的未來軌跡仍然是一個具有挑戰性的問題。然而,由於場景限制(例如平面圖、道路和障礙物)以及人與人或人與物體的互動性,在受限場景中人類的移動模式通
