summaryrefslogtreecommitdiff
path: root/cgi_main.c
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>1999-05-09 08:48:05 +0000
committerZeev Suraski <zeev@php.net>1999-05-09 08:48:05 +0000
commitbc415d5a8883bbe5b15c12e9a30f916c8010204a (patch)
tree216499649825b9005a59c0e3c5b5be67c2092871 /cgi_main.c
parent91cf2e59c47a30f075fe1c69d17550b956df9865 (diff)
downloadphp-git-bc415d5a8883bbe5b15c12e9a30f916c8010204a.tar.gz
* Finalizing the PHP version of SAPI. Support POST and cookies among other things.
* Fully implement ISAPI support - POST and cookies among other things. * Almost completely rewrote phpinfo(). Allow modules to easily display their information in phpinfo() without modifying phpinfo() itself (prototype for the module info function was changed, thus the large amount of updated module files). * Initial extended SAPI support for Apache, completely untested. * CGI now uses SAPI fully as well.
Diffstat (limited to 'cgi_main.c')
-rw-r--r--cgi_main.c37
1 files changed, 34 insertions, 3 deletions
diff --git a/cgi_main.c b/cgi_main.c
index fa438d6eac..e34d0e7e37 100644
--- a/cgi_main.c
+++ b/cgi_main.c
@@ -85,6 +85,29 @@ static void sapi_cgi_send_header(sapi_header_struct *sapi_header, void *server_c
}
+static char *sapi_cgi_read_post(SLS_D)
+{
+ uint read_bytes=0, tmp_read_bytes;
+ char *result = (char *) emalloc(SG(request_info).content_length+1);
+
+ while (read_bytes < SG(request_info).content_length) {
+ tmp_read_bytes = read(0, result+read_bytes, SG(request_info).content_length-read_bytes);
+ if (tmp_read_bytes<=0) {
+ break;
+ }
+ read_bytes += tmp_read_bytes;
+ }
+ result[read_bytes]=0;
+ return result;
+}
+
+
+static char *sapi_cgi_read_cookies(SLS_D)
+{
+ return getenv("HTTP_COOKIE");
+}
+
+
static sapi_module_struct sapi_module = {
"PHP Language", /* name */
@@ -98,6 +121,9 @@ static sapi_module_struct sapi_module = {
NULL, /* header handler */
NULL, /* send headers handler */
sapi_cgi_send_header, /* send header handler */
+
+ sapi_cgi_read_post, /* read POST data */
+ sapi_cgi_read_cookies /* read Cookies */
};
@@ -132,15 +158,19 @@ static void php_cgi_usage(char *argv0)
static void init_request_info(SLS_D)
{
- char *request_method = getenv("REQUEST_METHOD");
+ char *content_length = getenv("CONTENT_LENGTH");
+ SG(request_info).request_method = getenv("REQUEST_METHOD");
SG(request_info).query_string = getenv("QUERY_STRING");
SG(request_info).request_uri = getenv("PATH_INFO");
- if (request_method && !strcmp(request_method, "HEAD")) {
+ SG(request_info).path_translated = NULL; /* we have to update it later, when we have that information */
+ if (SG(request_info).request_method && !strcmp(SG(request_info).request_method, "HEAD")) {
SG(request_info).headers_only = 1;
} else {
SG(request_info).headers_only = 0;
}
+ SG(request_info).content_type = getenv("CONTENT_TYPE");
+ SG(request_info).content_length = (content_length?atoi(content_length):0);
}
@@ -229,6 +259,8 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
sapi_globals = ts_resource(sapi_globals_id);
#endif
+ init_request_info(SLS_C);
+ SG(server_context) = (void *) 1; /* avoid server_context==NULL checks */
CG(extended_info) = 0;
if (!cgi) { /* never execute the arguments if you are a CGI */
@@ -322,7 +354,6 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
php3_TreatHeaders();
- init_request_info(SLS_C);
if (!cgi) {
if (!SG(request_info).query_string) {