2011-04-01 90 views
7

这听起来像一个愚蠢的问题,但上传一个文件后,该文件不在php所说的位置。文件上传不在/ tmp

首先,简单的测试页:

<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> 

现在,以纯文本的print_r:

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

因此,没有误差,标准寻找路径,但/ tmp中有没有这样的文件。此外,在我的整个系统上运行一个查找就会出现bubkis。

FYI:php.ini中有

max_execution_time = 120 
file_uploads = On 
upload_max_filesize = 2M 

和我已经上传的文件是29K

有什么想法?

回答

16

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

PHP脚本到您发布形式 - upload.php的 - 应该移动临时文件到非临时位置,使用move_uploaded_file()


基本上,这个想法是:

  • 用户上传文件到您的脚本,
    • 该文件存储在临时文件中。
  • 您的脚本在该文件上的工作原理:
    • 检查文件是否OK (内容类型,大小,...)
  • 如果文件是确定的,你的脚本将其移动到永久存储目录(徘徊无论你想)

如果上载未成功完成,或者如果你不动ŧ他在其他地方文件,临时文件被自动删除。


作为参考,您应仔细阅读说明书的以下部分:Handling file uploads - POST method uploads

引用这是关系到你的问题它的一部分:

该文件将从中删除 请求结束时的临时目录,如果它尚未被移走 或重命名。

+0

好吧,我补充说:$ mv = move_uploaded_file($ _ FILES ['imgup'] ['tmp_name'],“/var/www/testimg.jpg”);到文件的顶部。 $ mv总是假的,没有发出警告。我在那里做错了什么? – 2011-04-01 16:23:02

+1

你的web服务器的用户*(如某些Linux发行版中的www-data)有权写入'/ var/www /'吗? – 2011-04-01 16:24:52

+0

解决了它。非常感谢! – 2011-04-01 16:37:10