【问题标题】:Uploading a file html/php上传文件 html/php
【发布时间】:2012-03-29 19:48:56
【问题描述】:

我目前正在尝试通过简单的 html 和 php 将 csv 文件上传到数据库。我的问题是我想知道事情是如何运作的/实际发生了什么(我想这就是我有这么多问题的原因)

所以无论如何我的 HTML 如下:

<html>
<form action="mysite.php" method="POST">
<input type="file" name="file"><br />
<input type="submit" value="Now upload it!">
</form>
</html>

我的 PHP 只是:

<?php
echo 'Success';
?>

在我将文件实际存储在我喜欢的数据库中之前,文件实际存储在哪里?

它是作为服务器上的临时文件创建的吗? 保存在服务器内存上? 它实际上没有做任何事情,因为它没有被告知做任何事情(又名:保存到数据库)

谢谢

【问题讨论】:

  • 嗯,到目前为止,它实际上什么也没做(字面意思),从上传文件时缺少的“multipart/form-data”表单编码开始。你应该研究一下进程,从这里开始:php.net/manual/en/features.file-upload.php
  • 此时甚至没有上传文件。您需要正确的编码类型。 &lt;form [SIC] enctype="multipart/form-data"&gt;。完成排序后,我建议您在接收脚本中使用print_r($_FILES); 以查看信息是如何发布的。
  • 在您的 mysite.php 文件中使用 print_r( $_FILES );,我认为您将能够继续前进。
  • 如果您尝试将此 CSV 文件导入数据库以用作数据库表,或者您只是想存储文件本身,这将很有帮助。
  • 现在我只想存储文件本身。稍后我将把它存储到数据库中。感谢您的回复。在我有时间查看你们发布的所有链接之后,我会选择我认为最好的链接。再次感谢。

标签: php html forms file-upload


【解决方案1】:

是的,它会在服务器上的临时文件中,但在你的情况下它不会因为你错过了编码类型:

<form enctype="multipart/form-data" action="__URL__" method="POST">

这是文件上传手册php file uploading

您可以通过对变量名执行 var_dump($_POST) 对文件数据执行 var_dump($_FILES) 来查看上传的内容,以帮助理解。

正如您在参考文件中看到的,上传文件后,您需要将其从临时位置移动到最终目的地。

【讨论】:

  • 一击毙命。由于缺少编码类型,它甚至还不是临时文件。谢谢。
【解决方案2】:

我强烈推荐阅读this

本质上,文件是通过 HTTP 上传的,php 将其存储在服务器上的一个临时文件中。

您可以使用全局 $_FILES 数组获取该临时文件的句柄。

【讨论】:

    【解决方案3】:

    当您上传文件时,它存储在服务器上,之后如果您想将此 CSV 导入数据库,您必须使用 php 脚本解析 (CSV Parser) 并将其插入数据库。或者,如果您只想存储文件路径,而不是 CSV 中的数据,那么您必须仅将文件路径存储在数据库中。

    【讨论】:

      【解决方案4】:

      只要脚本正在运行,文件就会临时存储。该信息可以在 $_FILES 中找到。

      【讨论】:

        【解决方案5】:

        该文件应该存储在服务器上的一个临时文件中,您可以使用$_FILES 超全局找到有关它的信息。您可以先更改脚本以转储超全局以查看内部内容:

        <?php 
        print_r($_FILES); 
        ?> 
        

        PHP 提供了一系列有用的函数来处理文件上传,您应该使用这些函数而不是仅仅进入文件系统 - 请记住,任何文件上传都算作用户输入,因此会带来安全风险!您应该首先检查文件是否是您要查找的文件:

        $filename = $_FILES['attachment']['tmp_name'];
        if (!is_uploaded_file($filename)) {
            // error
        }
        

        您可以使用move_uploaded_file() 函数将文件粘贴到更方便的位置:

        if (move_uploaded_file($_FILES['attachment']['tmp_name'], '/more/useful/path') {
            // all good
        }
        

        最后,您应该记住,不仅文件本身,而且报告的文件名和文件大小都是用户提交的数据,并确保在使用前对这些数据进行适当的清理。

        这里有很多方便的东西:http://uk.php.net/manual/en/features.file-upload.php

        【讨论】:

          猜你喜欢
          • 2012-09-23
          • 2023-02-06
          • 2012-09-23
          • 1970-01-01
          • 1970-01-01
          • 2014-11-07
          • 2012-06-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多