尝试上传文件后,$ _FILES始终为空

时间:2013-09-16 19:47:56

标签: php

我很难让文件上传在php中运行。

  • 我正在运行php 5,所以我应该有$ _FILES变量
  • 我的php.ini显示文件上传已开启,而且我没有尝试上传过大的文件
  • 我的磁盘上有足够的空间

预期:有关上传文件的信息。 得到:空$ _FILES

这是我的表单/脚本。我究竟做错了什么?

<!DOCTYPE html> 
<html lang="en">
<body> 

<?php 

if($_SERVER['REQUEST_METHOD'] !== "POST"):  ?> 

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<label for="file">Upload a file:</label> 
<input type="file" name="file" id="file"><br/> 
<button type="submit">Analyze</button> 
</form>    

<?php endif; ?> 

<?php if($_SERVER['REQUEST_METHOD'] == "POST"):  

    print_r($_FILES);  // debugging

if ($_FILES["file"]["size"] < 20000) 
{
    if ($_FILES["file"]["error"] > 0)
    {
        echo "<p>Error: " . $_FILES["file"]["error"] . "</p>";
    }
    else
    {
        echo "<p>Upload: " . $_FILES["file"]["name"] . "</p>";
        echo "<p>Type: " . $_FILES["file"]["type"] . "</p>";
        echo "<p>Size: " . ($_FILES["file"]["size"] / 1024) . " kB</p>";
        echo "<p>Stored in: " . $_FILES["file"]["tmp_name"] . "</p>";
    }
}
else
{
    echo "Invalid file. Please make sure your file is a plain text file and is small enough for this program to analyze.";
}

endif; ?> 

</body> 
</html> 

3 个答案:

答案 0 :(得分:8)

您忘记了<form>标记中的编码类型属性:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" 
    enctype="multipart/form-data"> 

答案 1 :(得分:4)

默认情况下,表单数据使用application/x-www-form-urlencoded编码提交(这与GET请求的查询字符串中使用的格式相同),不支持文件数据。

来自specification

  

如果条目的类型是“file”,则仅将其值替换为文件名。

您需要使用multipart/form-data编码。您可以使用enctype attribute

指定此内容
<form ... enctype="multipart/form-data">

答案 2 :(得分:3)

您需要提供enctype="multipart/form-data"。以这种方式更新:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"
      enctype="multipart/form-data">