关于php文件上传和解析的tmp目录作用及问题

📌 什么是 $_FILES['file']['tmp_name']

在 PHP 中,当你通过 HTML 表单上传一个文件时,PHP 会将这个上传的文件先保存到服务器的一个临时目录中,这个路径就是:

$_FILES['file']['tmp_name']
示例说明:

假设你有一个上传表单:

<form method="post" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" value="上传">
</form>

用户选择了文件 shell.php 并提交后,在 PHP 脚本中你可以这样访问它:

if ($_FILES['file']) {
    echo $_FILES['file']['name'];     // shell.php(客户端原始文件名)
    echo $_FILES['file']['tmp_name']; // /tmp/phpABC123(服务器上的临时路径)
}

🔁 临时文件路径的作用是什么?

✅ 1. 上传文件的临时存储位置

  • 当浏览器上传文件到服务器时,PHP 会先把文件写入一个临时目录(通常是 /tmp)。
  • 这是为了防止上传过程中服务器资源被长期占用。
  • 如果你不处理这个临时文件(比如没有调用 move_uploaded_file()),那么上传完成后,这个文件会被自动删除。

✅ 2. 用于后续操作:移动、重命名、检查内容等

一旦你得到了临时路径,就可以对文件进行各种操作:

✅ 移动文件到指定目录
$upload_dir = 'uploads/';
$tmp_name   = $_FILES['file']['tmp_name'];
$target     = $upload_dir . basename($_FILES['file']['name']);

if (is_uploaded_file($tmp_name)) {
    move_uploaded_file($tmp_name, $target);
}
✅ 检查文件内容(如是否包含 PHP 代码)
$content = file_get_contents($_FILES['file']['tmp_name']);
if (strpos($content, '<?php') !== false) {
    die('不允许上传 PHP 文件!');
}
✅ 获取 MIME 类型或图片信息
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo, $_FILES['file']['tmp_name']);

🧠 举个比喻帮助理解

你可以把 $_FILES['file']['tmp_name'] 看作是:

Read more >