2014-01-23 49 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”添加到表单标记,并确保文件上传已启用。

相关问题