How to recieve POST data sent using "application/octet-stream" in PHP?

10,906

You have to use the $_FILES superglobal:

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

You can find more information in the manual. This will only work if you are using multipart/form-data encoding in your request.

You can otherwise read the raw POST data, then parse it yourself:

$rawPost = file_get_contents('php://input');
Share:
10,906
Admin
Author by

Admin

Updated on June 17, 2022

Comments

  • Admin
    Admin almost 2 years

    Here's what I'm dealing with. One of our programs has a support form that users use to request support. What this form does is, it performs an HTTP POST request to a PHP script that's supposed to collect the info and forward it to the support e-mail address.

    The POST request contains three text fields of the type Content-Type: text/plain which can be easily read in PHP using $_POST['fieldname']. Some of the content in this POST request, however, are files, of type Content-Type: application/octet-stream. Using $_POST doesn't seem to work with these files. How do I go about reading the contents of these files?

    Thank you in advance.

  • Surreal Dreams
    Surreal Dreams over 13 years
    Um, would the downvoter care to explain what is wrong with my answer?
  • Kristof Provost
    Kristof Provost almost 12 years
    Presumably that $_FILES only works for multipart/form-data, not for application/octet-stream.
  • Andre Lombaard
    Andre Lombaard almost 11 years
    Thank you Kristof for your comment, it just solved hours of frustration!
  • Simon East
    Simon East about 10 years
    As I found out, PHP loads the entire file into memory when using the php://input method (and quickly runs out of memory with large files). Definitely switch to multipart/form-data and use $_FILES where possible.