我的文件上载表单不会上传非图像文件。为什么?

时间:2013-03-09 14:31:10

标签: php jquery html ajax

我有一个HTML文件上传表单,使用PHP上传我服务器上的文件。它上传图像文件,但其他类型的文件,如MP3或MP4不上传。我无法弄清楚问题是什么。

以下是代码:

  

HTML:

<form id="uploadForm" method="post" action="upload.php?ref=home" enctype="multipart/form-data">
<input id="shout_media" class="hidden" name="media" type="file" />
</form>
  

PHP:

<?php

  if(isset($_GET['ref'])) {

   if((isset($_FILES['media']))&&(is_uploaded_file($_FILES['media']['tmp_name']))) {

      $name = $_FILES['media']['name'];

      $tmpname = $_FILES['media']['tmp_name'];

      $size = $_FILES['media']['size'];

      $i = strrpos($name,".");

      if (!$i) { return ""; }

      $l = strlen($name) - $i;

      $xt = substr($name,$i+1,$l);

      $ext = strtolower($xt);

      if(preg_match("/(jpg|jpeg|png|gif|mp3|mp4)/",$ext)) {

          if(move_uploaded_file($tmpname,'photos/'.$name.'')) {

               echo 'Uploaded successfully!';

           }

      }

  }

我正在使用jQuery和http://www.malsup.com/jquery/form/ Ajax Form Plugin上传文件而无需重新加载页面。

  

AJAX表格插件代码:

$("#uploadForm").ajaxForm({
   success: function(responseText) {
      if(responseText.length>0) {
           $(".uploadStatus").text('Uploaded!');
  }
   }
}).submit();

问题是什么?如何解决?我需要允许我的用户上传其他类型的文件,最重要的是上传MP3和MP4。

谢谢!

1 个答案:

答案 0 :(得分:2)

if(preg_match("/(jpg|jpeg|png|gif)/",$ext)) {

按扩展程序过滤文件。添加要包含在列表中的其他扩展名,例如

if(preg_match("/(jpg|jpeg|png|gif|mp3|mp4)/",$ext)) {

请注意,所有文件都将上传到同一个文件夹,因此即使您的mp3文件也会在照片文件夹中。如果您不想这样,则必须根据文件类型更改move_uploaded_file的路径。

由于您已更新了问题,请检查php中的post_max_sizeupload_max_filesize设置以查看您的文件是否大于允许的最大尺寸