PHP 文件上传与文件名处理199


在构建 PHP Web 应用时,文件上传是一个常见功能。它使网站能够从用户设备接收文件,并将其存储或处理在服务器端。要妥善管理上传的文件,处理其文件名是至关重要的。

处理上传文件名在 PHP 中,上传的文件信息可通过 `$_FILES` 超全局数组访问。该数组包含有关已上传文件的信息,包括其原始文件名、临时文件路径、文件大小和 MIME 类型。

要获取上传文件的原始文件名,可以使用以下语法:```php
$originalFileName = $_FILES['file']['name'];
```

然而,原始文件名可能包含特殊字符、不安全的扩展名或用户提供的恶意代码。因此,在处理和存储文件名之前,对其进行清理和验证非常重要。

清理文件名清理文件名涉及以下步骤:* 删除特殊字符:使用 `preg_replace()` 函数删除非字母数字字符,例如 `-`、`.` 和 `_`。
* 转换大写:将其转换为小写,以确保文件名在所有平台上都保持一致。
* 截断长度:某些文件系统对文件名长度有限制,因此最好截断太长的文件名。
以下是清理文件名的範例程式碼:```php
$cleanedFileName = strtolower(preg_replace('/[^a-zA-Z0-9_.-]+/', '', $originalFileName));
```

验证文件名清理后,需要验证文件名是否安全:
* 检查扩展名:确保文件扩展名属于允许的文件类型列表。
* 过滤恶意字符:使用正则表达式过滤可能用于恶意目的的字符。
* 生成唯一文件名:使用 `uniqid()` 函数生成唯一文件名,以避免冲突。
以下是验证文件名的範例程式碼:```php
$allowedExtensions = ['jpg', 'png', 'gif'];
$extension = pathinfo($cleanedFileName, PATHINFO_EXTENSION);
if (!in_array($extension, $allowedExtensions)) {
// 扩展名无效
} elseif (preg_match('/["`;\/\\\\]/', $cleanedFileName)) {
// 文件名中包含恶意字符
} else {
// 文件名有效
$finalFileName = uniqid() . '.' . $extension;
}
```

存储文件名在将文件移动到永久存储位置之前,将其重命名为新生成的唯一文件名。可以使用 `move_uploaded_file()` 函数执行此操作:```php
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $finalFileName);
```

通过遵循这些步骤,您可以安全可靠地处理和存储上传文件的名称。

2024-10-26


上一篇:中文字符串在 PHP 中的长度计算

下一篇:如何高效获取 PHP 中文本框的值