2012-03-28 20 views
0

Ich arbeite an einem einfachen C++ HTTP-Server als Schulprojekt und ich würde gerne PHP-Unterstützung dafür hinzufügen. Post und Get Methoden sollten kein Problem sein, aber ich bin auf Cookies fest. Ich habe lange gegoogelt und konnte nicht finden, wie php mit Cookies umgeht, wo es die Ausgabe für http-Server wie Apache gibt oder wie es global funktioniert. Irgendwelche Ideen, wie ich diesen Code drucken konnte:Einfacher C++ Webserver mit PHP-Unterstützung

<?php 
setcookie("cookie[three]","cookiethree"); 
?> 

zu trösten, damit es von meinem Server gelesen werden und nach einigen Parsen an einen Client gesendet (?)?

Danke Jungs

EDIT: Das ist wirklich nah Beispiel zu dem, was ich brauche, aber wenn ich das Skript ausführen, zeigt es leeres Array .. http://php.net/manual/en/function.headers-list.php

PHP-Version: PHP 5.3.6- 13ubuntu3.2 mit Suhosin-Patch (cli) (gebaut: 13. Oktober 2011 23:09:42) Copyright (c) 1997-2011 Die PHP-Gruppe Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

+0

@Justin ᚅᚔᚈᚄᚒᚔ ups, Dank für die Warnung – safarov

+0

prüfen dieses Tutorial [phpcookies] (http://www.tizag.com/phpT/phpcookies.php) – safarov

+0

Dafarov: Ich denke, u nicht meine Post verstehen. im Grunde möchte ich in der Lage sein, den Cookie-Header-Code nur PHP-Skript in der Konsole laufen zu lassen, so kann ich es von mu http Server lesen und an den Benutzer senden – user1299412

Antwort

3

PHP bekommen seine superglobals Variablen (z. B. Cookies) vom HTTP-Server selbst. Wenn Sie eine Clientanforderung analysieren, müssen Sie jedes Schlüssel/Wert-Paar in einem geeigneten Container (eine HTTPRequest Klasse möglicherweise) speichern.

Wenn Sie Ihren Server mit PHP verbinden, sollten Sie ein Modul wie Apache schreiben (mod_php). Um dies zu tun, müssen Sie Ihre eigene API für die Schnittstellen mit den Modulen schreiben. Das bedeutet, dass Sie für jedes Modul (php, python ...) dieselbe Schnittstelle für Ihre Ein-/Ausgänge haben.

Wenn Sie eine solche API schreiben, sollten Sie eine einfache Möglichkeit definieren, alle Superglobalvariablen, die PHP benötigt, vom Server zu übergeben. Ich habe meinen eigenen HTTP-Server für den gleichen Zweck geschrieben und die Dokumentation von PHP ist ein wenig schwierig in diesem Punkt, aber Sie können sich von PHP-CGI inspirieren: Es gibt einen php.exe oder einfach php Befehl auf Linux/Windows, die Argumente wie Variablen, wenn meine Erinnerung gut ist. Wie auch immer, es gibt mehrere Möglichkeiten, diese Argumente an PHP zu übergeben und ich habe CGI für meinen Server verwendet.

Hoffe, dass dir helfen wird.

+0

danke, wahrscheinlich hilfreichste Antwort so weit :) Ich habe versucht, Setcookie mit Echo innerhalb , aber das ist nicht möglich:/Ich werde nach mehr Informationen über die laufenden CGI-Parameter suchen, aber wenn du dich erinnern könntest, wie es gemacht wurde (welche params du benutzt hast) tu das bitte, ich wäre wirklich dankbar :) danke – user1299412

+0

Du solltest zuerst Schauen Sie sich an, wie Apache mit PHP interagiert (zB über SAPI, Server Application Programming Interface). Schauen Sie auch auf FastCGI, was es tut und wie es verwendet wird, um zwischen PHP und Apache zu kommunizieren und wie Sie es in Ihrem Webserver verwenden können. –

+0

Sehen Sie http://fuzzytolerance.info/cgi-vs-sapi-vs-fastcgi/ für eine Erklärung der beiden und eine Auflistung der Unterschiede zwischen ihnen. –

1

Die Art und Weise Cookies Arbeit ist, dass der Server einen Set-Cookie Header sendet:

HTTP/1.0 200 OK 
Set-Cookie: myCookieName=myCookieKey 
Set-Cookie: anotherCookie=anotherValue 
// other headers and probably content 

Dann wird ein konformer HTTP-Client wird es in nachfolgenden Anfragen senden zurück:

GET /some/path HTTP/1.0 
Cookie: myCookieName=myCookieKey; anotherCookie=anotherValue 

Es way more complicated than that ist, aber das ist die Grundlagen.

Um es zusammenzufassen, müssen Sie:

  • schicken Set-Cookie Header, wenn Ihr Code ein Cookie anfordert gesetzt werden.
  • Suchen Sie nach einem Cookie Header, wenn Sie eingehende Anfragen lesen.
+0

Ich weiß, ich muss einen Cookie-Header setzen, bereits meinen Code dafür vorbereitet .. aber wie weiß ich, welchen Cookie zu setzen, wenn ich im Terminal laufen: "php script.php" und im Code ist ein bisschen wie setcookie ("cookie1", "val1"); Das Cookie wird nicht auf die Konsole gedruckt, also wie soll ich es bekommen? – user1299412