如果我阅读文件上传脚本,我几乎在任何地方都能看到以下代码行来读取文件内容
file_get_contents('php://input');
但遗憾的是不能真正理解它。有人可以帮助它实际上是什么意思吗?
如果我阅读文件上传脚本,我几乎在任何地方都能看到以下代码行来读取文件内容
file_get_contents('php://input');
但遗憾的是不能真正理解它。有人可以帮助它实际上是什么意思吗?
尽管您的帖子并没有详细说明您尝试完成的工作,最重要的是如何完成,但我将尝试提供一些指导来解决您的问题。
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 POST
或HTTP PUT
根据您的需要上传。有关更多详细信息,请参阅本教程。
4.调试问题
东西容易坏,所以你需要能够调试它。您选择的第一个武器是浏览器中的某种网络转储。如果你有 Chrome,这些工具是内置的,对于其他浏览器,你可能需要下载一些扩展。
您需要查看请求并查看数据是否存在以及是否正确编码。作为一名 Web 开发人员,您应该对 HTTP 有深入的了解,所以如果您不阅读它。没有理由不知道 HTTP。
如果您确定您的数据到达服务器端,您应该学习调试 PHP。首先,看看你的superglobals。你寄的东西都在那里吗?还是缺少什么?
如果您没有发送的文件,您可能已经达到了为上传配置的文件大小限制,无论是在您的网络服务器中还是在您的 PHP 中。至于罪魁祸首是谁,你必须自己找出来。
此外,请务必设置error_reporting
为,E_ALL & E_NOTICE
这样您就不会错过代码问题。
最后,如果没有其他帮助,您将需要学习使用xdebug进行调试。同样,Web 开发人员没有任何借口不能调试自己的代码。没有任何。
请参阅http://www.php.net/manual/en/wrappers.php.php。
php://input
是一个“特殊文件”,其中包含发送到 PHP 脚本的输入。在 Web 服务器上,这意味着 HTTP请求正文的内容。file_get_contents
只需读取整个内容,就像从常规文件中一样。
简而言之:该行获取 HTTP 请求正文的内容。
但是:使用时php://input
不填充multipart/form-data