PHP 上传文件失败,数组长度为 0


PHP upload file fails with 0 length array.

我正在尝试使用 php 上传文件。 脚本有时完美无缺,但有时则不然。当它不起作用时,$_FILES 数组完全为空(print_r产生 Array())。我无法进行错误检查,因为 $_FILES["文件"]["错误"] 为空。 该行为通过IE,Chrome和Firefox是一致的。 文件似乎正在上传,如进度条所示。

scipt 再次返回无效文件类型,因为 $_FILES 为空。 如果我删除文件类型检查,move_uploaded_file返回 false,脚本返回我的自定义"文件可能失败"消息。 返回error_reporting的唯一错误是每当我尝试访问 $_FILES 时索引错误 - 再次因为它是空的。

我看到了有关文件上传问题的其他问题,但我还没有遇到过任何有此特定问题的人。 我不认为这是一个权限问题,因为正如我所说,脚本有时确实有效。 虽然我正在测试多种文件类型,但我只尝试上传 mp3 文件。

ini_set('display_errors',1);
error_reporting(E_ALL);
print_r($_FILES);
if  (($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "application/pdf")
    || ($_FILES["file"]["type"] == "audio/mpeg")
    || ($_FILES["file"]["type"] == "audio/x-mp3")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
{

    if ($_FILES["file"]["error"] > 0)
    {
        echo "'nReturn Code: " . $_FILES["file"]["error"] . "<br />";
    }
    else
    {
        echo "'nUpload: " . $_FILES["file"]["name"] . "<br />";
        echo "'nType: " . $_FILES["file"]["type"] . "<br />";
        echo "'nSize: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
        echo "'nTemp file: " . $_FILES["file"]["tmp_name"] . "<br />";
        $fname = basename($_FILES["file"]["name"]);
        $put_file = $_POST["put_dir"] . "/" . $fname;
        echo "'nDestination File: " . $put_file . "<br />";
        if(move_uploaded_file($_FILES["file"]["tmp_name"], $put_file))
        {
            echo "The file " .  $fname . " has been uploaded";              
        }
        else
        {
            echo "The file " .  basename( $_FILES['file']['name']) . " may have failed";
        }
    }
}
else
{
    echo "Invalid file type: " . $_FILES["file"]["type"];
}

你的HTML表单必须具有enctype="multipart/form-data"属性,是吗?

我认为它可以帮助您:http://www.w3schools.com/php/php_file_upload.asp