2009-12-02 3 views
12

Ich bin mit REST in PHP rum und ich verstehe, dass ich die Anfrage Methode vi a $_SERVER['REQUEST_METHOD'] erfassen kann. Aber wie kann ich PUT/DELETE Anfragen in PHP ohne die Verwendung von cURL auslösen? Ich möchte die Funktionen einer Standard-PHP-Installation verwenden, um dies zu tun. Ich kann mir nicht vorstellen, das Methodenattribut des Formular-Tags zu ändern, um eine andere Methode als GET oder POST zu spezifizieren, würde auf allen Browsern funktionieren ... plus der HTML-Standard erkennt es nicht.Wie sende ich eine PUT/DELETE-Anfrage in HTML?

Ich bin auf PHP 5.2.6, übrigens.

Danke.

+0

Wenn Sie "in PHP" sagen, bedeutet das, dass Sie die Anfrage Server-Seite tun möchten, und das ist, wie ich geantwortet habe. Ihre späteren Aussagen zu Browsern und HTML implizieren jedoch, dass Sie dies von der Client-Seite aus tun möchten. Können Sie das klären? –

+1

Eigentlich hätte ich PHP überhaupt nicht erwähnen sollen. Ich möchte nur meinen Client, sei es ein Webbrowser oder was hast du, HTML verwenden, um die Daten über HTTP als PUT oder DELETE statt nur GET UND POST zu übertragen. – Housni

+0

Diese Art von ändert die gesamte Frage ..... Also Ihr "php-Tag" ist missleading zu und wird wahrscheinlich Ihre Zielgruppe begrenzen. Vielleicht möchten Sie den Beitrag erneut veröffentlichen und ein bisschen beschreibender sein für das, was Sie erreichen möchten. – ChronoFish

Antwort

1

fopen wird HTTP, aber ich glaube, es wird nur GET-Anfragen. Wenn Sie fsockopen verwenden, müssen Sie das HTTP-Protokoll selbst behandeln, Header zu erzeugen, etc ..

Sie HTTPRequest (in der php_http Erweiterung) verwenden können oder PEAR.

Update:

Wenn Sie wirklich reden machen PUT/DELETE-Anfragen - Ihre PHP-Skripte, anstatt von sie, diese Frage von Interesse sein könnten:

Are the PUT, DELETE, HEAD, etc methods available in most web browsers?

+0

Ich schaute tatsächlich auf HTTPRequest. Ich versuche mir vorzustellen, wie ich PUT implementieren würde. Ich hätte ein HTML-Formular mit den Daten bereits in den Feldern vorhanden. Beim Senden verstehe ich nicht, wie ich PUT auslösen kann, so dass mein Formularhandler dies als PUT behandelt. Könnten Sie bitte etwas Licht darauf werfen? Danke. – Housni

+0

@Housni Vorausgesetzt, der Browser unterstützt PUT impliziert, hat es die Fähigkeit für die HTML/JS, genau anzugeben, was im Körper dieser PUT-Anfrage ist. Das Beste, was Sie auf portable Weise tun können, ist ein POST. Wenn Sie 'method =" PUT "' verwenden, vermute ich, dass der Browser die Anfrage wahrscheinlich genau wie POST behandeln wird, was bedeutet, dass die Formularfelder "multipart/form-data" codiert sind, so dass der Körper der PUT "field1 = Wert & Feld1 = Wert & ... ". Ich glaube, Sie können PUT/DELETE mit beliebigen Daten über ein JavaScript 'XMLHTTPRequest' verwenden, obwohl ich es nicht versucht habe. –

0

Wenn Sie die integrierten Funktionen von PHP verwenden möchten, aber nicht cURL, stecken Sie ziemlich fest mit fsockopen() usw.,

oder bestenfalls eine Bibliothek um diese Funktionen, wie Snoopy

5

Normalerweise wird dies durch ein verstecktes Formularfeld gemacht, und in der Anwendung (nicht der Webserver, im großen und ganzen) behandelt.

<input type="hidden" name="_method" value="put" /> 

Also in diesem Fall würden Sie einen einfachen Satz von if-else-Anweisungen verwenden, um festzustellen, ob die _method Variablen außer Kraft gesetzt wird (gültig, natürlich). Ich würde etwas wie:

$method = 'get'; 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if(isset($_POST['_method'] 
    && ($_POST['_method'] == 'PUT' || $_POST['_method'] == 'DELETE')) { 
    $method = strtolower($_POST['_method']); 
    } else { 
    $method = 'post'; 
    } 
} 

Dies wäre eine einfache Möglichkeit, den Anfragetyp für Ihre Anwendung oder Framework zu bestimmen.

+0

Das ist es auch, was ich mir ausgedacht habe ... wie Rails es macht. Aber das hängt stark von Konvention ab. Wenn jemand, der die Vorlage bearbeitet, dies nicht hinzufügt, würde REST nicht funktionieren. Aber das scheint die einzige Lösung, die ich auch finden könnte. Sag es ist nicht so :) – Housni

+1

Nein, nein! Setzen Sie diese Art von Code in das * Framework * und machen Sie es dem Code zugänglich: So macht die Ansicht nichts, und die Methode ist bereits festgelegt. –

-1

Sie können sich WebDav (PHP WebDav slide show) ansehen. Es ist auf PUSH, DELETE usw. aufgebaut. Natürlich muss der Server, auf den Sie abzielen, PUSHs und DELETES akzeptieren, was bedeuten würde, dass Apache mod_webdav oder etwas ähnliches verwendet. Andernfalls wird eine niedrigere Lösung benötigt (wie andere angegeben haben)

Verwandte Themen