当前位置:首页 > PHP

php 实现文件上传

2026-03-13 03:49:58PHP

文件上传基础实现

创建一个包含文件上传表单的HTML页面,表单需设置enctype="multipart/form-data"属性:

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fileToUpload">
    <input type="submit" value="Upload">
</form>

处理上传的PHP脚本

upload.php中处理上传逻辑,检查文件是否存在错误并移动到目标目录:

$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;

if ($_FILES["fileToUpload"]["error"] !== UPLOAD_ERR_OK) {
    $uploadOk = 0;
}

if ($uploadOk && move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
    echo "File uploaded successfully.";
} else {
    echo "Error uploading file.";
}

安全增强措施

验证文件类型和大小,防止恶意文件上传:

$allowedTypes = ["image/jpeg", "image/png"];
$maxSize = 2 * 1024 * 1024; // 2MB

if (!in_array($_FILES["fileToUpload"]["type"], $allowedTypes)) {
    $uploadOk = 0;
}

if ($_FILES["fileToUpload"]["size"] > $maxSize) {
    $uploadOk = 0;
}

文件重命名策略

为避免文件名冲突,生成唯一文件名:

$fileExtension = pathinfo($_FILES["fileToUpload"]["name"], PATHINFO_EXTENSION);
$newFileName = uniqid() . '.' . $fileExtension;
$targetFile = $targetDir . $newFileName;

错误处理与反馈

提供详细的错误反馈帮助用户理解问题:

if ($_FILES["fileToUpload"]["error"] !== UPLOAD_ERR_OK) {
    switch ($_FILES["fileToUpload"]["error"]) {
        case UPLOAD_ERR_INI_SIZE:
            echo "File exceeds server limit.";
            break;
        case UPLOAD_ERR_FORM_SIZE:
            echo "File exceeds form limit.";
            break;
        // 其他错误情况...
    }
}

完整示例代码

结合所有安全措施的完整上传处理脚本:

php 实现文件上传

$targetDir = "uploads/";
$allowedTypes = ["image/jpeg", "image/png"];
$maxSize = 2 * 1024 * 1024;

if ($_FILES["fileToUpload"]["error"] !== UPLOAD_ERR_OK) {
    die("Upload error occurred.");
}

if (!in_array($_FILES["fileToUpload"]["type"], $allowedTypes)) {
    die("Invalid file type.");
}

if ($_FILES["fileToUpload"]["size"] > $maxSize) {
    die("File too large.");
}

$fileExtension = strtolower(pathinfo($_FILES["fileToUpload"]["name"], PATHINFO_EXTENSION));
$newFileName = uniqid() . '.' . $fileExtension;
$targetFile = $targetDir . $newFileName;

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
    echo "Upload successful. File saved as: " . htmlspecialchars($newFileName);
} else {
    echo "Error saving file.";
}

标签: 文件上传php
分享给朋友:

相关文章

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…

php array实现

php array实现

PHP 数组实现 PHP 数组是一种灵活的数据结构,可以存储多个值。以下是几种常见的实现方式: 索引数组 索引数组使用数字作为键名,默认从0开始递增。 $fruits = array("Apple…