【问题标题】:PHP Uploading issue Getting Error 0 but move_uploaded_file() is returning falsePHP 上传问题出现错误 0 但 move_uploaded_file() 返回 false
【发布时间】:2026-02-17 15:15:01
【问题描述】:

PHP 上传问题出现错误 0 但 move_uploaded_file() 返回错误。当我打印出 $_FILES 我得到 ​​p>

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);
}
?>

【问题讨论】:

  • 究竟是什么代码给你一个错误?顺便说一句,请将代码缩进 4 个空格以正确格式化。
  • 您是否提高了错误报告级别?如果目的地有问题,move_uploaded_file 应该会发出警告,告诉您出了什么问题。

标签: php


【解决方案1】:

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'] 将不起作用。

【讨论】:

  • 这就是我会回答的。检查您的文件权限。鉴于这是一个移动操作,您可能还需要权限才能将其从源目录中删除。
  • move_uploaded_file() 删除临时文件不会有问题,因为它是由在上传过程中创建它的完全相同的进程调用的。 :-)
  • 好的所以这里有一大堆权限错误的新手谢谢大家。
  • 奇怪的是,当上传不起作用时,我首先查看的是权限。我的问题是我有if (move_uploaded_file($_FILES['uploadedfile']['name']) { }。更改为 ['tmp_name'] 对我有用
【解决方案2】:

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

【讨论】: