0

我很难让文件上传在 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> 
4

3 回答 3

11

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

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" 
    enctype="multipart/form-data"> 
于 2013-09-16T19:49:03.467 回答
4

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

规范

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

您需要使用multipart/form-data编码。您可以使用enctype属性指定它

<form ... enctype="multipart/form-data">
于 2013-09-16T19:50:35.860 回答
3

你需要给enctype="multipart/form-data"。以这种方式更新:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"
      enctype="multipart/form-data">
于 2013-09-16T19:49:09.610 回答