PHP表单上传文件后/tmp目录未显示临时文件的问题求助
解决表单上传文件后临时目录中找不到文件的问题
Hey Cédric, 我来帮你拆解这个问题——你遇到的情况其实挺常见的,咱们一步步来梳理:
最核心的原因:PHP自动清理临时上传文件
PHP处理文件上传时,会先把文件暂存到临时目录,但只要当前脚本执行完毕,这个临时文件就会被自动删除。这就是为什么你用var_dump($_FILES)能看到tmp_name的路径,但脚本跑完后去/tmp里找就找不到了——文件已经被PHP自动清理掉了。
关键解决方法:立即将临时文件转移到永久目录
你需要在upload.php里用move_uploaded_file()函数,把临时文件移动到你指定的永久存储目录,这样文件就不会被自动删除了。给你个实用的示例代码:
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['photo'])) { // 先确认上传过程没有错误 if ($_FILES['photo']['error'] === UPLOAD_ERR_OK) { $tmp_file_path = $_FILES['photo']['tmp_name']; // 替换成你实际要存储文件的目录,确保这个目录对PHP进程有读写权限 $target_storage_dir = '/var/www/your-project/uploads/'; $target_file_path = $target_storage_dir . basename($_FILES['photo']['name']); // 执行文件转移操作 if (move_uploaded_file($tmp_file_path, $target_file_path)) { echo "文件上传成功,已保存到: " . $target_file_path; } else { echo "移动文件失败,请检查目标目录的权限设置"; } } else { echo "上传过程出错,错误码: " . $_FILES['photo']['error']; } } ?>
额外排查方向
如果上面的方法没解决问题,你可以再检查这两个点:
- 确认PHP实际使用的临时目录:有些服务器会配置自定义的临时目录,不是系统默认的
/tmp。你可以在upload.php里加一行echo ini_get('upload_tmp_dir');,看看PHP真正的临时文件存储路径。 - 检查目标目录权限:确保PHP运行的进程(比如
www-data、apache)对你设置的永久存储目录有读写权限,不然move_uploaded_file会执行失败。
记住,临时文件的生命周期只到脚本执行结束,所以一定要在脚本运行期间完成文件的转移操作,不然文件就会消失啦!
内容的提问来源于stack exchange,提问作者cedric le valegant




