@@ -116,7 +116,7 @@ typedef struct php_cli_server_poller {
116
116
} php_cli_server_poller ;
117
117
118
118
typedef struct php_cli_server_request {
119
- enum php_http_method request_method ;
119
+ enum php_http_method request_method ;
120
120
int protocol_version ;
121
121
char * request_uri ;
122
122
size_t request_uri_len ;
@@ -247,7 +247,8 @@ static php_cli_server_http_reponse_status_code_pair status_map[] = {
247
247
static php_cli_server_http_reponse_status_code_pair template_map [] = {
248
248
{ 400 , "<h1 class=\"h\">%s</h1><p>Your browser sent a request that this server could not understand.</p>" },
249
249
{ 404 , "<h1 class=\"h\">%s</h1><p>The requested resource %s was not found on this server.</p>" },
250
- { 500 , "<h1 class=\"h\">%s</h1><p>The server is temporality unavaiable.</p>" }
250
+ { 500 , "<h1 class=\"h\">%s</h1><p>The server is temporarily unavailable.</p>" },
251
+ { 501 , "<h1 class=\"h\">%s</h1><p>Request method not supported.</p>" }
251
252
};
252
253
253
254
static php_cli_server_ext_mime_type_pair mime_type_map [] = {
@@ -275,7 +276,7 @@ static void php_cli_server_log_response(php_cli_server_client *client, int statu
275
276
276
277
ZEND_DECLARE_MODULE_GLOBALS (cli_server );
277
278
278
- /* {{{ static char php_cli_server_css[]
279
+ /* {{{ static char php_cli_server_css[]
279
280
* copied from ext/standard/info.c
280
281
*/
281
282
static const char php_cli_server_css [] = "<style type=\"text/css\">\n" \
@@ -543,7 +544,7 @@ static void sapi_cli_server_register_variable(zval *track_vars_array, const char
543
544
}
544
545
} /* }}} */
545
546
546
- static int sapi_cli_server_register_entry_cb (char * * entry TSRMLS_DC , int num_args , va_list args , zend_hash_key * hash_key ) /* {{{ */ {
547
+ static int sapi_cli_server_register_entry_cb (char * * entry TSRMLS_DC , int num_args , va_list args , zend_hash_key * hash_key ) /* {{{ */ {
547
548
zval * track_vars_array = va_arg (args , zval * );
548
549
if (hash_key -> nKeyLength ) {
549
550
char * real_key , * key ;
@@ -583,7 +584,7 @@ static void sapi_cli_server_register_variables(zval *track_vars_array TSRMLS_DC)
583
584
} else {
584
585
sapi_cli_server_register_variable (track_vars_array , "REMOTE_ADDR" , client -> addr_str TSRMLS_CC );
585
586
}
586
- }
587
+ }
587
588
{
588
589
char * tmp ;
589
590
spprintf (& tmp , 0 , "PHP %s Development Server" , PHP_VERSION );
@@ -681,7 +682,7 @@ sapi_module_struct cli_server_sapi_module = {
681
682
sapi_cli_server_log_message , /* Log message */
682
683
NULL , /* Get request time */
683
684
NULL , /* Child terminate */
684
-
685
+
685
686
STANDARD_SAPI_MODULE_PROPERTIES
686
687
}; /* }}} */
687
688
@@ -778,7 +779,7 @@ static int php_cli_server_poller_iter_on_active(php_cli_server_poller *poller, v
778
779
}
779
780
}
780
781
}
781
-
782
+
782
783
#else
783
784
php_socket_t fd = 0 ;
784
785
const php_socket_t max_fd = poller -> max_fd ;
@@ -966,7 +967,7 @@ static int php_cli_server_content_sender_send(php_cli_server_content_sender *sen
966
967
} else if (nbytes_sent == chunk -> data .immortal .len ) {
967
968
php_cli_server_chunk_dtor (chunk );
968
969
pefree (chunk , 1 );
969
- sender -> buffer .first = next ;
970
+ sender -> buffer .first = next ;
970
971
if (!next ) {
971
972
sender -> buffer .last = NULL ;
972
973
}
@@ -1345,7 +1346,7 @@ static void php_cli_server_request_translate_vpath(php_cli_server_request *reque
1345
1346
}
1346
1347
}
1347
1348
break ; /* regular file */
1348
- }
1349
+ }
1349
1350
if (prev_path ) {
1350
1351
pefree (prev_path , 1 );
1351
1352
* q = DEFAULT_SLASH ;
@@ -1384,7 +1385,7 @@ static void php_cli_server_request_translate_vpath(php_cli_server_request *reque
1384
1385
if (request -> vpath [i ] == '\\' ) {
1385
1386
request -> vpath [i ] = '/' ;
1386
1387
}
1387
- }
1388
+ }
1388
1389
}
1389
1390
#endif
1390
1391
request -> sb = sb ;
@@ -1452,7 +1453,7 @@ static void normalize_vpath(char **retval, size_t *retval_len, const char *vpath
1452
1453
}
1453
1454
}
1454
1455
}
1455
-
1456
+
1456
1457
* decoded_vpath_end = '\0' ;
1457
1458
* retval = decoded_vpath ;
1458
1459
* retval_len = decoded_vpath_end - decoded_vpath ;
@@ -1812,7 +1813,7 @@ static int php_cli_server_send_error_page(php_cli_server *server, php_cli_server
1812
1813
smart_str_append_generic_ex (& buffer , php_cli_server_buffer_size (& client -> content_sender .buffer ), 1 , size_t , _unsigned );
1813
1814
smart_str_appendl_ex (& buffer , "\r\n" , 2 , 1 );
1814
1815
smart_str_appendl_ex (& buffer , "\r\n" , 2 , 1 );
1815
-
1816
+
1816
1817
chunk = php_cli_server_chunk_heap_new (buffer .c , buffer .c , buffer .len );
1817
1818
if (!chunk ) {
1818
1819
smart_str_free_ex (& buffer , 1 );
@@ -1917,7 +1918,7 @@ static int php_cli_server_begin_send_static(php_cli_server *server, php_cli_serv
1917
1918
}
1918
1919
/* }}} */
1919
1920
1920
- static int php_cli_server_request_startup (php_cli_server * server , php_cli_server_client * client TSRMLS_DC ) { /* {{{ */
1921
+ static int php_cli_server_request_startup (php_cli_server * server , php_cli_server_client * client TSRMLS_DC ) { /* {{{ */
1921
1922
char * * auth ;
1922
1923
php_cli_server_client_populate_request_info (client , & SG (request_info ));
1923
1924
if (SUCCESS == zend_hash_find (& client -> request .headers , "Authorization" , sizeof ("Authorization" ), (void * * )& auth )) {
@@ -1942,8 +1943,8 @@ static int php_cli_server_request_shutdown(php_cli_server *server, php_cli_serve
1942
1943
SG (server_context ) = NULL ;
1943
1944
SG (rfc1867_uploaded_files ) = NULL ;
1944
1945
return SUCCESS ;
1945
- }
1946
- /* }}} */
1946
+ }
1947
+ /* }}} */
1947
1948
1948
1949
static int php_cli_server_dispatch_router (php_cli_server * server , php_cli_server_client * client TSRMLS_DC ) /* {{{ */
1949
1950
{
@@ -2002,7 +2003,7 @@ static int php_cli_server_dispatch(php_cli_server *server, php_cli_server_client
2002
2003
destroy_request_info (& SG (request_info ));
2003
2004
return SUCCESS ;
2004
2005
}
2005
- }
2006
+ }
2006
2007
2007
2008
if (server -> router ) {
2008
2009
if (!php_cli_server_dispatch_router (server , client TSRMLS_CC )) {
@@ -2016,7 +2017,7 @@ static int php_cli_server_dispatch(php_cli_server *server, php_cli_server_client
2016
2017
|| SUCCESS != php_cli_server_send_error_page (server , client , 500 TSRMLS_CC )) {
2017
2018
php_cli_server_request_shutdown (server , client TSRMLS_CC );
2018
2019
return SUCCESS ;
2019
- }
2020
+ }
2020
2021
} else {
2021
2022
if (server -> router ) {
2022
2023
static int (* send_header_func )(sapi_headers_struct * TSRMLS_DC );
@@ -2029,7 +2030,7 @@ static int php_cli_server_dispatch(php_cli_server *server, php_cli_server_client
2029
2030
sapi_module .send_headers = send_header_func ;
2030
2031
SG (sapi_headers ).send_default_content_type = 1 ;
2031
2032
SG (rfc1867_uploaded_files ) = NULL ;
2032
- }
2033
+ }
2033
2034
if (SUCCESS != php_cli_server_begin_send_static (server , client TSRMLS_CC )) {
2034
2035
php_cli_server_close_connection (server , client TSRMLS_CC );
2035
2036
}
@@ -2191,6 +2192,8 @@ static int php_cli_server_recv_event_read_request(php_cli_server *server, php_cl
2191
2192
efree (errstr );
2192
2193
php_cli_server_close_connection (server , client TSRMLS_CC );
2193
2194
return FAILURE ;
2195
+ } else if (status == 1 && client -> request .request_method == PHP_HTTP_NOT_IMPLEMENTED ) {
2196
+ return php_cli_server_send_error_page (server , client , 501 TSRMLS_CC );
2194
2197
} else if (status == 1 ) {
2195
2198
php_cli_server_poller_remove (& server -> poller , POLLIN , client -> sock );
2196
2199
php_cli_server_dispatch (server , client TSRMLS_CC );
@@ -2311,7 +2314,7 @@ static void php_cli_server_do_event_for_each_fd(php_cli_server *server, int(*rha
2311
2314
static int php_cli_server_do_event_loop (php_cli_server * server TSRMLS_DC ) /* {{{ */
2312
2315
{
2313
2316
int retval = SUCCESS ;
2314
- while (server -> is_running ) {
2317
+ while (server -> is_running ) {
2315
2318
static const struct timeval tv = { 1 , 0 };
2316
2319
int n = php_cli_server_poller_poll (& server -> poller , & tv );
2317
2320
if (n > 0 ) {
0 commit comments