PHP-basierter Webserver

Parantatatam

mag Cookies & Kekse
Hallo liebe Tutorianer,

ich beschäftige mich gerade mit einem Gebiet von PHP, welches nur sehr dünn im Netz abgedeckt ist: einen PHP-basierten Webserver. Das ist an sich kein Problem, jedoch gibt es eine Stelle, an der ich gerade nicht weiterkomme. Vorher aber erstmal das, was ich bereits habe:
PHP:
$descriptors = array(
    array('pipe', 'r'),
    array('pipe', 'w'),
    array('file', __DIR__ . '/proc/error.log', 'a'),
  );

if(($process = proc_open('php', $descriptors, $pipes, __DIR__ . '/proc')) !== false) {
  fwrite($pipes[0], file_get_contents(__DIR__ . '/proc/test.php'));
  fclose($pipes[0]);
  var_dump(stream_get_contents($pipes[1]));
  fclose($pipes[1]);
  echo 'return: ' . proc_close($process);
}
Es geht mir jetzt darum, dass ich zwischen der Datei, welche die eigentliche PHP-Seite lädt, also den Elternprozess, und dem Kindprozess kommunizieren kann, damit ich beispielsweise auf bestimmte Ereignisse eingehen kann. Wozu ich das brauche? Meine Idee besteht darin, dass ich die Superglobalen von PHP vor dem eigentlichen Dateiaufruf füllen will. Das ist durchaus möglich, beispielsweise, wenn ich vor der Datei eine andere Systemdatei lade, welche die Variablen manipuliert. Jedoch funktionieren dann Funktionen wie filter_input nicht, da diese auf die Urdaten der Superglobalen zugreifen. Diese Urdaten sind es, welche ich nutzen will. Denn ich habe vor den Funktionenbestand meines Servers um Funktionen wie authenticate per default zu erweitern. Letztgenannte Funktion soll dem Programmierer die Validierung und Verarbeitung der Basic und Digest Access Authentication abnehmen. Dafür möchte ich aber nicht auf $_SERVER zurückgreifen, sondern auf eine Variable mit Systemvariablen, welche der Programmierer nicht verändern kann.

Eine Idee, die ich bereits versuchte, ist, dass ich einen eigenen Stream-Wrapper registriere. Allerdings existieren diese nicht im Kindprozess, wenn ich sie im Elternprozess registriere. Gibt es eine Möglichkeit einen globalen Wrapper wie compress.zlib, file oder php mit PHP zu erstellen?

Hoffentlich ist das jetzt nicht zu verworren für euch. Falls doch, fragt bitte nach.
 
––– UPDATE –––
Ich habe noch einmal überlegt, was mein eigentliches Problem ist, und bin dabei darauf gestoßen: ich würde gerne wissen, wie man die Superglobalen-Variablen über den Shell-Aufruf "füttern" kann, so dass sie von sämtlichen Systemfunktionen als default-Daten erkannt werden.
 
––– UPDATE –––
Neuer Stand ist folgender, dass ich entdeckt habe, dass ich mit stream_context_create ein Umfeld für HTTP erstellen kann und welches ich dann an die Funktion proc_open weiterreiche. Einziges Problem daran: es funktioniert nicht, also die Superglobalen-Variablen werden nicht gefüttert. Allerdings frage ich mich, welchen Sinn das Überreichen eines Streamkontextes an diese Funktion sonst haben sollte. Hat jetzt vielleicht jemand einen Vorschlag?
 
Ich versteh immer noch nicht den Sinn deines Vorhabens.

Du willst einen Webserver schreiben mit einer Skriptsprachenerweiterung eines Webservers.
Das ist so als ob ich Räder an die Räder meines Autos schrauben würde.

Und was meinst du mit füttern? Willst du in einer Shell die Variablen setzten oder sie direkt dem Progamm übergeben?
 
Zurück