【问题标题】:File uploader uploading files but displaying error文件上传器上传文件但显示错误
【发布时间】:2014-08-04 09:31:21
【问题描述】:

我的代码

我有这个多部分表单:

<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file"><span>Select:</span></label>
<input type="file" name="file" id="file"> 
<br>
Password: <input type="password" name="password"><br>
<input type="submit" name="submit" value="Upload">
</form>

哪个指向这个文件:

<?php
$allowedExts = array("mp4", "avi","mpeg","wmv","swf","3gp","AVI");
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

if (!in_array($extension, $allowedExts) || $_FILES['file']['error']>0  || file_exists(date("YmdHis").$_FILES["file"]["name"]))
{  
   echo "Error [code: ".$_FILES['file']['error']."]";
} else {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      date("YmdHis").$_FILES["file"]["name"]);
      echo 'file uploaded'; 
}
?>

应该怎么做

上传视频文件

什么不起作用

我尝试上传 .AVI 视频,大小约为 300kb:已上传,但显示错误消息“错误 [代码:]”

error_reporting(E_ALL);的结果

注意:未定义索引:upload.php 中第 5 行的文件
注意: 未定义索引:upload.php 文件第 8 行

var_dump($_POST,$_FILES); 的结果(“密码”字段为空)

array(0) { } array(0) { } 

"&lt;pre&gt;"; print_r($_FILES);的结果

Array ( )

我在哪里尝试过代码

  • 本地服务器运行easyPHP,php版本5.5.8
  • 共享服务器,php 版本 5.3.10

我的问题

如何正确显示成功信息并解决问题?

【问题讨论】:

  • 你要上传多个文件吗?
  • 不,每次只有一个
  • 是否显示错误并一起上传文件?
  • 是的,它会上传文件但显示错误消息
  • 这是一个猜测。将“或”测试更改为“||”。这将允许对测试进行“短路”评估。即第一个“真”结果将结束测试序列。目前将评估所有测试。

标签: php file file-upload multipartform-data multipart


【解决方案1】:

我已经在 PHP 5.3.18 上运行了您的代码。视窗XP。假设满足上传限制。我能找到的唯一问题是您在移动文件时错过了“目标文件名”中的“目标”目录。

经过测试的示例代码:

<?php // http://stackoverflow.com/questions/25115575/file-uploader-uploading-files-but-displaying-error?noredirect=1#comment39103445_25115575
$destDir = 'P:/temp/';
$allowedExts = array("mp4", "avi","mpeg","wmv","swf","3gp","avi");
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

if (!in_array($extension, $allowedExts) || $_FILES['file']['error']>0  || file_exists(date("YmdHis").$_FILES["file"]["name"]))
{
   echo "Error [code: ".$_FILES['file']['error']."]";

} else {
      $newFilename = $destDir . date("YmdHis").$_FILES["file"]["name"];
      move_uploaded_file($_FILES["file"]["tmp_name"],
      $newFilename);
      echo 'file uploaded : ', $newFilename;
}

【讨论】:

  • 感谢您的回答。我尝试使用以下方法编辑 $destdir:完整的模拟 url (localhost)、我电脑上文件夹的真实绝对路径和相对路径;我托管网站的完整网址和相对路径;但我总是得到错误代码 0
  • 哦,愚蠢的我。我坚持尝试使用带有 .AVI 扩展名的视频,但我不认为 PHP 认为它 != 来自 .avi (在允许的扩展名数组中),所以你的代码确实有效,只是我。随意叫我傻瓜。再次感谢您的帮助。
  • @Angelo,很高兴你把它整理出来:)
【解决方案2】:

这是由于文件大小而发生的。 -

; Maximum allowed size for uploaded files.
upload_max_filesize = allowed max size

; Must be greater than or equal to upload_max_filesize
post_max_size = allowed max size

-PHP change the maximum upload file size

【讨论】:

  • 感谢您的回答。我将 post_max_size 从 2M 编辑(所以无论如何上传 300kb 视频就足够了)到 40M 和 post_max_size 从 8M 到 40M,但行为没有改变。请注意,实际上,视频已上传,但我还是收到了错误消息。
  • 我也尝试按照您的新答案中所述设置“最大尺寸”,但它无论如何都不起作用
猜你喜欢
  • 1970-01-01
  • 2017-02-27
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多