Merged GitHub PR #190: Support for the HTTP PATCH method in CLI webserver

This commit is contained in:
Lars Strojny 2012-09-18 22:16:51 +02:00
parent 1e1db9d9bb
commit aa133ea282
4 changed files with 50 additions and 0 deletions

2
NEWS
View file

@ -5,6 +5,8 @@ PHP NEWS
- CLI server: - CLI server:
. Changed response to unknown HTTP method to 501 according to RFC. . Changed response to unknown HTTP method to 501 according to RFC.
(Niklas Lindgren). (Niklas Lindgren).
. Support HTTP PATCH method. Patch by Niklas Lindgren, GitHub PR #190.
(Lars)
- Core: - Core:
. Added optional second argument for assert() to specify custom message. Patch . Added optional second argument for assert() to specify custom message. Patch

View file

@ -81,6 +81,7 @@ static const char *method_strings[] =
, "HEAD" , "HEAD"
, "POST" , "POST"
, "PUT" , "PUT"
, "PATCH"
, "CONNECT" , "CONNECT"
, "OPTIONS" , "OPTIONS"
, "TRACE" , "TRACE"
@ -627,6 +628,8 @@ size_t php_http_parser_execute (php_http_parser *parser,
parser->method = PHP_HTTP_PROPFIND; /* or HTTP_PROPPATCH */ parser->method = PHP_HTTP_PROPFIND; /* or HTTP_PROPPATCH */
} else if (index == 1 && parser->method == PHP_HTTP_POST && ch == 'U') { } else if (index == 1 && parser->method == PHP_HTTP_POST && ch == 'U') {
parser->method = PHP_HTTP_PUT; parser->method = PHP_HTTP_PUT;
} else if (index == 1 && parser->method == PHP_HTTP_POST && ch == 'A') {
parser->method = PHP_HTTP_PATCH;
} else if (index == 2 && parser->method == PHP_HTTP_UNLOCK && ch == 'S') { } else if (index == 2 && parser->method == PHP_HTTP_UNLOCK && ch == 'S') {
parser->method = PHP_HTTP_UNSUBSCRIBE; parser->method = PHP_HTTP_UNSUBSCRIBE;
} else if (index == 4 && parser->method == PHP_HTTP_PROPFIND && ch == 'P') { } else if (index == 4 && parser->method == PHP_HTTP_PROPFIND && ch == 'P') {

View file

@ -80,6 +80,7 @@ enum php_http_method
, PHP_HTTP_HEAD , PHP_HTTP_HEAD
, PHP_HTTP_POST , PHP_HTTP_POST
, PHP_HTTP_PUT , PHP_HTTP_PUT
, PHP_HTTP_PATCH
/* pathological */ /* pathological */
, PHP_HTTP_CONNECT , PHP_HTTP_CONNECT
, PHP_HTTP_OPTIONS , PHP_HTTP_OPTIONS

View file

@ -0,0 +1,44 @@
--TEST--
Implement Req #61679 (Support HTTP PATCH method)
--SKIPIF--
<?php
include "skipif.inc";
?>
--FILE--
<?php
include "php_cli_server.inc";
php_cli_server_start(<<<'PHP'
var_dump($_SERVER['REQUEST_METHOD']);
PHP
);
list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
$port = intval($port)?:80;
$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
if (!$fp) {
die("connect failed");
}
if(fwrite($fp, <<<HEADER
PATCH / HTTP/1.1
Host: {$host}
HEADER
)) {
while (!feof($fp)) {
echo fgets($fp);
}
}
fclose($fp);
?>
--EXPECTF--
HTTP/1.1 200 OK
Host: %s
Connection: close
X-Powered-By: %s
Content-type: text/html
string(5) "PATCH"