Tag Archives: Raw Data

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 :)