@@ -348,18 +348,33 @@ static void append_http_status_line(smart_str *buffer, int protocol_version, int
348348smart_str_appendl_ex (buffer , "\r\n" , 2 , persistent );
349349} /* }}} */
350350
351- static void append_essential_headers (smart_str * buffer , php_cli_server_client * client , int persistent ) /* {{{ */
351+ static void append_essential_headers (smart_str * buffer , php_cli_server_client * client , int persistent , sapi_headers_struct * sapi_headers ) /* {{{ */
352352{
353353char * val ;
354354struct timeval tv = {0 };
355+ bool append_date_header = true;
356+
357+ if (sapi_headers != NULL ) {
358+ zend_llist_position pos ;
359+ sapi_header_struct * h = (sapi_header_struct * )zend_llist_get_first_ex (& sapi_headers -> headers , & pos );
360+ while (h ) {
361+ if (h -> header_len > strlen ("Date:" )) {
362+ if (strncasecmp (h -> header , "Date:" , strlen ("Date:" )) == 0 ) {
363+ append_date_header = false;
364+ break ;
365+ }
366+ }
367+ h = (sapi_header_struct * )zend_llist_get_next_ex (& sapi_headers -> headers , & pos );
368+ }
369+ }
355370
356371if (NULL != (val = zend_hash_str_find_ptr (& client -> request .headers , "host" , sizeof ("host" )- 1 ))) {
357372smart_str_appends_ex (buffer , "Host: " , persistent );
358373smart_str_appends_ex (buffer , val , persistent );
359374smart_str_appends_ex (buffer , "\r\n" , persistent );
360375}
361376
362- if (!gettimeofday (& tv , NULL )) {
377+ if (append_date_header && !gettimeofday (& tv , NULL )) {
363378zend_string * dt = php_format_date ("D, d M Y H:i:s" , sizeof ("D, d M Y H:i:s" ) - 1 , tv .tv_sec , 0 );
364379smart_str_appends_ex (buffer , "Date: " , persistent );
365380smart_str_appends_ex (buffer , dt -> val , persistent );
@@ -552,7 +567,7 @@ static int sapi_cli_server_send_headers(sapi_headers_struct *sapi_headers) /* {{
552567append_http_status_line (& buffer , client -> request .protocol_version , SG (sapi_headers ).http_response_code , 0 );
553568}
554569
555- append_essential_headers (& buffer , client , 0 );
570+ append_essential_headers (& buffer , client , 0 , sapi_headers );
556571
557572h = (sapi_header_struct * )zend_llist_get_first_ex (& sapi_headers -> headers , & pos );
558573while (h ) {
@@ -1997,7 +2012,7 @@ static int php_cli_server_send_error_page(php_cli_server *server, php_cli_server
19972012/* out of memory */
19982013goto fail ;
19992014}
2000- append_essential_headers (& buffer , client , 1 );
2015+ append_essential_headers (& buffer , client , 1 , NULL );
20012016smart_str_appends_ex (& buffer , "Content-Type: text/html; charset=UTF-8\r\n" , 1 );
20022017smart_str_appends_ex (& buffer , "Content-Length: " , 1 );
20032018smart_str_append_unsigned_ex (& buffer , php_cli_server_buffer_size (& client -> content_sender .buffer ), 1 );
@@ -2093,7 +2108,7 @@ static int php_cli_server_begin_send_static(php_cli_server *server, php_cli_serv
20932108php_cli_server_log_response (client , 500 , NULL );
20942109return FAILURE ;
20952110}
2096- append_essential_headers (& buffer , client , 1 );
2111+ append_essential_headers (& buffer , client , 1 , NULL );
20972112if (mime_type ) {
20982113smart_str_appendl_ex (& buffer , "Content-Type: " , sizeof ("Content-Type: " ) - 1 , 1 );
20992114smart_str_appends_ex (& buffer , mime_type , 1 );
0 commit comments