当前位置:首页 > PHP

php实现上传实例

2026-02-14 00:31:30PHP

PHP 文件上传基础实现

创建一个简单的文件上传表单,使用 enctype="multipart/form-data" 确保文件数据正确传输:

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

处理上传的 PHP 脚本(upload.php)核心代码:

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

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
    echo "The file ". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
    echo "Sorry, there was an error uploading your file.";
}

安全增强措施

设置文件大小限制,防止过大文件上传:

$maxFileSize = 500000; // 500KB
if ($_FILES["fileToUpload"]["size"] > $maxFileSize) {
    die("File is too large.");
}

限制允许的文件类型,只接受图片:

$allowedTypes = ["jpg", "png", "jpeg", "gif"];
$fileExtension = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));

if (!in_array($fileExtension, $allowedTypes)) {
    die("Only JPG, JPEG, PNG & GIF files are allowed.");
}

文件重命名处理

生成唯一文件名防止覆盖和注入攻击:

$newFileName = uniqid() . '.' . $fileExtension;
$targetFile = $targetDir . $newFileName;

完整示例代码

结合所有安全检查的完整处理脚本:

$targetDir = "uploads/";
$maxFileSize = 500000;
$allowedTypes = ["jpg", "png", "jpeg", "gif"];

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

    // 检查文件类型
    if (!in_array($fileExtension, $allowedTypes)) {
        die("Error: Only image files are allowed.");
    }

    // 检查文件大小
    if ($_FILES["fileToUpload"]["size"] > $maxFileSize) {
        die("Error: File is too large.");
    }

    // 移动临时文件到目标位置
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
        echo "The file has been uploaded as " . htmlspecialchars($newFileName);
    } else {
        echo "Error: There was an error uploading your file.";
    }
}

高级安全处理

添加图像验证确保上传的是真实图片:

$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check === false) {
    die("Error: File is not an actual image.");
}

设置更严格的权限:

chmod($targetFile, 0644); // 设置文件权限为所有者可读写,其他只读

错误处理机制

完善错误捕获和处理:

php实现上传实例

if ($_FILES["fileToUpload"]["error"] !== UPLOAD_ERR_OK) {
    switch($_FILES["fileToUpload"]["error"]) {
        case UPLOAD_ERR_INI_SIZE:
            die("Error: File exceeds server size limit.");
        case UPLOAD_ERR_FORM_SIZE:
            die("Error: File exceeds form size limit.");
        // 其他错误情况处理...
        default:
            die("Error: Unknown upload error.");
    }
}

标签: 实例上传
分享给朋友:

相关文章

vue上传视频实现

vue上传视频实现

使用 <input type="file"> 上传视频 创建文件选择控件,限制文件类型为视频格式(如 .mp4, .webm)。通过 @change 事件监听文件选择,获取 File 对象…

vue实现视频上传

vue实现视频上传

Vue 实现视频上传的方法 使用原生 input 元素和 FormData 在 Vue 中可以通过原生 input 元素结合 FormData 实现视频上传功能。创建一个文件选择输入框,监听文件变化事…

vue实现上传头像显示

vue实现上传头像显示

Vue 实现上传头像并显示 前端实现(Vue 3 + Element Plus) 模板部分 <template> <div class="avatar-upload">…

vue实现图片裁剪上传

vue实现图片裁剪上传

Vue 实现图片裁剪上传的方法 使用 vue-cropper 库 安装 vue-cropper 库: npm install vue-cropperjs 引入组件并设置基本配置: import V…

vue实现html页面实例

vue实现html页面实例

Vue 实现 HTML 页面实例 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是一个简单的 Vue 实现 HTML 页面的实例,展示如何将 Vue 集成到 HTML…

vue实现代码实例

vue实现代码实例

以下是一个基于 Vue 3 的完整代码实例,包含核心功能实现和常见开发场景的示例: 基础组件示例 <template> <div> <h1>{{ ti…