首页
学习
活动
专区
圈层
工具
发布

php 获取不到$_files

基础概念

$_FILES 是 PHP 中用于处理 HTTP 文件上传的全局数组。当客户端通过 HTML 表单使用 method="post"enctype="multipart/form-data" 提交文件时,PHP 会自动将上传的文件信息存储在 $_FILES 数组中。

相关优势

  • 简单易用:PHP 提供了内置的文件上传处理机制,开发者可以轻松获取上传文件的信息。
  • 安全性:PHP 提供了一些内置的安全措施,如文件类型检查、文件大小限制等,以防止恶意文件上传。

类型

$_FILES 数组包含以下键值对:

  • name:客户端上传文件的原始名称。
  • type:文件的 MIME 类型。
  • size:文件的大小(以字节为单位)。
  • tmp_name:文件在服务器上临时存储的名称。
  • error:上传过程中发生的错误代码。

应用场景

  • 用户上传头像、图片、文档等文件。
  • 文件管理系统中的文件上传功能。

可能遇到的问题及解决方法

1. 获取不到 $_FILES

原因

  • 表单未正确设置 enctype="multipart/form-data"
  • 表单提交方式不是 method="post"
  • PHP 配置文件(php.ini)中 file_uploads 设置为 Off

解决方法: 确保 HTML 表单正确设置:

代码语言:txt
复制
<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.ini 文件中的 file_uploads 设置:

代码语言:txt
复制
file_uploads = On

2. $_FILES['error'] 不为 0

原因

  • 文件大小超过 upload_max_filesizepost_max_size 限制。
  • PHP 没有足够的权限写入临时目录。
  • 文件类型不被允许。

解决方法: 检查 php.ini 文件中的相关设置:

代码语言:txt
复制
upload_max_filesize = 2M
post_max_size = 8M

确保 PHP 有权限写入临时目录:

代码语言:txt
复制
chmod 777 /path/to/temp/directory

限制允许上传的文件类型:

代码语言:txt
复制
$allowed_types = array('image/jpeg', 'image/png');
if (!in_array($_FILES['fileToUpload']['type'], $allowed_types)) {
    die("Invalid file type.");
}

示例代码

以下是一个简单的文件上传处理示例:

代码语言:txt
复制
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

    // 检查文件是否上传成功
    if (isset($_POST["submit"])) {
        $uploadOk = 1;
    } else {
        echo "Sorry, there was an error uploading your file.";
        $uploadOk = 0;
    }

    // 检查文件大小
    if ($_FILES["fileToUpload"]["size"] > 500000) {
        echo "Sorry, your file is too large.";
        $uploadOk = 0;
    }

    // 允许特定文件格式
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
        echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
        $uploadOk = 0;
    }

    // 检查是否设置了上传文件
    if (empty($_FILES["fileToUpload"]["name"])) {
        echo "Sorry, no file selected.";
        $uploadOk = 0;
    }

    // 检查是否有错误
    if ($_FILES["fileToUpload"]["error"] > 0) {
        echo "Return Code: " . $_FILES["fileToUpload"]["error"] . "<br>";
        $uploadOk = 0;
    }

    // 检查文件是否已经存在
    if (file_exists($target_file)) {
        echo "Sorry, file already exists.";
        $uploadOk = 0;
    }

    // 检查目录权限
    if (!is_dir($target_dir)) {
        mkdir($target_dir, 0777, true);
    }

    // 尝试上传文件
    if ($uploadOk == 0) {
        echo "Sorry, your file was not uploaded.";
    } else {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
        } else {
            echo "Sorry, there was an error uploading your file.";
        }
    }
}
?>

参考链接

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的文章

领券