PHP – Rohdaten eines Requests auslesen

In PHP ruft man normalerweise die übermittelten Daten via $_POST, $_GET oder $_REQUEST ab. Dies sind sogenannte Superglobale und kommen als Array daher.

Muss man nun allerdings Daten in Empfang nehmen, die nur über den Header erreichbar sind, z.B. die Daten werden direkt in die Request-Felder eingebettet. Normalerweise sieht ein Wert ja folgendermaßen aus: mykey=myvalue. Dieses wird dann auf $_POST['mykey'] abgebildet. Der Wert ist darin gespeichert. Soll nun, in dem Beispiel myvalue aus unerfindlichen Gründen direkt eingebunden werden, was nicht HTTP-konform ist, hat man ein Problem. Selbiges Problem hat man, wenn eigene Headerdaten gesetzt werden, allerdings ist die Lösung die gleiche.

Es gibt in PHP eine Fülle an Streams. Mithilfe des Inputstreams kann man den Datenverkehr roh (raw) abgreifen. Damit kann man dann die “versteckten” Daten wieder erlangen. Folgender Codeausschnitt soll dies veranschaulichen:

<?php
$fh = fopen('php://input', 'r');
if (!$fh) {
  echo "Error";
}
$xml = '';
while (!feof($fh)) {
  $data .= fgets($fh);
}
fclose($fh);
echo $data;
?>

Edit: Wie dolce unten anmerkt, gehts unter PHP5 so viel einfacher. Aber warum einfach, wenns auch kompliziert geht :)

1 Comment

  1. Posted Mittwoch, 29. Oktober 2008 at 12:03 | Permalink

    das müsste eigentlich einfacher mit file_get_contents(‘php://input’) gehen. zumindest bei php5

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*