【问题标题】:How to recieve POST data sent using "application/octet-stream" in PHP?如何在 PHP 中接收使用“application/octet-stream”发送的 POST 数据?
【发布时间】:2011-05-21 03:56:19
【问题描述】:

这就是我正在处理的问题。我们的一个程序有一个支持表格,用户可以使用它来请求支持。这个表单的作用是,它向 PHP 脚本执行 HTTP POST 请求,该脚本应该收集信息并将其转发到支持电子邮件地址。

POST 请求包含三个Content-Type: text/plain 类型的文本字段,可以使用$_POST['fieldname'] 在PHP 中轻松读取。但是,此 POST 请求中的某些内容是 Content-Type: application/octet-stream 类型的文件。使用 $_POST 似乎不适用于这些文件。如何阅读这些文件的内容?

提前谢谢你。

【问题讨论】:

  • 拜托,哦,拜托,不要写“receive”。是“收”。 @Col。弹片:他可能是指enctype(编码信息)。

标签: php html file post request


【解决方案1】:

你必须使用 $_FILES 超全局:

$contents = file_get_contents($_FILES['myfile']['tmp_name']);

您可以找到更多信息in the manual。这只有在您的请求中使用 multipart/form-data 编码时才有效。

您可以读取原始 POST 数据,然后自行解析:

$rawPost = file_get_contents('php://input');

【讨论】:

  • 我发现,PHP 在使用php://input 方法时会将整个文件加载到内存中(并且对于大文件会很快耗尽内存)。一定要切换到multipart/form-data 并尽可能使用 $_FILES。
【解决方案2】:

那些属于 $_FILES 超全局。在这里阅读:http://php.net/manual/en/features.file-upload.php

基本上,您得到的是一个类似于 POST 的数组,但包含文件大小、临时名称和文件的临时位置等信息,您可以使用它们来测试并将文件移动到永久位置。

来自 PHP 手册的更多一般信息:http://php.net/manual/en/features.file-upload.php

【讨论】:

  • 嗯,否决者愿意解释我的回答有什么问题吗?
  • 大概 $_FILES 只适用于multipart/form-data,不适用于application/octet-stream
  • 感谢 Kristof 的评论,它解决了几个小时的挫败感!
猜你喜欢
  • 2017-09-02
  • 2019-06-26
  • 2019-01-21
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多