summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Strojny <lstrojny@php.net>2012-09-18 22:16:51 +0200
committerLars Strojny <lstrojny@php.net>2012-09-18 22:16:51 +0200
commitaa133ea2821787c0cf4ac8750ddd22341752f135 (patch)
tree7351c6f7b359cfd8eccfb3bb778f452c1b664ba7
parent1e1db9d9bb8dffc9421d8d8ac0eeafcf33389d26 (diff)
downloadphp-git-aa133ea2821787c0cf4ac8750ddd22341752f135.tar.gz
Merged GitHub PR #190: Support for the HTTP PATCH method in CLI webserver
-rw-r--r--NEWS2
-rw-r--r--sapi/cli/php_http_parser.c3
-rw-r--r--sapi/cli/php_http_parser.h1
-rw-r--r--sapi/cli/tests/php_cli_server_018.phpt44
4 files changed, 50 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 339d6814c0..e769b356a6 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ PHP NEWS
- CLI server:
. Changed response to unknown HTTP method to 501 according to RFC.
(Niklas Lindgren).
+ . Support HTTP PATCH method. Patch by Niklas Lindgren, GitHub PR #190.
+ (Lars)
- Core:
. Added optional second argument for assert() to specify custom message. Patch
diff --git a/sapi/cli/php_http_parser.c b/sapi/cli/php_http_parser.c
index 4a95f82575..d3bc496f4e 100644
--- a/sapi/cli/php_http_parser.c
+++ b/sapi/cli/php_http_parser.c
@@ -81,6 +81,7 @@ static const char *method_strings[] =
, "HEAD"
, "POST"
, "PUT"
+ , "PATCH"
, "CONNECT"
, "OPTIONS"
, "TRACE"
@@ -627,6 +628,8 @@ size_t php_http_parser_execute (php_http_parser *parser,
parser->method = PHP_HTTP_PROPFIND; /* or HTTP_PROPPATCH */
} else if (index == 1 && parser->method == PHP_HTTP_POST && ch == 'U') {
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') {
parser->method = PHP_HTTP_UNSUBSCRIBE;
} else if (index == 4 && parser->method == PHP_HTTP_PROPFIND && ch == 'P') {
diff --git a/sapi/cli/php_http_parser.h b/sapi/cli/php_http_parser.h
index 0f6c13dd35..2bf2356725 100644
--- a/sapi/cli/php_http_parser.h
+++ b/sapi/cli/php_http_parser.h
@@ -80,6 +80,7 @@ enum php_http_method
, PHP_HTTP_HEAD
, PHP_HTTP_POST
, PHP_HTTP_PUT
+ , PHP_HTTP_PATCH
/* pathological */
, PHP_HTTP_CONNECT
, PHP_HTTP_OPTIONS
diff --git a/sapi/cli/tests/php_cli_server_018.phpt b/sapi/cli/tests/php_cli_server_018.phpt
new file mode 100644
index 0000000000..deb9348768
--- /dev/null
+++ b/sapi/cli/tests/php_cli_server_018.phpt
@@ -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"