文件上传不在/tmp目录下

13

这听起来像是一个愚蠢的问题,但是在上传文件后,文件并不在PHP指定的位置。

首先是简单的测试页面:

<html><body> 
<h1><?=$_FILES['imgup']['tmp_name'];?></h1>
<?
        print_r($_FILES);
?>
<form enctype="multipart/form-data" method="post" action="upload.php">
<input type="file" name="imgup" id="imgup">
<input type="submit">
</form>
</body></html>

现在,以纯文本形式打印的结果如下:

Array ( [imgup] => Array ( [name] => ace.jpg [type] => image/jpeg [tmp_name] => /tmp/phpEdfBjs [error] => 0 [size] => 29737 ) )

因此没有错误,路径看起来很标准,但/tmp目录不存在。 此外,在整个系统上运行find命令没有找到任何东西。

顺便说一下:php.ini文件包含以下内容

max_execution_time = 120
file_uploads = On
upload_max_filesize = 2M

我一直在上传的文件大小为29k,有什么想法吗?

1个回答

24

当接收到临时文件的PHP脚本完成运行后,该临时文件将被删除:它只是一个临时文件。

你正在向表单提交的PHP脚本 - upload.php - 应该使用 move_uploaded_file() 将临时文件移动到非临时位置。


基本上,思路是:

  • 用户将文件上传到你的脚本中,
    • 该文件存储在临时位置。
  • 你的脚本对该文件进行处理:
    • 检查文件是否正确(内容类型、大小等)
  • 如果文件没有问题,则将其移动到永久存储目录中(在任何你想要的地方)

如果上传未成功完成,或者你没有将文件移动到其他位置,那么临时文件将自动被删除。


参考文献,你应该阅读手册的以下部分:处理文件上传 - POST方法上传

引用其中与你的问题相关的部分:

如果文件没有被移动或重命名,则在请求结束时将从临时目录中删除该文件。


好的,我在文件顶部添加了:$mv = move_uploaded_file($_FILES['imgup']['tmp_name'], "/var/www/testimg.jpg");。但是$mv始终为false,没有任何警告。我做错了什么吗? - Frank Conry
2
你的 Web 服务器的用户(例如某些 Linux 发行版上的 www-data)是否具有写入 /var/www/ 的权限? - Pascal MARTIN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接