时间:2021-07-01 10:21:17 帮助过:21人阅读
- <br>extension=php_fileinfo.dll <br> <br><br>linux下面: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>extension=fileinfo.so <br>#如不能正常工作,再加上下面这条 <br>#mime_magic.magicfile=/usr/share/file/magic <br> <br><br>windows下面如不能正常工作: <br>可参考:http://www.php.com/manual/en/fileinfo.installation.php#82570 <br>下载file-5.03-bin.zip ,解压出来,在其中的share目录有magic.mgc 、magic 两个文件。 <br>然后添加一个名为MAGIC的系统环境变量指向magic 文件。如D:\software\PHP\extras\misc\magic <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>function getFileMimeType($file) { <br>$buffer = file_get_contents($file); <br>$finfo = new finfo(FILEINFO_MIME_TYPE); <br>return $finfo->buffer($buffer); <br>} <br>$mime_type = getFileMimeType($file); <br>switch($mime_type) { <br>case "image/jpeg": <br>// your actions go here... <br>} <br> <br><strong>处理图像上传 <br></strong>如果你打算只允许图像上传,那么你可以使用内置的getimagesize()函数,以确保用户实际上是上传一个有效的图像文件。如果该文件不是有效的图像文件,这个函数返回false。 <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>// 假设file input 域的name 属性为myfile <br>$tempFile = $_FILES['myFile']['tmp_name']; // path of the temp file created by PHP during upload <br>$imginfo_array = getimagesize($tempFile); // returns a false if not a valid image file <br>if ($imginfo_array !== false) { <br>$mime_type = $imginfo_array['mime']; <br>switch($mime_type) { <br>case "image/jpeg": <br>// your actions go here... <br>} <br>} <br>else { <br>echo "This is not a valid image file"; <br>} <br> <br><strong>手动读取和解释“魔法字节”</strong> <br>如果由于某种原因,你不能安装FileInfo扩展,那么你仍然可以手动确定,通过读取文件的前几个字节,并比较它们与已知的魔法与特定文件类型相关联的字节的文件类型。这个过程肯定少许的试验和错误,因为还有一种可能,有少数非法的魔法字节与合法文件格式关联了。 <br>然而这不是不可能的,几年前,我被要求做一个只允许真正的 mp3 文件上传的脚本文件,并且,当时我们不能用 Fileinfo, 我们只能依靠这种手动检测的方式了. <br>我花了一段时间来解析一些mp3文件的非法魔法字节,但很快,我得到了一个稳定的上传脚本。 <br>在本文结束前,我想给大家一个警告: 确保你永远没有调用一个 include() 来包含一个上传的文件,因为PHP代码很可能会巧妙地隐藏在图片里面,并且图片也可以成功的通过你的文件检测,当这样的脚本运行时,只可能给系统带来破坏。 <br>译自:http://designshack.co.uk/articles/php-articles/smart-file-type-detection-using-php/</li><li> </li><li> </li></ol></pre></li></ol></pre></li></ol></pre>