mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
* Finally commit that -q patch
* Refine SAPI built in header support * Use DllMain() in ISAPI to clean after threads and initialize tsrm/sapi as soon as possible.
This commit is contained in:
parent
702829709c
commit
ceeb9b38ba
6 changed files with 62 additions and 21 deletions
21
cgi_main.c
21
cgi_main.c
|
@ -170,6 +170,10 @@ static void init_request_info(SLS_D)
|
|||
}
|
||||
SG(request_info).content_type = getenv("CONTENT_TYPE");
|
||||
SG(request_info).content_length = (content_length?atoi(content_length):0);
|
||||
|
||||
/* CGI does not support HTTP authentication */
|
||||
SG(request_info).auth_user = NULL;
|
||||
SG(request_info).auth_password = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -182,6 +186,7 @@ int main(int argc, char *argv[])
|
|||
char *_cgi_filename=NULL;
|
||||
int _cgi_started=0;
|
||||
int behavior=PHP_MODE_STANDARD;
|
||||
int no_headers=0;
|
||||
#if SUPPORT_INTERACTIVE
|
||||
int interactive=0;
|
||||
#endif
|
||||
|
@ -273,11 +278,14 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
|
|||
return FAILURE;
|
||||
}
|
||||
}
|
||||
if (no_headers) {
|
||||
SG(headers_sent) = 1;
|
||||
}
|
||||
_cgi_started=1;
|
||||
_cgi_filename = estrdup(optarg);
|
||||
/* break missing intentionally */
|
||||
case 'q':
|
||||
php3_noheader();
|
||||
no_headers = 1;
|
||||
break;
|
||||
case 'v':
|
||||
if (!_cgi_started) {
|
||||
|
@ -286,6 +294,9 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
|
|||
return FAILURE;
|
||||
}
|
||||
}
|
||||
if (no_headers) {
|
||||
SG(headers_sent) = 1;
|
||||
}
|
||||
php3_printf("%s\n", PHP_VERSION);
|
||||
exit(1);
|
||||
break;
|
||||
|
@ -296,6 +307,9 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
|
|||
return FAILURE;
|
||||
}
|
||||
}
|
||||
if (no_headers) {
|
||||
SG(headers_sent) = 1;
|
||||
}
|
||||
_cgi_started=1;
|
||||
php3_TreatHeaders();
|
||||
_php3_info();
|
||||
|
@ -323,8 +337,8 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
|
|||
break;
|
||||
case 'h':
|
||||
case '?':
|
||||
php3_noheader();
|
||||
zend_output_startup();
|
||||
SG(headers_sent) = 1;
|
||||
php_cgi_usage(argv[0]);
|
||||
exit(1);
|
||||
break;
|
||||
|
@ -344,6 +358,9 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
|
|||
return FAILURE;
|
||||
}
|
||||
}
|
||||
if (no_headers) {
|
||||
SG(headers_sent) = 1;
|
||||
}
|
||||
file_handle.filename = "-";
|
||||
file_handle.type = ZEND_HANDLE_FP;
|
||||
file_handle.handle.fp = stdin;
|
||||
|
|
|
@ -69,13 +69,6 @@ int php3_init_head(INIT_FUNC_ARGS)
|
|||
}
|
||||
|
||||
|
||||
PHPAPI void php3_noheader(void)
|
||||
{
|
||||
php3_PrintHeader = 0;
|
||||
header_called = 1;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/* Adds header information */
|
||||
void php4i_add_header_information(char *header_information, uint header_length)
|
||||
|
|
|
@ -58,7 +58,6 @@ extern void php3_SetCookie(INTERNAL_FUNCTION_PARAMETERS);
|
|||
|
||||
void php4i_add_header_information(char *header_information, uint header_length);
|
||||
|
||||
PHPAPI void php3_noheader(void);
|
||||
PHPAPI int php3_header(void);
|
||||
int php3_headers_unsent(void);
|
||||
|
||||
|
|
45
main/SAPI.c
45
main/SAPI.c
|
@ -91,14 +91,14 @@ SAPI_API void sapi_activate(SLS_D)
|
|||
zend_llist_init(&SG(sapi_headers).headers, sizeof(sapi_header_struct), (void (*)(void *)) sapi_free_header, 0);
|
||||
SG(sapi_headers).send_default_content_type = 1;
|
||||
SG(sapi_headers).http_response_code = 200;
|
||||
SG(sapi_headers).http_status_line = NULL;
|
||||
SG(headers_sent) = 0;
|
||||
SG(read_post_bytes) = 0;
|
||||
SG(request_info).post_data = NULL;
|
||||
if (SG(server_context)) {
|
||||
if (SG(request_info).request_method
|
||||
&& !strcmp(SG(request_info).request_method, "POST")) {
|
||||
sapi_read_post_data(SLS_C);
|
||||
} else {
|
||||
SG(request_info).post_data = NULL;
|
||||
}
|
||||
SG(request_info).cookie_data = sapi_module.read_cookies(SLS_C);
|
||||
}
|
||||
|
@ -108,9 +108,17 @@ SAPI_API void sapi_activate(SLS_D)
|
|||
SAPI_API void sapi_deactivate(SLS_D)
|
||||
{
|
||||
zend_llist_destroy(&SG(sapi_headers).headers);
|
||||
if (SG(server_context) && SG(request_info).post_data) {
|
||||
if (SG(request_info).post_data) {
|
||||
efree(SG(request_info).post_data);
|
||||
}
|
||||
if (SG(server_context)) {
|
||||
if (SG(request_info).auth_user) {
|
||||
efree(SG(request_info).auth_user);
|
||||
}
|
||||
if (SG(request_info).auth_password) {
|
||||
efree(SG(request_info).auth_password);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -133,15 +141,22 @@ SAPI_API int sapi_add_header(char *header_line, uint header_line_len)
|
|||
sapi_header.header = header_line;
|
||||
sapi_header.header_len = header_line_len;
|
||||
|
||||
colon_offset = strchr(header_line, ':');
|
||||
if (colon_offset) {
|
||||
*colon_offset = 0;
|
||||
if (!STRCASECMP(header_line, "Content-Type")) {
|
||||
SG(sapi_headers).send_default_content_type = 0;
|
||||
} else if (!STRCASECMP(header_line, "Location")) {
|
||||
SG(sapi_headers).http_response_code = 302; /* redirect */
|
||||
/* Check the header for a few cases that we have special support for in SAPI */
|
||||
if (!memcmp(header_line, "HTTP/", 5)) {
|
||||
SG(sapi_headers).http_status_line = header_line;
|
||||
} else {
|
||||
colon_offset = strchr(header_line, ':');
|
||||
if (colon_offset) {
|
||||
*colon_offset = 0;
|
||||
if (!STRCASECMP(header_line, "Content-Type")) {
|
||||
SG(sapi_headers).send_default_content_type = 0;
|
||||
} else if (!STRCASECMP(header_line, "Location")) {
|
||||
SG(sapi_headers).http_response_code = 302; /* redirect */
|
||||
} else if (!STRCASECMP(header_line, "WWW-Authenticate")) { /* HTTP Authentication */
|
||||
SG(sapi_headers).http_response_code = 401; /* authentication-required */
|
||||
}
|
||||
*colon_offset = ':';
|
||||
}
|
||||
*colon_offset = ':';
|
||||
}
|
||||
|
||||
if (sapi_module.header_handler) {
|
||||
|
@ -182,6 +197,14 @@ SAPI_API int sapi_send_headers()
|
|||
return SUCCESS;
|
||||
break;
|
||||
case SAPI_HEADER_DO_SEND:
|
||||
if (SG(sapi_headers).http_status_line) {
|
||||
sapi_header_struct http_status_line;
|
||||
|
||||
http_status_line.header = SG(sapi_headers).http_status_line;
|
||||
http_status_line.header_len = strlen(SG(sapi_headers).http_status_line);
|
||||
sapi_module.send_header(&http_status_line, SG(server_context));
|
||||
efree(SG(sapi_headers).http_status_line);
|
||||
}
|
||||
if (SG(sapi_headers).send_default_content_type) {
|
||||
sapi_module.send_header(&default_header, SG(server_context));
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ typedef struct {
|
|||
zend_llist headers;
|
||||
int http_response_code;
|
||||
unsigned char send_default_content_type;
|
||||
char *http_status_line;
|
||||
} sapi_headers_struct;
|
||||
|
||||
|
||||
|
@ -49,6 +50,10 @@ typedef struct {
|
|||
char *content_type;
|
||||
|
||||
unsigned char headers_only;
|
||||
|
||||
/* for HTTP authentication */
|
||||
char *auth_user;
|
||||
char *auth_password;
|
||||
} sapi_request_info;
|
||||
|
||||
|
||||
|
|
|
@ -211,6 +211,10 @@ SOURCE=.\php_ini.h
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\php_regex.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ext\standard\quot_print.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue