如果我读取文件上传脚本,我几乎到处都看到以下代码行来读取文件内容
file_get_contents('php://input');
但遗憾的是无法真正理解它。有人可以帮助它实际意味着什么吗?
答案 0 :(得分:5)
虽然您的帖子在您尝试完成的内容中并不是太详细,但最重要的是,我会尝试提供一些指导来解决您的问题。
<强> 1。上传工作如何?
您必须首先了解上传如何使用PHP。您上传的文件将作为HTTP请求的正文部分发送。
然而,可以编码该身体部位。一旦这样的编码可能是multipart/form-data
,其中身体被分成单独的部分。然而,PHP会对此进行一些特殊处理,请参阅本答案的后面部分。
另一种方法是将文件本身完全取消编码,作为PUT
请求的正文部分,例如XMLHttpRequest
发送。这将使您的代码实际工作,但是,我们稍后再讨论。
<强> 2。 PHP如何处理上传?
如果您使用multipart/form-data
,PHP会有一些特殊的魔力。如果您使用此内容,php://input
的内容将无法使用,您必须使用$_FILES
数组来处理上传。
另一方面,如果您想自己处理上传或者您使用PUT方法并且上传不需要特殊处理,您只需阅读php://input
的所有内容并以您喜欢的方式使用它们
有关上传的详细信息,请参阅PHP manual。
第3。如何从客户端提交文件?
有几种方法。最基本的方法是简单地创建一个表单,将该文件作为HTTP POST
上传提交,然后按上述方法处理。
如果您想要进度条,可以像YUI uploader一样使用某些Flash。这个小文件仍会发送HTTP POST
,但您可以访问通过JavaScript上传的内容。
最后,如果您的浏览器支持HTML5文件API,您可以获取本地文件的内容,并根据您的需要通过HTTP POST
或HTTP PUT
上传。有关详细信息,请参阅this tutorial。
<强> 4。调试问题
东西往往会破坏,所以你需要能够调试它。您选择的第一个武器是来自浏览器的某种网络转储。如果您使用Chrome,则会内置工具,对于其他浏览器,您可能需要下载一些扩展程序。
您需要查看请求并查看数据是否存在且编码是否正确。作为Web开发人员,您应该对HTTP有深入的了解,所以如果您不是read up on it。 没有理由不知道HTTP。
如果您确定您的数据到达服务器端,您应该学会调试PHP。首先,看看你的superglobals。你发送的一切都在吗?或者缺少什么?
如果您没有发送的文件,则可能已经在网络服务器或PHP中达到了上传的配置文件大小限制。至于罪魁祸首,你必须亲自找到。
此外,请务必将error_reporting
设置为E_ALL & E_NOTICE
,以免错过代码问题。
最后,如果没有其他帮助,您将需要学习使用xdebug进行调试。同样,没有任何借口让Web开发人员无法调试您自己的代码。无。
答案 1 :(得分:1)
请参阅http://www.php.net/manual/en/wrappers.php.php。
php://input
是一个“特殊文件”,其中包含发送到PHP脚本的输入。在Web服务器上,表示HTTP 请求正文的内容。 file_get_contents
只是从常规文件中读取整个内容。
简而言之:该行获取HTTP请求正文的内容。
但是:使用php://input
multipart/form-data
为not populated