-1

如果我阅读文件上传脚本,我几乎在任何地方都能看到以下代码行来读取文件内容

file_get_contents('php://input');

但遗憾的是不能真正理解它。有人可以帮助它实际上是什么意思吗?

4

2 回答 2

5

尽管您的帖子并没有详细说明您尝试完成的工作,最重要的是如何完成,但我将尝试提供一些指导来解决您的问题。

1. 上传是如何工作的?

您必须了解的第一件事是,上传如何使用 PHP。您上传的文件作为 HTTP 请求的正文部分发送。

然而,该身体部分可以被编码。一旦这样的编码可能是multipart/form-data,身体被分成单独的部分。然而,PHP 对此做了一些特殊处理,请参阅此答案的后面部分。

另一种方法是将文件本身完全未编码作为PUT请求的主体部分发送,例如XMLHttpRequest. 这将使您的代码能够实际工作,但我们稍后再讨论。

2. PHP如何处理上传?

如果你使用 PHP,PHP 有一些特殊的魔力multipart/form-data。如果你使用这个,内容php://input将不可用,相反你必须使用$_FILES数组来处理你的上传。

另一方面,如果您想自己处理上传,或者您使用了 PUT 方法并且您的上传不需要特殊处理,您可以阅读所有内容php://input并以任何您喜欢的方式使用它们。

有关上传的更多详细信息,请参阅PHP 手册

3. 如何从客户端提交文件?

有几种方法。最基本的方法是简单地创建一个表单,将文件作为HTTP POST上传提交,然后按上述方式处理。

如果你想要一个进度条,你可以使用一些像YUI 上传器这样的 Flash 。这个小文件仍会发送一个HTTP POST,但您将可以访问通过 JavaScript 上传的内容。

最后,如果您的浏览器支持 HTML5 File API,您可以获取本地文件的内容并通过HTTP POSTHTTP PUT根据您的需要上传。有关更多详细信息,请参阅本教程

4.调试问题

东西容易坏,所以你需要能够调试它。您选择的第一个武器是浏览器中的某种网络转储。如果你有 Chrome,这些工具是内置的,对于其他浏览器,你可能需要下载一些扩展。

您需要查看请求并查看数据是否存在以及是否正确编码。作为一名 Web 开发人员,您应该对 HTTP 有深入的了解,所以如果您不阅读它没有理由不知道 HTTP。

如果您确定您的数据到达服务器端,您应该学习调试 PHP。首先,看看你的superglobals。你寄的东西都在那里吗?还是缺少什​​么?

如果您没有发送的文件,您可能已经达到了为上传配置的文件大小限制,无论是在您的网络服务器中还是在您的 PHP 中。至于罪魁祸首是谁,你必须自己找出来。

此外,请务必设置error_reporting为,E_ALL & E_NOTICE这样您就不会错过代码问题。

最后,如果没有其他帮助,您将需要学习使用xdebug进行调试。同样,Web 开发人员没有任何借口不能调试自己的代码。没有任何。

于 2013-06-26T10:41:10.960 回答
1

请参阅http://www.php.net/manual/en/wrappers.php.php

php://input是一个“特殊文件”,其中包含发送到 PHP 脚本的输入。在 Web 服务器上,这意味着 HTTP请求正文的内容。file_get_contents只需读取整个内容,就像从常规文件中一样。

简而言之:该行获取 HTTP 请求正文的内容。

但是:使用时php://input填充multipart/form-data

于 2013-06-26T10:22:57.843 回答