关于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']
看作是: