📜  检查在 php 中选择的文件(1)

📅  最后修改于: 2023-12-03 15:10:52.449000             🧑  作者: Mango

检查在 PHP 中选择的文件

在 Web 开发中,上传文件是很常见的操作。在 PHP 中,我们可以使用 $_FILES 超全局变量来获取上传的文件信息。在处理上传的文件时,我们通常需要进行一系列的检查以确保文件的合法性和安全性。

检查文件是否上传成功

上传文件后,需要检查文件是否上传成功。可以使用 is_uploaded_file() 函数来判断文件是否是通过 HTTP POST 上传的文件。

if (is_uploaded_file($_FILES['file']['tmp_name'])) {
    // 文件上传成功
}
检查文件大小

在上传文件之前,需要检查上传的文件大小是否超过了限制。可以使用 $_FILES['file']['size'] 来获取文件的大小,然后和指定的大小进行比较。

$maxFileSize = 1024 * 1024; // 1MB
if ($_FILES['file']['size'] > $maxFileSize) {
    // 文件大小超过限制
}
检查文件类型

通过文件扩展名判断文件类型是不安全的,因为攻击者可以将一个脚本文件重命名为图片文件。正确的做法是通过文件的 MIME 类型来判断文件类型。可以使用 finfo 扩展来获取文件 MIME 类型。

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$fileType = finfo_file($finfo, $_FILES['file']['tmp_name']);
finfo_close($finfo);

$allowedTypes = array('image/jpeg', 'image/png', 'image/gif');
if (!in_array($fileType, $allowedTypes)) {
    // 文件类型不被允许
}
检查文件名

上传的文件名可能包含不安全的字符或路径,因此需要进行过滤。可以使用 basename() 函数来获取文件名,然后使用正则表达式或其他方法来过滤不安全的字符或路径。

$fileName = basename($_FILES['file']['name']);
if (!preg_match('/^[a-zA-Z0-9_-]+$/', $fileName)) {
    // 文件名不合法
}
检查上传目录

上传的文件应该存放在一个指定的目录中,并且需要确保该目录可以写入。可以使用 is_dir()is_writable() 函数来检查上传目录是否存在并可写。

$uploadDir = '/path/to/upload/dir';
if (!is_dir($uploadDir) || !is_writable($uploadDir)) {
    // 上传目录不存在或不可写
}
总结

以上是在 PHP 中检查上传的文件的一些常见方法。这些方法可以帮助我们确保上传的文件的合法性和安全性,减少因上传文件而带来的安全风险。