2014-01-23 86 views
0

我是新來的PHP。我正在寫一個PHP腳本,它將只採取ccppjava文件並將它們上傳到服務器。爲什麼我的代碼不能識別文件類型?

這裏是我的代碼:

<?php 

    if(!empty($_POST["file_submit"])) 
    { 
     $allowed_xtensions = array("c","cpp","java"); 
     $tmp_xtension_array = explode(".",$_FILES["file_name"]["name"]); 
     $xtension = end($tmp_xtension_array); 

     $type = $_FILES["file_name"]["type"]; 


     if((($type == "text/x-java-source") || ($type == "text/x-csrc") || ($type == "text/x-c")) && in_array($xtension,$xtensions)) 
     { 
      if($_FILES["file"]["error"] > 0) 
      { 
       exit("Unable to process file.\nError : ".$_FILES["file_name"]["error"]); 
      } 
      else 
      { 
       if(!file_exists("/code/test.",$xtension)) 
       { 
        if(move_uploaded_file($_FILES["file_name"]["tmp_name"],"/code/test.",$xtension) == false) 
        { 
         exit("Unable to process the file.\n"); 
        } 
       } 
      } 
     } 
     else 
     { 
      exit("Invalid File."); 
     } 
    } 
    else 
    { 

     $file_form = ' <html> 
       <body> 

       <form action="test.php" method="post" enctype="multipart/form-data"> 
       <label for="file"> Select File : </label> 
       <input type="file" name="file_name" id="file_id"/><br /> 
       <input type="submit" name="file_submit" value="Submit"> 
       </form> 

       </body> 
       </html>'; 

     echo $file_form; 

    } 
?> 

但每當我上傳C,CPP或java文件,我得到INVALID FILE響應,雖然我已經上傳了正確的文件。任何人都可以告訴我爲什麼我的代碼顯示這種行爲?

+0

由於安全問題,許多服務器自行拒絕源代碼文件。你使用託管服務器還是像xampp這樣的本地服務器? –

+0

我想你正在用字符串模式檢查MIME類型。 –

+0

順便說一句:我用'||'檢查多個條件遇到了很多麻煩。你有沒有嘗試將它們分開,所以每種類型都有一個條件? –

回答

3

不應該說是的

... && in_array($xtension,$allowed_xtensions) ... 

代替

.... && in_array($xtension,$xtensions) ... 

否則,第二個參數是不是一個數組,你或許可以在得到一個錯誤,它總是假的?

+0

thanx @Axel Amthor ....這麼愚蠢我,我浪費了超過1:30只爲谷歌搜索它不工作,thanx很多。 – sdream

+0

不客氣! –

0

看來你的變量$ type沒有被設置。

作爲測試,您可能希望在不久的腳本的開始這種說法堅持:

print_r($_FILES); 

我懷疑沒有鑰匙[「文件」] [「型」]在什麼是傳遞給你的腳本(或者至少值不是你所期待的)。您也可以使用isset($_FILES['file']['type'])來測試是否存在。

也有可能$ _FILES是空的。如果是,則嘗試將enctype =「multipart/form-data」添加到表單標記,並確保文件上傳已啓用。

相關問題