2013-03-09 68 views
-1

我有一個使用PHP在我的服務器上傳文件的HTML文件上傳表單。它上傳圖像文件,但其他類型的文件,如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表格插件代碼:

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

這是什麼問題,我該怎麼解決呢?我需要允許我的用戶上傳其他類型的文件,最重要的是MP3和MP4。

謝謝!

回答

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設置,看看如果你的文件大於允許的最大大小

+0

這是正確的答案大,但你可能還需要別的地方移動它:此代碼還會將您的mp3和mp4文件放在「照片」目錄中,這可能不是您想要的。 – ChrisC 2013-03-09 14:33:50

+0

對不起!我忘了說明。我在我的代碼中添加了mp3,mp4,但它不工作。它顯示$ _FILES ['media']是空的。 – Adil 2013-03-09 14:35:16

+0

@ChrisC謝謝,我已經更新了我的回答 – 2013-03-09 14:36:38