在 PHP 的上载表单中检查文件扩展名

2022-08-30 09:16:55

我检查文件扩展名是否上传。我的示例方法有效,但现在我需要了解我的方法(使用)是否为真。有没有另一种更好,更快的方法?pathinfo

$filename = $_FILES['video_file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if ($ext !== 'gif' || $ext !== 'png' || $ext !== 'jpg') {
    echo 'error';
}

答案 1

使用 ) 可能效率不高。如果您允许20个不同的扩展名怎么办?if( $ext !== 'gif'

尝试:

$allowed = array('gif', 'png', 'jpg');
$filename = $_FILES['video_file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if (!in_array($ext, $allowed)) {
    echo 'error';
}

答案 2

检查文件扩展名不被视为最佳做法。完成此任务的首选方法是检查文件 MIME 类型

从 PHP:

<?php
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // Return MIME type
    foreach (glob("*") as $filename) {
        echo finfo_file($finfo, $filename) . "\n";
    }
    finfo_close($finfo);
?>

上面的示例将输出类似于您应该检查的内容。

text/html
image/gif
application/vnd.ms-excel

虽然MIME类型也可以被欺骗(编辑文件的前几个字节并修改幻数),但它比编辑文件名更难。因此,您永远无法100%确定该文件类型实际上是什么,并且应该注意处理用户上传/通过电子邮件发送的文件。


推荐