|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-06-02 17:12 UTC] f_kereki at cs dot com dot uy
Description: ------------ When coding Web Services according to REST ideas, there is no way to get PUT or DELETE parameters -- something like $_GET or $_POST is needed. You can invoke a service using curl, but only GET and POST can be used; if you use PUT or DELETE you cannot get the parameters in PHP. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 00:00:01 2025 UTC |
I'm coding a Service Oriented system, and according to REST principles, I should be able to call a service with a PUT or DELETE method. For example, using AJAX, in JavaScript I would write something like: objeto= new XMLHttpRequest(); objeto.open("PUT", "my_own_service.php", true); objeto.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); objeto.onreadystatechange= some_function_of_mine; objeto.send("a_string_like_field=value&field2=value2"); but then, my_own_service.php would have no way of getting to the PUT parameters! With POST or GET methods, you can use the $_POST and $_GET (and even $_REQUEST) arrays, but there are no $_PUT or $_DELETE equivalent arrays. Note, however, that this is *not* just an AJAX problem; if you require a PHP service from within another PHP service, you would code something like: $ch= curl_init(); curl_setopt($ch, CURLOPT_URL, "my_own_service.php"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POSTFIELDS, "a_string_like_field=value&field2=value2"); $result= curl_exec($ch); curl_close($ch); Of course, this points out yet ANOTHER problem... there is no CURLOPT_PUTFIELDS! Since the format is the same, I assume my way should work, but I cannot even get to test it until I have a way of getting to the PUT parameters from within PHP. So, to resume it all, it seems to me: * there should be $_PUT and $_DELETE arrays * curl should support CURLOPT_PUTFIELDS, *or* make it clearer that CURLOPT_POSTFIELDS is to be used. Hope I was clearer this time! Best regards, Federico KerekiIf the only contents of the request body is the urlencoded "DELETE parameters" you can retrieve them by using file_get_contents("php://input"). It's not as clean as $_DELETE, but it's a workaround for now at least.I hit submit prematurely. Here's how to emulate $_DELETE: parse_str(file_get_contents('php://input'), $_DELETE);