为什么我的代码无法识别文件类型?

时间:2014-01-23 12:12:37

标签: php

我是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作为回应,尽管我已经上传了正确的文件。谁能告诉我为什么我的代码会显示这种行为?

2 个答案:

答案 0 :(得分:3)

不应该是

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

而不是

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

否则,第二个参数不是一个数组,你可能会得到一个错误,它总是假的?

答案 1 :(得分:0)

您的变量$ type似乎未设置。

作为测试,您可能希望在脚本开头附近坚持这个声明:

print_r($_FILES);

我怀疑在传递给你的脚本的内容中没有键['file'] ['type'](或者至少这些值不是你所期望的)。您还可以使用isset($_FILES['file']['type'])来测试是否存在。

$ _FILES也可能为空。如果是,则尝试将enctype =“multipart / form-data”添加到表单标记中,并确保已启用文件上载。