dedlfix: Content-Length Header senden, Telnet

Beitrag lesen

Hi!

Es geht nicht um die Weiterverarbeitung sondern erst einmal nur um das Auslesen der POST-Daten. In welche Struktur du sie dann für die Weiterverarbeitung bringst, ist völlig nebensächlich für die Frage, ob man sich auf die Content-Length-Angabe verlassen soll und ob man sie überhaupt braucht. Die einfachste Lösung ist - egal ob der Content-Length-Header vom Client mitgesendet und/oder richtig ist - eine Schleife, die bis zum Datenende Häppchen liest (und diese dann in irgendeine Struktur oder auch nur aneinander in ein Byte-Array oder String oder sonstwas hängt).
Das ist nicht so einfach. Du liest keine Datei aus, es gibt kein EOF, du befindest dich in einem Netzwerk-Kontext. Woran erkennst du das "Datenende?" Wenn du liest, bis nichts mehr kommt, wirst du entweder bis zum Timeout blockieren oder du wirst nicht alle Daten lesen.

Ein Verbindungsende hätte ich hier als "Dateiende" angenommen ... Aber das gibts ja zu dem Zeitpunkt nicht, weil die Connection offen bleibt, um die Response darüber zu senden. Nichtsdestotrotz kann man mit PHP von php://input einfach bis feof() lesen. feof() ergibt true, wenn die von vom Client in Content-Length angegebenen Anzahl an Bytes gelesen wurde. Insofern muss man (für PHP) immer noch nicht Content-Length selbst auswerten. (Für andere Systeme mag das anders aussehen. Abgesehen davon besteht unter PHP selten die Notwendigkeit, php://input zu befragen, denn die Daten für bekannte Mime-Types findet man in $_POST und $_FILES, für unbekannte wird $HTTP_RAW_POST_DATA gefüllt.)

Lo!