酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

编写一个安全的PHP上传文件代码

以下是一个安全的 PHP 上传文件的代码示例,此代码包含了文件类型检查、文件大小限制、文件名安全处理等安全措施。 ```php <?php // 设置允许上传的文件类型 $allowedTypes = array('jpg', 'jpeg', 'png', 'gif'); // 设置最大文件大小(单位:字节),这里设置为 2MB $maxFileSize = 2 * 1024 * 1024; // 上传文件的目标目录 $uploadDir = 'uploads/'; // 检查目标目录是否存在,如果不存在则创建 if (!is_dir($uploadDir)) { mkdir($uploadDir, 0777, true); } // 检查是否有文件上传 if (isset($_FILES['file'])) { $file = $_FILES['file']; // 获取文件扩展名 $fileExtension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); // 检查文件类型是否允许 if (in_array($fileExtension, $allowedTypes)) { // 检查文件大小是否超过限制 if ($file['size'] <= $maxFileSize) { // 生成安全的文件名 $safeFileName = uniqid() . '.' . $fileExtension; $uploadPath = $uploadDir . $safeFileName; // 移动上传的文件到目标目录 if (move_uploaded_file($file['tmp_name'], $uploadPath)) { echo "文件上传成功!"; } else { echo "文件上传失败,请重试。"; } } else { echo "文件大小超过限制,请选择小于 2MB 的文件。"; } } else { echo "不允许的文件类型,请上传 JPG、JPEG、PNG 或 GIF 文件。"; } } else { echo "未选择要上传的文件。"; } ?> <!DOCTYPE html> <html> <head> <title>文件上传</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传文件"> </form> </body> </html> ``` 额外需要注意的逻辑点 1. 对于上传目录的权限设置要谨慎,`0777` 权限在生产环境中可能存在安全风险,建议根据实际情况调整权限。 2. 在生成安全文件名时,使用 `uniqid()` 可以避免文件名冲突,但在高并发场景下可能会有重复的风险,可以结合时间戳等方式进一步增强文件名的唯一性。 3. 代码中的文件类型检查是基于文件扩展名的,这种方式不够安全,建议结合 `finfo_file()` 函数来检查文件的真实 MIME 类型。 [2025-06-24 15:40:40 | AI写代码神器 | 658点数解答]

相关提问