原生php上传文件校验,PHP上传文件验证

博客讨论了在创建文件上传脚本时确保文件有效性的技术。内容包括检查文件扩展名、MIME类型和文件大小。提出了使用文件起始字节来验证文件类型的可靠性,并提到了遇到的问题,如.jpg文件被误认为.zip。还讨论了.psd文件的MIME类型混乱问题。文章寻求关于验证不同文件类型(如.doc、.pdf)和处理.psd文件的有效方法。
摘要由CSDN通过智能技术生成

我正在创建文件上传脚本,我正在寻找验证上传文件的最佳技术和实践.

允许的扩展名为:

$allowed_extensions = array('gif','jpg','png','swf','doc','docx','pdf','zip','rar','rtf','psd');

这是我正在做的清单.

>检查文件扩展名

$path_info = pathinfo($filename);

if( !in_array($path_info['extension'], $allowed_extensions) ) {

die('File #'.$i.': Incorrent file extension.');

}

>检查文件mime类型

$allowed_mimes = array('image/jpeg','image/png','image/gif','text/richtext','multipart/x-zip','application/x-shockwave-flash','application/msword','application/pdf','application/x-rar-compressed','image/vnd.adobe.photoshop');

if( !in_array(finfo_file($finfo, $file), $allowed_mimes) ) {

die('File #'.$i.': Incorrent mime type.');

}

>检查文件大小.

我该怎么做才能确保上传的文件是有效的文件?我注意到奇怪的事情.我将.jpg文件扩展名更改为.zip并且…已上传.我认为它的MIME类型不正确但之后我注意到我没有检查特定的类型,但是如果数组中存在特定的MIME类型.我稍后会修复它,这对我来说没有问题(当然,如果你有任何好的解决方案/想法,请不要犹豫,分享它,请).

我知道如何处理图像(尝试调整大小,旋转,裁剪等),但不知道如何验证其他扩展.

现在是我的问题的时候了.

>您是否了解验证此类文件的良好技术?也许我应该解压缩.zip / .rar文件的档案,但文档(doc,pdf)呢?

>将旋转,调整.psd文件的工作大小?

>基本上我认为.psd文件有以下mime:application / octet-stream但是什么时候

我试图上传它显示给我的.psd文件(image / vnd.adobe.photoshop).我对此有点困惑.文件是否始终具有相同的MIME类型?

另外,我不能强制代码块工作.有没有人猜到为什么?

最佳答案:

许多文件格式都有一组非常标准的起始字节来表示格式.如果对前几个字节进行二进制读取并根据已知格式的起始字节对它们进行测试,那么确认文件类型与扩展名匹配应该是一种相当可靠的方法.

例如,JPEG的起始字节是0xFF,0xD8;像这样的东西:

$fp = fopen("filename.jpg", "rb");

$startbytes = fread($fp, 8);

$chunked = str_split($startbytes,1);

if ($chunked[0] == 0xFF && $chunked[1] == 0xD8){

$exts[] = "jpg";

$exts[] = "jpeg";

}

然后检查exts.

可以工作.

标签:php,upload,file-upload,uploading

来源: https://codeday.me/bug/20190515/1110566.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值