2010-12-06 4 views
4

Voici ce que j'ai à faire. Un de nos programmes a un formulaire de support que les utilisateurs utilisent pour demander un support. Ce que fait ce formulaire, il effectue une requête HTTP POST à ​​un script PHP qui est censé collecter les informations et les transmettre à l'adresse e-mail de support.Comment recevoir des données POST envoyées en utilisant "application/octet-stream" en PHP?

La requête POST contient trois champs de texte du type Content-Type: text/plain qui peuvent être facilement lus en PHP en utilisant $_POST['fieldname']. Toutefois, certains contenus de cette requête POST sont des fichiers de type Content-Type: application/octet-stream. L'utilisation de $_POST ne semble pas fonctionner avec ces fichiers. Comment puis-je lire le contenu de ces fichiers?

Merci d'avance.

+0

ce qui est de type de contenu de forme? –

+0

S'il vous plaît, oh, s'il vous plaît, n'écrivez pas "recieve". C'est "recevoir". @Col. Shrapnel: il signifie probablement 'enctype' (l'information d'encodage). – rhino

Répondre

9

Vous devez utiliser le $ _FILES superglobale:

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

Vous pouvez trouver plus d'informations in the manual. Cela ne fonctionnera que si vous utilisez l'encodage multipart/form-data dans votre requête.

Vous pouvez par ailleurs lire les données brutes POST, puis analyser vous-même:

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

Comme je l'ai découvert, PHP charge le fichier entier en mémoire en utilisant la méthode 'php: // input' (et manque rapidement de mémoire avec des fichiers volumineux). Définissez définitivement 'multipart/form-data' et utilisez $ _FILES si possible. –

0

Utilisez le tableau $ _FILES.

-1

Ceux-ci relèvent de la superglobale $ _FILES. Lisez à ce sujet ici:

Fondamentalement, ce que vous obtenez est un tableau similaire à POST, mais avec des choses comme la taille du fichier, le nom temporaire et l'emplacement temporaire du fichier que vous pouvez utiliser pour tester et déplacer le fichier à un emplacement permanent.

plus d'informations générales sur le manuel PHP: http://php.net/manual/en/features.file-upload.php

+0

Euh, est-ce que le downvoter voudrait expliquer ce qui ne va pas avec ma réponse? –

+3

Vraisemblablement que $ _FILES ne fonctionne que pour 'multipart/form-data', pas pour' application/octet-stream'. –

+0

Merci Kristof pour ton commentaire, ça vient de résoudre des heures de frustration! – user65439

Questions connexes