2010-07-22 135 views
4

PHP上传问题获取错误0,但move_uploaded_file()返回false。当我打印出$ _FILES我得到PHP上传问题获取错误0,但move_uploaded_file()返回false

Array ([uploadedfile] => Array ([name] => flashlog.txt [type] => 
text/plain [tmp_name] => /tmp/php0XYQgd [error] => 0 [size] => 3334)) 

我使用了一个基本的HTML/PHP的教程这让我相信,这可能是服务器问题。我检查了php.ini,并且已经upload_max_filesize:2M,post_max_size:8M。所以我很困惑,因为我认为0的错误告诉我它是成功的。

我正在使用的代码是

<?php 

// Where the file is going to be placed 
$target_path = 'Test/'; 

$target_path = $target_path. basename($_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
{ 
echo "The file ". basename($_FILES['uploadedfile']['name']). 
" has been uploaded"; 
} 
else 
{ 
echo "There was an error uploading the file, please try again!"; 
echo print_r($_FILES); 
} 
?> 
+0

到底什么是给你一个错误的代码?顺便说一句,请**将您的代码缩进4格**以正确格式化。 – deceze 2010-07-22 04:35:03

+0

你提出了错误报告级别吗?如果目的地出了问题,'move_uploaded_file'应该发出警告,告诉你什么是错的。 – deceze 2010-07-22 05:04:47

回答

9

move_uploaded_file()也将返回false,如果它不能写入到目标目录。

我看到处理上传的大部分PHP代码跳过检查过程的一些主要部分。上传代码应该执行以下步骤:

  1. 检查$_FILES[]是否存在并且填充了正确的条目。
  2. 查看error字段,看看它是否到达服务器 - 很多代码只检查它是否为0,这意味着它不会向用户返回任何体面的错误。
  3. 确定您需要移动文件的目的地实际存在。
  4. 请致电move_uploaded_file()来做这个动作 - 太多的只是做一个文件复制,它绕过安全检查move_uploaded_file()

这些是离散的步骤:您似乎看到,实际上传可能会成功,但move_uploaded_file()可能会失败。你的问题假设如果后者失败了,前者也是如此。

哦,是的:致电move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $destination)。使用$_FILES['uploadedfile']['name']将不起作用。

+1

这就是我会回答的。检查您的文件权限。鉴于这是一个移动操作,您可能还需要将其从源目录中移除的权限。 – thomasrutter 2010-07-22 04:42:22

+1

'move_uploaded_file()'不会有删除临时文件的麻烦,因为它被与上载过程中创建的完全相同的进程调用。 :-) – staticsan 2010-07-22 04:51:06

+0

是啊真的:) ... – thomasrutter 2010-07-22 04:55:27

0

我的项目中出现同样的错误代码中没有任何错误,但文件名中存在问题,例如我无法上传名为的图像(“IMAG0889.jpg”,“I​​MAG0892.jpg”,“I​​MAG0893。 jpg“等),它给了我错误0.重命名文件后像(”Deep2.jpg“,”IMG_20160925_093715_1.jpg“)我成功上传我的图像文件。所以尝试重命名后上传文件