Re: cvs: php4 /sapi/cgi cgi_main.c
| From: | Thies C. Arntzen | Date: | Fri, 10 May 2002 15:14:18 +0000 |
| Subject: | Re: cvs: php4 /sapi/cgi cgi_main.c | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-11808@lists.php.net to get a copy of this message | ||
On Thu, May 09, 2002 at 07:32:40PM -0000, Preston L. Bannister wrote:
> pbannister Thu May 9 15:32:40 2002 EDT
>
> Modified files:
> /php4/sapi/cgi cgi_main.c
> Log:
> Detect when running under IIS and not require explicit setting of force_redirect.
> This means an explicit php.ini setting is no longer required.
please revert and commit your fix _without_ whitespace
changes!
re,
tc
>
> Index: php4/sapi/cgi/cgi_main.c
> diff -u php4/sapi/cgi/cgi_main.c:1.162 php4/sapi/cgi/cgi_main.c:1.163
> --- php4/sapi/cgi/cgi_main.c:1.162 Thu May 9 05:36:43 2002
> +++ php4/sapi/cgi/cgi_main.c Thu May 9 15:32:39 2002
> @@ -116,11 +116,11 @@
>
> #endif
>
> -#define PHP_MODE_STANDARD 1
> -#define PHP_MODE_HIGHLIGHT 2
> -#define PHP_MODE_INDENT 3
> -#define PHP_MODE_LINT 4
> -#define PHP_MODE_STRIP 5
> +#define PHP_MODE_STANDARD 1
> +#define PHP_MODE_HIGHLIGHT 2
> +#define PHP_MODE_INDENT 3
> +#define PHP_MODE_LINT 4
> +#define PHP_MODE_STRIP 5
>
> extern char *ap_php_optarg;
> extern int ap_php_optind;
> @@ -129,14 +129,14 @@
>
> static int _print_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
> {
> - php_printf("%s\n", module->name);
> - return 0;
> + php_printf("%s\n", module->name);
> + return 0;
> }
>
> static int _print_extension_info(zend_extension *module, void *arg TSRMLS_DC)
> {
> - php_printf("%s\n", module->name);
> - return 0;
> + php_printf("%s\n", module->name);
> + return 0;
> }
>
> #ifndef STDOUT_FILENO
> @@ -146,170 +146,170 @@
> static inline size_t sapi_cgibin_single_write(const char *str, uint str_length)
> {
> #ifdef PHP_WRITE_STDOUT
> - long ret;
> + long ret;
> #else
> - size_t ret;
> + size_t ret;
> #endif
>
> #ifdef PHP_FASTCGI
> - if (!FCGX_IsCGI()) {
> - return FCGX_PutStr( str, str_length, out );
> - }
> + if (!FCGX_IsCGI()) {
> + return FCGX_PutStr( str, str_length, out );
> + }
> #endif
> #ifdef PHP_WRITE_STDOUT
> - ret = write(STDOUT_FILENO, str, str_length);
> - if (ret <= 0) return 0;
> - return ret;
> + ret = write(STDOUT_FILENO, str, str_length);
> + if (ret <= 0) return 0;
> + return ret;
> #else
> - ret = fwrite(str, 1, MIN(str_length, 16384), stdout);
> - return ret;
> + ret = fwrite(str, 1, MIN(str_length, 16384), stdout);
> + return ret;
> #endif
> }
>
> static int sapi_cgibin_ub_write(const char *str, uint str_length TSRMLS_DC)
> {
> - const char *ptr = str;
> - uint remaining = str_length;
> - size_t ret;
> -
> - while (remaining > 0)
> - {
> - ret = sapi_cgibin_single_write(ptr, remaining);
> - if (!ret) {
> - php_handle_aborted_connection();
> - }
> - ptr += ret;
> - remaining -= ret;
> - }
> + const char *ptr = str;
> + uint remaining = str_length;
> + size_t ret;
> +
> + while (remaining > 0)
> + {
> + ret = sapi_cgibin_single_write(ptr, remaining);
> + if (!ret) {
> + php_handle_aborted_connection();
> + }
> + ptr += ret;
> + remaining -= ret;
> + }
>
> - return str_length;
> + return str_length;
> }
>
>
> static void sapi_cgibin_flush(void *server_context)
> {
> #ifdef PHP_FASTCGI
> - if (!FCGX_IsCGI()) {
> - if( FCGX_FFlush( out ) == -1 ) {
> - php_handle_aborted_connection();
> - }
> - } else
> -#endif
> - if (fflush(stdout)==EOF) {
> - php_handle_aborted_connection();
> - }
> + if (!FCGX_IsCGI()) {
> + if( FCGX_FFlush( out ) == -1 ) {
> + php_handle_aborted_connection();
> + }
> + } else
> +#endif
> + if (fflush(stdout)==EOF) {
> + php_handle_aborted_connection();
> + }
> }
>
>
> static void sapi_cgi_send_header(sapi_header_struct *sapi_header, void *server_context
> TSRMLS_DC)
> {
> - if (sapi_header) {
> - PHPWRITE_H(sapi_header->header, sapi_header->header_len);
> - }
> - PHPWRITE_H("\r\n", 2);
> + if (sapi_header) {
> + PHPWRITE_H(sapi_header->header, sapi_header->header_len);
> + }
> + PHPWRITE_H("\r\n", 2);
> }
>
>
> static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
> {
> - uint read_bytes=0, tmp_read_bytes;
> + uint read_bytes=0, tmp_read_bytes;
> #ifdef PHP_FASTCGI
> - char *pos = buffer;
> + char *pos = buffer;
> #endif
>
> - count_bytes = MIN(count_bytes, (uint)SG(request_info).content_length-SG(read_post_bytes));
> - while (read_bytes < count_bytes) {
> + count_bytes = MIN(count_bytes, (uint)SG(request_info).content_length-SG(read_post_bytes));
> + while (read_bytes < count_bytes) {
> #ifdef PHP_FASTCGI
> - if (!FCGX_IsCGI()) {
> - tmp_read_bytes = FCGX_GetStr( pos, count_bytes-read_bytes, in );
> - pos += tmp_read_bytes;
> - } else
> + if (!FCGX_IsCGI()) {
> + tmp_read_bytes = FCGX_GetStr( pos, count_bytes-read_bytes, in );
> + pos += tmp_read_bytes;
> + } else
> #endif
> - tmp_read_bytes = read(0, buffer+read_bytes, count_bytes-read_bytes);
> + tmp_read_bytes = read(0, buffer+read_bytes, count_bytes-read_bytes);
>
> - if (tmp_read_bytes<=0) {
> - break;
> - }
> - read_bytes += tmp_read_bytes;
> - }
> - return read_bytes;
> + if (tmp_read_bytes<=0) {
> + break;
> + }
> + read_bytes += tmp_read_bytes;
> + }
> + return read_bytes;
> }
>
>
> static char *sapi_cgi_read_cookies(TSRMLS_D)
> {
> - return getenv("HTTP_COOKIE");
> + return getenv("HTTP_COOKIE");
> }
>
>
> static void sapi_cgi_register_variables(zval *track_vars_array TSRMLS_DC)
> {
> - /* In CGI mode, we consider the environment to be a part of the server
> - * variables
> - */
> - php_import_environment_variables(track_vars_array TSRMLS_CC);
> + /* In CGI mode, we consider the environment to be a part of the server
> + * variables
> + */
> + php_import_environment_variables(track_vars_array TSRMLS_CC);
>
> - /* Build the special-case PHP_SELF variable for the CGI version */
> - php_register_variable("PHP_SELF", (SG(request_info).request_uri ?
> SG(request_info).request_uri:""), track_vars_array TSRMLS_CC);
> + /* Build the special-case PHP_SELF variable for the CGI version */
> + php_register_variable("PHP_SELF", (SG(request_info).request_uri ?
> SG(request_info).request_uri:""), track_vars_array TSRMLS_CC);
> }
>
>
> static void sapi_cgi_log_message(char *message)
> {
> - if (php_header()) {
> - fprintf(stderr, "%s", message);
> - fprintf(stderr, "\n");
> - }
> + if (php_header()) {
> + fprintf(stderr, "%s", message);
> + fprintf(stderr, "\n");
> + }
> }
>
> static int sapi_cgi_deactivate(TSRMLS_D)
> {
> - fflush(stdout);
> - if(SG(request_info).argv0) {
> - free(SG(request_info).argv0);
> - SG(request_info).argv0 = NULL;
> - }
> - return SUCCESS;
> + fflush(stdout);
> + if(SG(request_info).argv0) {
> + free(SG(request_info).argv0);
> + SG(request_info).argv0 = NULL;
> + }
> + return SUCCESS;
> }
>
>
> /* {{{ sapi_module_struct cgi_sapi_module
> */
> static sapi_module_struct cgi_sapi_module = {
> - "cgi", /* name */
> + "cgi", /* name */
> #ifdef PHP_FASTCGI
> - "CGI/FastCGI", /* pretty name */
> + "CGI/FastCGI", /* pretty name */
> #else
> - "CGI", /* pretty name */
> + "CGI", /* pretty name */
> #endif
> -
> - php_module_startup, /* startup */
> - php_module_shutdown_wrapper, /* shutdown */
>
> - NULL, /* activate */
> - sapi_cgi_deactivate, /* deactivate */
> + php_module_startup, /* startup */
> + php_module_shutdown_wrapper, /* shutdown */
>
> - sapi_cgibin_ub_write, /* unbuffered write */
> - sapi_cgibin_flush, /* flush */
> - NULL, /* get uid */
> - NULL, /* getenv */
> + NULL, /* activate */
> + sapi_cgi_deactivate, /* deactivate */
>
> - php_error, /* error handler */
> + sapi_cgibin_ub_write, /* unbuffered write */
> + sapi_cgibin_flush, /* flush */
> + NULL, /* get uid */
> + NULL, /* getenv */
>
> - NULL, /* header handler */
> - NULL, /* send headers handler */
> - sapi_cgi_send_header, /* send header handler */
> + php_error, /* error handler */
>
> - sapi_cgi_read_post, /* read POST data */
> - sapi_cgi_read_cookies, /* read Cookies */
> + NULL, /* header handler */
> + NULL, /* send headers handler */
> + sapi_cgi_send_header, /* send header handler */
>
> - sapi_cgi_register_variables, /* register server variables */
> - sapi_cgi_log_message, /* Log message */
> + sapi_cgi_read_post, /* read POST data */
> + sapi_cgi_read_cookies, /* read Cookies */
>
> - NULL, /* Block interruptions */
> - NULL, /* Unblock interruptions */
> + sapi_cgi_register_variables, /* register server variables */
> + sapi_cgi_log_message, /* Log message */
>
> - STANDARD_SAPI_MODULE_PROPERTIES
> + NULL, /* Block interruptions */
> + NULL, /* Unblock interruptions */
> +
> + STANDARD_SAPI_MODULE_PROPERTIES
> };
> /* }}} */
>
> @@ -317,31 +317,31 @@
> */
> static void php_cgi_usage(char *argv0)
> {
> - char *prog;
> + char *prog;
>
> - prog = strrchr(argv0, '/');
> - if (prog) {
> - prog++;
> - } else {
> - prog = "php";
> - }
> -
> - php_printf("Usage: %s [-q] [-h] [-s [-v] [-i] [-f <file>] | {<file>
> [args...]}\n"
> - " -q Quiet-mode. Suppress HTTP Header output.\n"
> - " -s Display colour syntax highlighted source.\n"
> - " -w Display source with stripped comments and whitespace.\n"
> - " -f <file> Parse <file>. Implies `-q'\n"
> - " -v Version number\n"
> - " -C Do not chdir to the script's directory\n"
> - " -c <path>|<file> Look for php.ini file in this directory\n"
> - " -a Run interactively\n"
> - " -d foo[=bar] Define INI entry foo with value 'bar'\n"
> - " -e Generate extended information for debugger/profiler\n"
> - " -z <file> Load Zend extension <file>.\n"
> - " -l Syntax check only (lint)\n"
> - " -m Show compiled in modules\n"
> - " -i PHP information\n"
> - " -h This help\n", prog);
> + prog = strrchr(argv0, '/');
> + if (prog) {
> + prog++;
> + } else {
> + prog = "php";
> + }
> +
> + php_printf("Usage: %s [-q] [-h] [-s [-v] [-i] [-f <file>] | {<file>
> [args...]}\n"
> + " -q Quiet-mode. Suppress HTTP Header output.\n"
> + " -s Display colour syntax highlighted source.\n"
> + " -w Display source with stripped comments and
> whitespace.\n"
> + " -f <file> Parse <file>. Implies `-q'\n"
> + " -v Version number\n"
> + " -C Do not chdir to the script's directory\n"
> + " -c <path>|<file> Look for php.ini file in this
> directory\n"
> + " -a Run interactively\n"
> + " -d foo[=bar] Define INI entry foo with value
> 'bar'\n"
> + " -e Generate extended information for
> debugger/profiler\n"
> + " -z <file> Load Zend extension <file>.\n"
> + " -l Syntax check only (lint)\n"
> + " -m Show compiled in modules\n"
> + " -i PHP information\n"
> + " -h This help\n", prog);
> }
> /* }}} */
>
> @@ -349,252 +349,260 @@
> */
> static void init_request_info(TSRMLS_D)
> {
> - char *content_length = getenv("CONTENT_LENGTH");
> - char *content_type = getenv("CONTENT_TYPE");
> - const char *auth;
> + char *content_length = getenv("CONTENT_LENGTH");
> + char *content_type = getenv("CONTENT_TYPE");
> + const char *auth;
>
> #if 0
> /* SG(request_info).path_translated is always set to NULL at the end of this function
> call so why the hell did this code exist in the first place? Am I missing something? */
> - char *script_filename;
> + char *script_filename;
>
>
> - script_filename = getenv("SCRIPT_FILENAME");
> - /* Hack for annoying servers that do not set SCRIPT_FILENAME for us */
> - if (!script_filename) {
> - script_filename = SG(request_info).argv0;
> - }
> + script_filename = getenv("SCRIPT_FILENAME");
> + /* Hack for annoying servers that do not set SCRIPT_FILENAME for us */
> + if (!script_filename) {
> + script_filename = SG(request_info).argv0;
> + }
> #ifdef PHP_WIN32
> - /* FIXME WHEN APACHE NT IS FIXED */
> - /* a hack for apache nt because it does not appear to set argv[1] and sets
> - script filename to php.exe thus makes us parse php.exe instead of file.php
> - requires we get the info from path translated. This can be removed at
> - such a time that apache nt is fixed */
> - if (!script_filename) {
> - script_filename = getenv("PATH_TRANSLATED");
> - }
> -#endif
> -
> - /* doc_root configuration variable is currently ignored,
> - as it is with every other access method currently also. */
> -
> - /* We always need to emalloc() filename, since it gets placed into
> - the include file hash table, and gets freed with that table.
> - Notice that this means that we don't need to efree() it in
> - php_destroy_request_info()! */
> + /* FIXME WHEN APACHE NT IS FIXED */
> + /* a hack for apache nt because it does not appear to set argv[1] and sets
> + script filename to php.exe thus makes us parse php.exe instead of file.php
> + requires we get the info from path translated. This can be removed at
> + such a time that apache nt is fixed */
> + if (!script_filename) {
> + script_filename = getenv("PATH_TRANSLATED");
> + }
> +#endif
> +
> + /* doc_root configuration variable is currently ignored,
> + as it is with every other access method currently also. */
> +
> + /* We always need to emalloc() filename, since it gets placed into
> + the include file hash table, and gets freed with that table.
> + Notice that this means that we don't need to efree() it in
> + php_destroy_request_info()! */
> #if DISCARD_PATH
> - if (script_filename) {
> - SG(request_info).path_translated = estrdup(script_filename);
> - } else {
> - SG(request_info).path_translated = NULL;
> - }
> + if (script_filename) {
> + SG(request_info).path_translated = estrdup(script_filename);
> + } else {
> + SG(request_info).path_translated = NULL;
> + }
> #endif
>
> #endif /* 0 */
>
> - 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 (!SG(request_info).request_uri) {
> - SG(request_info).request_uri = getenv("SCRIPT_NAME");
> - }
> - SG(request_info).path_translated = NULL; /* we have to update it later, when we have that
> information */
> - SG(request_info).content_type = (content_type ? content_type : "" );
> - SG(request_info).content_length = (content_length?atoi(content_length):0);
> - SG(sapi_headers).http_response_code = 200;
> -
> - /* The CGI RFC allows servers to pass on unvalidated Authorization data */
> - auth = getenv("HTTP_AUTHORIZATION");
> - php_handle_auth_data(auth TSRMLS_CC);
> + 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 (!SG(request_info).request_uri) {
> + SG(request_info).request_uri = getenv("SCRIPT_NAME");
> + }
> + SG(request_info).path_translated = NULL; /* we have to update it later, when we have that
> information */
> + SG(request_info).content_type = (content_type ? content_type : "" );
> + SG(request_info).content_length = (content_length?atoi(content_length):0);
> + SG(sapi_headers).http_response_code = 200;
> +
> + /* The CGI RFC allows servers to pass on unvalidated Authorization data */
> + auth = getenv("HTTP_AUTHORIZATION");
> + php_handle_auth_data(auth TSRMLS_CC);
> }
> /* }}} */
>
> static void define_command_line_ini_entry(char *arg)
> {
> - char *name, *value;
> + char *name, *value;
>
> - name = arg;
> - value = strchr(arg, '=');
> - if (value) {
> - *value = 0;
> - value++;
> - } else {
> - value = "1";
> - }
> - zend_alter_ini_entry(name, strlen(name)+1, value, strlen(value), PHP_INI_SYSTEM,
> PHP_INI_STAGE_ACTIVATE);
> + name = arg;
> + value = strchr(arg, '=');
> + if (value) {
> + *value = 0;
> + value++;
> + } else {
> + value = "1";
> + }
> + zend_alter_ini_entry(name, strlen(name)+1, value, strlen(value), PHP_INI_SYSTEM,
> PHP_INI_STAGE_ACTIVATE);
> }
>
>
> static void php_register_command_line_global_vars(char **arg TSRMLS_DC)
> {
> - char *var, *val;
> + char *var, *val;
>
> - var = *arg;
> - val = strchr(var, '=');
> - if (!val) {
> - printf("No value specified for variable '%s'\n", var);
> - } else {
> - *val++ = '\0';
> - php_register_variable(var, val, NULL TSRMLS_CC);
> - }
> - efree(*arg);
> + var = *arg;
> + val = strchr(var, '=');
> + if (!val) {
> + printf("No value specified for variable '%s'\n", var);
> + } else {
> + *val++ = '\0';
> + php_register_variable(var, val, NULL TSRMLS_CC);
> + }
> + efree(*arg);
> }
>
> /* {{{ main
> */
> int main(int argc, char *argv[])
> {
> - int exit_status = SUCCESS;
> - int cgi = 0, c, i, len;
> - zend_file_handle file_handle;
> - int retval = FAILURE;
> - char *s;
> + int exit_status = SUCCESS;
> + int cgi = 0, c, i, len;
> + zend_file_handle file_handle;
> + int retval = FAILURE;
> + char *s;
> /* temporary locals */
> - int behavior=PHP_MODE_STANDARD;
> - int no_headers=0;
> - int orig_optind=ap_php_optind;
> - char *orig_optarg=ap_php_optarg;
> - char *argv0=NULL;
> - char *script_file=NULL;
> - zend_llist global_vars;
> - int interactive=0;
> + int behavior=PHP_MODE_STANDARD;
> + int no_headers=0;
> + int orig_optind=ap_php_optind;
> + char *orig_optarg=ap_php_optarg;
> + char *argv0=NULL;
> + char *script_file=NULL;
> + zend_llist global_vars;
> + int interactive=0;
>
> #if FORCE_CGI_REDIRECT
> - int force_redirect = 1;
> - char *redirect_status_env = NULL;
> + int force_redirect = 1;
> + char *redirect_status_env = NULL;
> #endif
>
> /* end of temporary locals */
> #ifdef ZTS
> - zend_compiler_globals *compiler_globals;
> - zend_executor_globals *executor_globals;
> - php_core_globals *core_globals;
> - sapi_globals_struct *sapi_globals;
> - void ***tsrm_ls;
> + zend_compiler_globals *compiler_globals;
> + zend_executor_globals *executor_globals;
> + php_core_globals *core_globals;
> + sapi_globals_struct *sapi_globals;
> + void ***tsrm_ls;
> #endif
>
> #ifdef PHP_FASTCGI
> - int env_size, cgi_env_size;
> - int max_requests = 500;
> - int requests = 0;
> - int fastcgi = !FCGX_IsCGI();
> + int env_size, cgi_env_size;
> + int max_requests = 500;
> + int requests = 0;
> + int fastcgi = !FCGX_IsCGI();
> #ifdef PHP_WIN32
> - int impersonate = 0;
> + int impersonate = 0;
> #endif
>
> - if (fastcgi) {
> - /* Calculate environment size */
> - env_size = 0;
> - while( environ[ env_size ] ) { env_size++; }
> - /* Also include the final NULL pointer */
> - env_size++;
> -
> - /* Allocate for our environment */
> - orig_env = malloc( env_size * sizeof( char *));
> - if( !orig_env ) {
> - perror( "Can't malloc environment" );
> - exit( 1 );
> - }
> - memcpy( orig_env, environ, env_size * sizeof( char *));
> - }
> + if (fastcgi) {
> + /* Calculate environment size */
> + env_size = 0;
> + while( environ[ env_size ] ) { env_size++; }
> + /* Also include the final NULL pointer */
> + env_size++;
> +
> + /* Allocate for our environment */
> + orig_env = malloc( env_size * sizeof( char *));
> + if( !orig_env ) {
> + perror( "Can't malloc environment" );
> + exit( 1 );
> + }
> + memcpy( orig_env, environ, env_size * sizeof( char *));
> + }
> #endif
>
> #ifdef HAVE_SIGNAL_H
> #if defined(SIGPIPE) && defined(SIG_IGN)
> - signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE in standalone mode so
> - that sockets created via fsockopen()
> - don't kill PHP if the remote site
> - closes it. in apache|apxs mode apache
> - does that for us! thies@thieso.net
> - 20000419 */
> + signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE in standalone mode so
> + that sockets created via fsockopen()
> + don't kill PHP if the remote site
> + closes it. in apache|apxs mode apache
> + does that for us! thies@thieso.net
> + 20000419 */
> #endif
> #endif
>
>
> #ifdef ZTS
> - tsrm_startup(1, 1, 0, NULL);
> + tsrm_startup(1, 1, 0, NULL);
> #endif
>
> - sapi_startup(&cgi_sapi_module);
> + sapi_startup(&cgi_sapi_module);
>
> #ifdef PHP_WIN32
> - _fmode = _O_BINARY; /*sets default for file streams to binary */
> - setmode(_fileno(stdin), O_BINARY); /* make the stdio mode be binary */
> - setmode(_fileno(stdout), O_BINARY); /* make the stdio mode be binary */
> - setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */
> + _fmode = _O_BINARY; /*sets default for file streams to binary */
> + setmode(_fileno(stdin), O_BINARY); /* make the stdio mode be binary */
> + setmode(_fileno(stdout), O_BINARY); /* make the stdio mode be binary */
> + setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */
> #endif
>
>
> - /* Make sure we detect we are a cgi - a bit redundancy here,
> - but the default case is that we have to check only the first one. */
> - if (getenv("SERVER_SOFTWARE")
> - || getenv("SERVER_NAME")
> - || getenv("GATEWAY_INTERFACE")
> - || getenv("REQUEST_METHOD")) {
> - cgi = 1;
> - if (argc > 1) {
> - argv0 = strdup(argv[1]);
> - } else {
> - argv0 = NULL;
> - }
> - }
> -
> - if (!cgi
> -#ifdef PHP_FASTCGI
> - /* allow ini override for fastcgi */
> -#endif
> - ) {
> - while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
> - switch (c) {
> - case 'c':
> - cgi_sapi_module.php_ini_path_override = strdup(ap_php_optarg);
> - break;
> - }
> -
> - }
> - ap_php_optind = orig_optind;
> - ap_php_optarg = orig_optarg;
> - }
> + /* Make sure we detect we are a cgi - a bit redundancy here,
> + but the default case is that we have to check only the first one. */
> + if (getenv("SERVER_SOFTWARE")
> + || getenv("SERVER_NAME")
> + || getenv("GATEWAY_INTERFACE")
> + || getenv("REQUEST_METHOD")) {
> + cgi = 1;
> + if (argc > 1) {
> + argv0 = strdup(argv[1]);
> + } else {
> + argv0 = NULL;
> + }
> + }
> +
> + if (!cgi
> +#ifdef PHP_FASTCGI
> + /* allow ini override for fastcgi */
> +#endif
> + ) {
> + while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
> + switch (c) {
> + case 'c':
> + cgi_sapi_module.php_ini_path_override = strdup(ap_php_optarg);
> + break;
> + }
> +
> + }
> + ap_php_optind = orig_optind;
> + ap_php_optarg = orig_optarg;
> + }
>
>
> #ifdef ZTS
> - compiler_globals = ts_resource(compiler_globals_id);
> - executor_globals = ts_resource(executor_globals_id);
> - core_globals = ts_resource(core_globals_id);
> - sapi_globals = ts_resource(sapi_globals_id);
> - tsrm_ls = ts_resource(0);
> + compiler_globals = ts_resource(compiler_globals_id);
> + executor_globals = ts_resource(executor_globals_id);
> + core_globals = ts_resource(core_globals_id);
> + sapi_globals = ts_resource(sapi_globals_id);
> + tsrm_ls = ts_resource(0);
> #endif
>
> - /* startup after we get the above ini override se we get things right */
> - if (php_module_startup(&cgi_sapi_module)==FAILURE) {
> + /* startup after we get the above ini override se we get things right */
> + if (php_module_startup(&cgi_sapi_module)==FAILURE) {
> #ifdef ZTS
> - tsrm_shutdown();
> + tsrm_shutdown();
> #endif
> - return FAILURE;
> - }
> + return FAILURE;
> + }
>
> #if FORCE_CGI_REDIRECT
> - /* check force_cgi after startup, so we have proper output */
> - if (cfg_get_long("cgi.force_redirect", &force_redirect) == FAILURE) {
> + /* check force_cgi after startup, so we have proper output */
> + if (cfg_get_long("cgi.force_redirect", &force_redirect) == FAILURE) {
> force_redirect = 1;
> - }
> - if (cgi && force_redirect) {
> + {
> + /* We don't need force_cgi on if running under IIS. */
> + char* sServerSoftware = getenv("SERVER_SOFTWARE");
> + char* sExpected = "Microsoft-IIS";
> + if (sServerSoftware && (0 ==
> strncmp(sServerSoftware,sExpected,strlen(sExpected)))) {
> + force_redirect = 0;
> + }
> + }
> + }
> + if (cgi && force_redirect) {
> if (cfg_get_string("cgi.redirect_status_env", &redirect_status_env) ==
> FAILURE) {
> redirect_status_env = NULL;
> }
> - /* Apache will generate REDIRECT_STATUS,
> - * Netscape and redirect.so will generate HTTP_REDIRECT_STATUS.
> - * redirect.so and installation instructions available from
> - * http://www.koehntopp.de/php.
> - * -- kk@netuse.de
> - */
> - if (!getenv("REDIRECT_STATUS")
> - && !getenv ("HTTP_REDIRECT_STATUS")
> - /* this is to allow a different env var to be configured
> - in case some server does something different than above */
> - && (!redirect_status_env || !getenv(redirect_status_env))
> - ) {
> - PUTS("<b>Security Alert!</b> The PHP CGI cannot be accessed directly.\n\n\
> + /* Apache will generate REDIRECT_STATUS,
> + * Netscape and redirect.so will generate HTTP_REDIRECT_STATUS.
> + * redirect.so and installation instructions available from
> + * http://www.koehntopp.de/php.
> + * -- kk@netuse.de
> + */
> + if (!getenv("REDIRECT_STATUS")
> + && !getenv ("HTTP_REDIRECT_STATUS")
> + /* this is to allow a different env var to be configured
> + in case some server does something different than above */
> + && (!redirect_status_env || !getenv(redirect_status_env))
> + ) {
> + PUTS("<b>Security Alert!</b> The PHP CGI cannot be accessed
> directly.\n\n\
> <p>This PHP CGI binary was compiled with force-cgi-redirect enabled. This\n\
> means that a page will only be served up if the REDIRECT_STATUS CGI variable is\n\
> set, e.g. via an Apache Action directive.</p>\n\
> @@ -605,506 +613,506 @@
> <a href=\"http://php.net/install.windows\">the
> manual page</a>.</p>\n");
>
> #ifdef ZTS
> - tsrm_shutdown();
> + tsrm_shutdown();
> #endif
>
> - return FAILURE;
> - }
> - }
> -#endif /* FORCE_CGI_REDIRECT */
> -
> -#ifdef PHP_FASTCGI
> - /* How many times to run PHP scripts before dying */
> - if( getenv( "PHP_FCGI_MAX_REQUESTS" )) {
> - max_requests = atoi( getenv( "PHP_FCGI_MAX_REQUESTS" ));
> - if( !max_requests ) {
> - fprintf( stderr,
> - "PHP_FCGI_MAX_REQUESTS is not valid\n" );
> - exit( 1 );
> - }
> - }
> + return FAILURE;
> + }
> + }
> +#endif /* FORCE_CGI_REDIRECT */
> +
> +#ifdef PHP_FASTCGI
> + /* How many times to run PHP scripts before dying */
> + if( getenv( "PHP_FCGI_MAX_REQUESTS" )) {
> + max_requests = atoi( getenv( "PHP_FCGI_MAX_REQUESTS" ));
> + if( !max_requests ) {
> + fprintf( stderr,
> + "PHP_FCGI_MAX_REQUESTS is not valid\n" );
> + exit( 1 );
> + }
> + }
>
> #ifndef PHP_WIN32
> - /* Pre-fork, if required */
> - if( getenv( "PHP_FCGI_CHILDREN" )) {
> - children = atoi( getenv( "PHP_FCGI_CHILDREN" ));
> - if( !children ) {
> - fprintf( stderr,
> - "PHP_FCGI_CHILDREN is not valid\n" );
> - exit( 1 );
> - }
> - }
> -
> - if( children ) {
> - int running = 0;
> - int i;
> - pid_t pid;
> -
> - /* Create a process group for ourself & children */
> - setsid();
> - pgroup = getpgrp();
> + /* Pre-fork, if required */
> + if( getenv( "PHP_FCGI_CHILDREN" )) {
> + children = atoi( getenv( "PHP_FCGI_CHILDREN" ));
> + if( !children ) {
> + fprintf( stderr,
> + "PHP_FCGI_CHILDREN is not valid\n" );
> + exit( 1 );
> + }
> + }
> +
> + if( children ) {
> + int running = 0;
> + int i;
> + pid_t pid;
> +
> + /* Create a process group for ourself & children */
> + setsid();
> + pgroup = getpgrp();
> #ifdef DEBUG_FASTCGI
> - fprintf( stderr, "Process group %d\n", pgroup );
> + fprintf( stderr, "Process group %d\n", pgroup );
> #endif
>
> - /* Set up handler to kill children upon exit */
> - act.sa_flags = 0;
> - act.sa_handler = fastcgi_cleanup;
> - if( sigaction( SIGTERM, &act, &old_term ) ||
> - sigaction( SIGINT, &act, &old_int ) ||
> - sigaction( SIGQUIT, &act, &old_quit )) {
> - perror( "Can't set signals" );
> - exit( 1 );
> - }
> + /* Set up handler to kill children upon exit */
> + act.sa_flags = 0;
> + act.sa_handler = fastcgi_cleanup;
> + if( sigaction( SIGTERM, &act, &old_term ) ||
> + sigaction( SIGINT, &act, &old_int ) ||
> + sigaction( SIGQUIT, &act, &old_quit )) {
> + perror( "Can't set signals" );
> + exit( 1 );
> + }
>
> - while( parent ) {
> - do {
> + while( parent ) {
> + do {
> #ifdef DEBUG_FASTCGI
> - fprintf( stderr, "Forking, %d running\n",
> - running );
> + fprintf( stderr, "Forking, %d running\n",
> + running );
> #endif
> - pid = fork();
> - switch( pid ) {
> - case 0:
> - /* One of the children.
> - * Make sure we don't go round the
> - * fork loop any more
> - */
> - parent = 0;
> -
> - /* don't catch our signals */
> - sigaction( SIGTERM, &old_term, 0 );
> - sigaction( SIGQUIT, &old_quit, 0 );
> - sigaction( SIGINT, &old_int, 0 );
> - break;
> - case -1:
> - perror( "php (pre-forking)" );
> - exit( 1 );
> - break;
> - default:
> - /* Fine */
> - running++;
> - break;
> - }
> - } while( parent && ( running < children ));
> + pid = fork();
> + switch( pid ) {
> + case 0:
> + /* One of the children.
> + * Make sure we don't go round the
> + * fork loop any more
> + */
> + parent = 0;
> +
> + /* don't catch our signals */
> + sigaction( SIGTERM, &old_term, 0 );
> + sigaction( SIGQUIT, &old_quit, 0 );
> + sigaction( SIGINT, &old_int, 0 );
> + break;
> + case -1:
> + perror( "php (pre-forking)" );
> + exit( 1 );
> + break;
> + default:
> + /* Fine */
> + running++;
> + break;
> + }
> + } while( parent && ( running < children ));
>
> - if( parent ) {
> + if( parent ) {
> #ifdef DEBUG_FASTCGI
> - fprintf( stderr, "Wait for kids, pid %d\n",
> - getpid() );
> + fprintf( stderr, "Wait for kids, pid %d\n",
> + getpid() );
> #endif
> - wait( &status );
> - running--;
> - }
> - }
> - }
> + wait( &status );
> + running--;
> + }
> + }
> + }
>
> #endif /* WIN32 */
>
> #endif
>
> - zend_first_try {
> - if (!cgi
> + zend_first_try {
> + if (!cgi
> #ifdef PHP_FASTCGI
> - && !fastcgi
> + && !fastcgi
> #endif
> - ) {
> - while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
> - switch (c) {
> - case '?':
> - no_headers = 1;
> - php_output_startup();
> - php_output_activate(TSRMLS_C);
> - SG(headers_sent) = 1;
> - php_cgi_usage(argv[0]);
> - php_end_ob_buffers(1 TSRMLS_CC);
> - exit(1);
> - break;
> - }
> - }
> - ap_php_optind = orig_optind;
> - ap_php_optarg = orig_optarg;
> - }
> + ) {
> + while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
> + switch (c) {
> + case '?':
> + no_headers = 1;
> + php_output_startup();
> + php_output_activate(TSRMLS_C);
> + SG(headers_sent) = 1;
> + php_cgi_usage(argv[0]);
> + php_end_ob_buffers(1 TSRMLS_CC);
> + exit(1);
> + break;
> + }
> + }
> + ap_php_optind = orig_optind;
> + ap_php_optarg = orig_optarg;
> + }
>
> #ifdef PHP_FASTCGI
> - /* start of FAST CGI loop */
> + /* start of FAST CGI loop */
>
> #ifdef PHP_WIN32
> - /* attempt to set security impersonation for fastcgi
> - will only happen on NT based OS, others will ignore it. */
> - if (fastcgi) {
> - if (cfg_get_long("fastcgi.impersonate", &impersonate) == FAILURE) {
> - impersonate = 0;
> - }
> - if (impersonate) OS_SetImpersonate();
> - }
> -#endif
> -
> - while (!fastcgi
> - || FCGX_Accept( &in, &out, &err, &cgi_env ) >= 0) {
> -
> - if (fastcgi) {
> - /* set up environment */
> - cgi_env_size = 0;
> - while( cgi_env[ cgi_env_size ] ) { cgi_env_size++; }
> - merge_env = malloc( (env_size+cgi_env_size)*sizeof(char*) );
> - if( !merge_env ) {
> - perror( "Can't malloc environment" );
> - exit( 1 );
> - }
> - memcpy( merge_env, orig_env, (env_size-1)*sizeof(char *) );
> - memcpy( merge_env + env_size - 1,
> - cgi_env, (cgi_env_size+1)*sizeof(char *) );
> - environ = merge_env;
> - }
> -#endif
> -
> - init_request_info(TSRMLS_C);
> - SG(server_context) = (void *) 1; /* avoid server_context==NULL checks */
> -
> - SG(request_info).argv0 = argv0;
> -
> - zend_llist_init(&global_vars, sizeof(char *), NULL, 0);
> -
> - if (!cgi
> -#ifdef PHP_FASTCGI
> - && !fastcgi
> -#endif
> - ) { /* never execute the arguments if you are a CGI */
> - if (SG(request_info).argv0) {
> - free(SG(request_info).argv0);
> - SG(request_info).argv0 = NULL;
> - }
> - while ((c = ap_php_getopt(argc, argv, OPTSTRING)) != -1) {
> - switch (c) {
> -
> - case 'a': /* interactive mode */
> - printf("Interactive mode enabled\n\n");
> - interactive=1;
> - break;
> -
> - case 'C': /* don't chdir to the script directory */
> - SG(options) |= SAPI_OPTION_NO_CHDIR;
> - break;
> - case 'd': /* define ini entries on command line */
> - define_command_line_ini_entry(ap_php_optarg);
> - break;
> -
> - case 'e': /* enable extended info output */
> - CG(extended_info) = 1;
> - break;
> -
> - case 'f': /* parse file */
> - script_file = estrdup(ap_php_optarg);
> - no_headers = 1;
> - break;
> -
> - case 'g': /* define global variables on command line */
> - {
> - char *arg = estrdup(ap_php_optarg);
> -
> - zend_llist_add_element(&global_vars, &arg);
> - }
> - break;
> -
> - case 'h': /* help & quit */
> - case '?':
> - no_headers = 1;
> - php_output_startup();
> - php_output_activate(TSRMLS_C);
> - SG(headers_sent) = 1;
> - php_cgi_usage(argv[0]);
> - php_end_ob_buffers(1 TSRMLS_CC);
> - exit(1);
> - break;
> -
> - case 'i': /* php info & quit */
> - if (php_request_startup(TSRMLS_C)==FAILURE) {
> - php_module_shutdown(TSRMLS_C);
> - return FAILURE;
> - }
> - if (no_headers) {
> - SG(headers_sent) = 1;
> - SG(request_info).no_headers = 1;
> - }
> - php_print_info(0xFFFFFFFF TSRMLS_CC);
> - php_end_ob_buffers(1 TSRMLS_CC);
> - exit(1);
> - break;
> -
> - case 'l': /* syntax check mode */
> - no_headers = 1;
> - behavior=PHP_MODE_LINT;
> - break;
> -
> - case 'm': /* list compiled in modules */
> - php_output_startup();
> - php_output_activate(TSRMLS_C);
> - SG(headers_sent) = 1;
> - php_printf("Running PHP %s\n%s\n", PHP_VERSION , get_zend_version());
> - php_printf("[PHP Modules]\n");
> - zend_hash_apply_with_argument(&module_registry, (apply_func_arg_t)
> _print_module_info, NULL TSRMLS_CC);
> - php_printf("\n[Zend Modules]\n");
> - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t)
> _print_extension_info, NULL TSRMLS_CC);
> - php_printf("\n");
> - php_end_ob_buffers(1 TSRMLS_CC);
> - exit(1);
> - break;
> + /* attempt to set security impersonation for fastcgi
> + will only happen on NT based OS, others will ignore it. */
> + if (fastcgi) {
> + if (cfg_get_long("fastcgi.impersonate", &impersonate) == FAILURE) {
> + impersonate = 0;
> + }
> + if (impersonate) OS_SetImpersonate();
> + }
> +#endif
> +
> + while (!fastcgi
> + || FCGX_Accept( &in, &out, &err, &cgi_env ) >= 0) {
> +
> + if (fastcgi) {
> + /* set up environment */
> + cgi_env_size = 0;
> + while( cgi_env[ cgi_env_size ] ) { cgi_env_size++; }
> + merge_env = malloc( (env_size+cgi_env_size)*sizeof(char*) );
> + if( !merge_env ) {
> + perror( "Can't malloc environment" );
> + exit( 1 );
> + }
> + memcpy( merge_env, orig_env, (env_size-1)*sizeof(char *) );
> + memcpy( merge_env + env_size - 1,
> + cgi_env, (cgi_env_size+1)*sizeof(char *) );
> + environ = merge_env;
> + }
> +#endif
> +
> + init_request_info(TSRMLS_C);
> + SG(server_context) = (void *) 1; /* avoid server_context==NULL checks */
> +
> + SG(request_info).argv0 = argv0;
> +
> + zend_llist_init(&global_vars, sizeof(char *), NULL, 0);
> +
> + if (!cgi
> +#ifdef PHP_FASTCGI
> + && !fastcgi
> +#endif
> + ) { /* never execute the arguments if you are a CGI */
> + if (SG(request_info).argv0) {
> + free(SG(request_info).argv0);
> + SG(request_info).argv0 = NULL;
> + }
> + while ((c = ap_php_getopt(argc, argv, OPTSTRING)) != -1) {
> + switch (c) {
> +
> + case 'a': /* interactive mode */
> + printf("Interactive mode enabled\n\n");
> + interactive=1;
> + break;
> +
> + case 'C': /* don't chdir to the script directory */
> + SG(options) |= SAPI_OPTION_NO_CHDIR;
> + break;
> + case 'd': /* define ini entries on command line */
> + define_command_line_ini_entry(ap_php_optarg);
> + break;
> +
> + case 'e': /* enable extended info output */
> + CG(extended_info) = 1;
> + break;
> +
> + case 'f': /* parse file */
> + script_file = estrdup(ap_php_optarg);
> + no_headers = 1;
> + break;
> +
> + case 'g': /* define global variables on command line */
> + {
> + char *arg = estrdup(ap_php_optarg);
> +
> + zend_llist_add_element(&global_vars, &arg);
> + }
> + break;
> +
> + case 'h': /* help & quit */
> + case '?':
> + no_headers = 1;
> + php_output_startup();
> + php_output_activate(TSRMLS_C);
> + SG(headers_sent) = 1;
> + php_cgi_usage(argv[0]);
> + php_end_ob_buffers(1 TSRMLS_CC);
> + exit(1);
> + break;
> +
> + case 'i': /* php info & quit */
> + if (php_request_startup(TSRMLS_C)==FAILURE) {
> + php_module_shutdown(TSRMLS_C);
> + return FAILURE;
> + }
> + if (no_headers) {
> + SG(headers_sent) = 1;
> + SG(request_info).no_headers = 1;
> + }
> + php_print_info(0xFFFFFFFF TSRMLS_CC);
> + php_end_ob_buffers(1 TSRMLS_CC);
> + exit(1);
> + break;
> +
> + case 'l': /* syntax check mode */
> + no_headers = 1;
> + behavior=PHP_MODE_LINT;
> + break;
> +
> + case 'm': /* list compiled in modules */
> + php_output_startup();
> + php_output_activate(TSRMLS_C);
> + SG(headers_sent) = 1;
> + php_printf("Running PHP %s\n%s\n", PHP_VERSION ,
> get_zend_version());
> + php_printf("[PHP Modules]\n");
> + zend_hash_apply_with_argument(&module_registry, (apply_func_arg_t)
> _print_module_info, NULL TSRMLS_CC);
> + php_printf("\n[Zend Modules]\n");
> + zend_llist_apply_with_argument(&zend_extensions,
> (llist_apply_with_arg_func_t) _print_extension_info, NULL TSRMLS_CC);
> + php_printf("\n");
> + php_end_ob_buffers(1 TSRMLS_CC);
> + exit(1);
> + break;
>
> #if 0 /* not yet operational, see also below ... */
> - case 'n': /* generate indented source mode*/
> - behavior=PHP_MODE_INDENT;
> - break;
> -#endif
> -
> - case 'q': /* do not generate HTTP headers */
> - no_headers = 1;
> - break;
> -
> - case 's': /* generate highlighted HTML from source */
> - behavior=PHP_MODE_HIGHLIGHT;
> - break;
> -
> - case 'v': /* show php version & quit */
> - no_headers = 1;
> - if (php_request_startup(TSRMLS_C)==FAILURE) {
> - php_module_shutdown(TSRMLS_C);
> - return FAILURE;
> - }
> - if (no_headers) {
> - SG(headers_sent) = 1;
> - SG(request_info).no_headers = 1;
> - }
> - php_printf("%s (%s)\n", PHP_VERSION, sapi_module.name);
> - php_end_ob_buffers(1 TSRMLS_CC);
> - exit(1);
> - break;
> -
> - case 'w':
> - behavior=PHP_MODE_STRIP;
> - break;
> -
> - case 'z': /* load extension file */
> - zend_load_extension(ap_php_optarg);
> - break;
> -
> - default:
> - break;
> - }
> - }
> - } /* not cgi */
> -
> - CG(interactive) = interactive;
> -
> - if (!cgi
> -#ifdef PHP_FASTCGI
> - && !fastcgi
> -#endif
> - ) {
> - if (!SG(request_info).query_string) {
> - len = 0;
> - if (script_file) {
> - len += strlen(script_file) + 1;
> - }
> - for (i = ap_php_optind; i < argc; i++) {
> - len += strlen(argv[i]) + 1;
> - }
> -
> - s = malloc(len + 1); /* leak - but only for command line version, so ok */
> - *s = '\0'; /* we are pretending it came from the environment */
> - if (script_file) {
> - strcpy(s, script_file);
> - if (ap_php_optind<argc) {
> - strcat(s, "+");
> - }
> - }
> - for (i = ap_php_optind, len = 0; i < argc; i++) {
> - strcat(s, argv[i]);
> - if (i < (argc - 1)) {
> - strcat(s, "+");
> - }
> - }
> - SG(request_info).query_string = s;
> - }
> - }
> -
> - if (script_file) {
> - SG(request_info).path_translated = script_file;
> - }
> -
> - if (php_request_startup(TSRMLS_C)==FAILURE) {
> - php_module_shutdown(TSRMLS_C);
> - return FAILURE;
> - }
> - if (no_headers) {
> - SG(headers_sent) = 1;
> - SG(request_info).no_headers = 1;
> - }
> -#ifdef PHP_FASTCGI
> - if (fastcgi) {
> - file_handle.type = ZEND_HANDLE_FILENAME;
> - file_handle.filename = SG(request_info).path_translated;
> - } else {
> -#endif
> - file_handle.filename = "-";
> - file_handle.type = ZEND_HANDLE_FP;
> - file_handle.handle.fp = stdin;
> -#ifdef PHP_FASTCGI
> - }
> -#endif
> - file_handle.opened_path = NULL;
> - file_handle.free_filename = 0;
> -
> - /* This actually destructs the elements of the list - ugly hack */
> - zend_llist_apply(&global_vars, (llist_apply_func_t)
> php_register_command_line_global_vars TSRMLS_CC);
> - zend_llist_destroy(&global_vars);
> -
> - if (!cgi
> -#ifdef PHP_FASTCGI
> - && !fastcgi
> -#endif
> - ) {
> - if (!SG(request_info).path_translated && argc > ap_php_optind) {
> - SG(request_info).path_translated = estrdup(argv[ap_php_optind]);
> - }
> - } else {
> - /* If for some reason the CGI interface is not setting the
> - PATH_TRANSLATED correctly, SG(request_info).path_translated is NULL.
> - We still call php_fopen_primary_script, because if you set doc_root
> - or user_dir configuration directives, PATH_INFO is used to construct
> - the filename as a side effect of php_fopen_primary_script.
> - */
> - char *env_path_translated=NULL;
> + case 'n': /* generate indented source mode*/
> + behavior=PHP_MODE_INDENT;
> + break;
> +#endif
> +
> + case 'q': /* do not generate HTTP headers */
> + no_headers = 1;
> + break;
> +
> + case 's': /* generate highlighted HTML from source */
> + behavior=PHP_MODE_HIGHLIGHT;
> + break;
> +
> + case 'v': /* show php version & quit */
> + no_headers = 1;
> + if (php_request_startup(TSRMLS_C)==FAILURE) {
> + php_module_shutdown(TSRMLS_C);
> + return FAILURE;
> + }
> + if (no_headers) {
> + SG(headers_sent) = 1;
> + SG(request_info).no_headers = 1;
> + }
> + php_printf("%s (%s)\n", PHP_VERSION, sapi_module.name);
> + php_end_ob_buffers(1 TSRMLS_CC);
> + exit(1);
> + break;
> +
> + case 'w':
> + behavior=PHP_MODE_STRIP;
> + break;
> +
> + case 'z': /* load extension file */
> + zend_load_extension(ap_php_optarg);
> + break;
> +
> + default:
> + break;
> + }
> + }
> + } /* not cgi */
> +
> + CG(interactive) = interactive;
> +
> + if (!cgi
> +#ifdef PHP_FASTCGI
> + && !fastcgi
> +#endif
> + ) {
> + if (!SG(request_info).query_string) {
> + len = 0;
> + if (script_file) {
> + len += strlen(script_file) + 1;
> + }
> + for (i = ap_php_optind; i < argc; i++) {
> + len += strlen(argv[i]) + 1;
> + }
> +
> + s = malloc(len + 1); /* leak - but only for command line version, so ok */
> + *s = '\0'; /* we are pretending it came from the
> environment */
> + if (script_file) {
> + strcpy(s, script_file);
> + if (ap_php_optind<argc) {
> + strcat(s, "+");
> + }
> + }
> + for (i = ap_php_optind, len = 0; i < argc; i++) {
> + strcat(s, argv[i]);
> + if (i < (argc - 1)) {
> + strcat(s, "+");
> + }
> + }
> + SG(request_info).query_string = s;
> + }
> + }
> +
> + if (script_file) {
> + SG(request_info).path_translated = script_file;
> + }
> +
> + if (php_request_startup(TSRMLS_C)==FAILURE) {
> + php_module_shutdown(TSRMLS_C);
> + return FAILURE;
> + }
> + if (no_headers) {
> + SG(headers_sent) = 1;
> + SG(request_info).no_headers = 1;
> + }
> +#ifdef PHP_FASTCGI
> + if (fastcgi) {
> + file_handle.type = ZEND_HANDLE_FILENAME;
> + file_handle.filename = SG(request_info).path_translated;
> + } else {
> +#endif
> + file_handle.filename = "-";
> + file_handle.type = ZEND_HANDLE_FP;
> + file_handle.handle.fp = stdin;
> +#ifdef PHP_FASTCGI
> + }
> +#endif
> + file_handle.opened_path = NULL;
> + file_handle.free_filename = 0;
> +
> + /* This actually destructs the elements of the list - ugly hack */
> + zend_llist_apply(&global_vars, (llist_apply_func_t)
> php_register_command_line_global_vars TSRMLS_CC);
> + zend_llist_destroy(&global_vars);
> +
> + if (!cgi
> +#ifdef PHP_FASTCGI
> + && !fastcgi
> +#endif
> + ) {
> + if (!SG(request_info).path_translated && argc > ap_php_optind) {
> + SG(request_info).path_translated = estrdup(argv[ap_php_optind]);
> + }
> + } else {
> + /* If for some reason the CGI interface is not setting the
> + PATH_TRANSLATED correctly, SG(request_info).path_translated is NULL.
> + We still call php_fopen_primary_script, because if you set doc_root
> + or user_dir configuration directives, PATH_INFO is used to construct
> + the filename as a side effect of php_fopen_primary_script.
> + */
> + char *env_path_translated=NULL;
> #if DISCARD_PATH
> - env_path_translated = getenv("SCRIPT_FILENAME");
> + env_path_translated = getenv("SCRIPT_FILENAME");
> #else
> - env_path_translated = getenv("PATH_TRANSLATED");
> + env_path_translated = getenv("PATH_TRANSLATED");
> #endif
> - if(env_path_translated) {
> + if(env_path_translated) {
> #ifdef __riscos__
> - /* Convert path to unix format*/
> - __riscosify_control|=__RISCOSIFY_DONT_CHECK_DIR;
> - env_path_translated=__unixify(env_path_translated,0,NULL,1,0);
> -#endif
> - SG(request_info).path_translated = estrdup(env_path_translated);
> - }
> - }
> - if (cgi || SG(request_info).path_translated) {
> - retval = php_fopen_primary_script(&file_handle TSRMLS_CC);
> - }
> -
> - if (cgi && (retval == FAILURE)) {
> - if(!argv0 || !(file_handle.handle.fp = VCWD_FOPEN(argv0, "rb"))) {
> - PUTS("No input file specified.\n");
> - php_request_shutdown((void *) 0);
> - php_module_shutdown(TSRMLS_C);
> - return FAILURE;
> - }
> - file_handle.filename = argv0;
> - file_handle.opened_path = expand_filepath(argv0, NULL TSRMLS_CC);
> - }
> -
> - if (file_handle.handle.fp && (file_handle.handle.fp != stdin)) {
> - /* #!php support */
> - c = fgetc(file_handle.handle.fp);
> - if (c == '#') {
> - while (c != 10 && c != 13) {
> - c = fgetc(file_handle.handle.fp); /* skip to end of line */
> - }
> - CG(zend_lineno)++;
> - } else {
> - rewind(file_handle.handle.fp);
> - }
> - }
> -
> - switch (behavior) {
> - case PHP_MODE_STANDARD:
> - if (php_execute_script(&file_handle TSRMLS_CC)) {
> - exit_status = EG(exit_status);
> - } else {
> - exit_status = 255;
> - }
> - break;
> - case PHP_MODE_LINT:
> - PG(during_request_startup) = 0;
> - exit_status = php_lint_script(&file_handle TSRMLS_CC);
> - if (exit_status==SUCCESS) {
> - zend_printf("No syntax errors detected in %s\n", file_handle.filename);
> - } else {
> - zend_printf("Errors parsing %s\n", file_handle.filename);
> - }
> - break;
> - case PHP_MODE_STRIP:
> - if (open_file_for_scanning(&file_handle TSRMLS_CC)==SUCCESS) {
> - zend_strip(TSRMLS_C);
> - fclose(file_handle.handle.fp);
> - }
> - return SUCCESS;
> - break;
> - case PHP_MODE_HIGHLIGHT:
> - {
> - zend_syntax_highlighter_ini syntax_highlighter_ini;
> -
> - if (open_file_for_scanning(&file_handle TSRMLS_CC)==SUCCESS) {
> - php_get_highlight_struct(&syntax_highlighter_ini);
> - zend_highlight(&syntax_highlighter_ini TSRMLS_CC);
> - fclose(file_handle.handle.fp);
> - }
> - return SUCCESS;
> - }
> - break;
> + /* Convert path to unix format*/
> + __riscosify_control|=__RISCOSIFY_DONT_CHECK_DIR;
> + env_path_translated=__unixify(env_path_translated,0,NULL,1,0);
> +#endif
> + SG(request_info).path_translated = estrdup(env_path_translated);
> + }
> + }
> + if (cgi || SG(request_info).path_translated) {
> + retval = php_fopen_primary_script(&file_handle TSRMLS_CC);
> + }
> +
> + if (cgi && (retval == FAILURE)) {
> + if(!argv0 || !(file_handle.handle.fp = VCWD_FOPEN(argv0, "rb"))) {
> + PUTS("No input file specified.\n");
> + php_request_shutdown((void *) 0);
> + php_module_shutdown(TSRMLS_C);
> + return FAILURE;
> + }
> + file_handle.filename = argv0;
> + file_handle.opened_path = expand_filepath(argv0, NULL TSRMLS_CC);
> + }
> +
> + if (file_handle.handle.fp && (file_handle.handle.fp != stdin)) {
> + /* #!php support */
> + c = fgetc(file_handle.handle.fp);
> + if (c == '#') {
> + while (c != 10 && c != 13) {
> + c = fgetc(file_handle.handle.fp); /* skip to end of line */
> + }
> + CG(zend_lineno)++;
> + } else {
> + rewind(file_handle.handle.fp);
> + }
> + }
> +
> + switch (behavior) {
> + case PHP_MODE_STANDARD:
> + if (php_execute_script(&file_handle TSRMLS_CC)) {
> + exit_status = EG(exit_status);
> + } else {
> + exit_status = 255;
> + }
> + break;
> + case PHP_MODE_LINT:
> + PG(during_request_startup) = 0;
> + exit_status = php_lint_script(&file_handle TSRMLS_CC);
> + if (exit_status==SUCCESS) {
> + zend_printf("No syntax errors detected in %s\n",
> file_handle.filename);
> + } else {
> + zend_printf("Errors parsing %s\n", file_handle.filename);
> + }
> + break;
> + case PHP_MODE_STRIP:
> + if (open_file_for_scanning(&file_handle TSRMLS_CC)==SUCCESS) {
> + zend_strip(TSRMLS_C);
> + fclose(file_handle.handle.fp);
> + }
> + return SUCCESS;
> + break;
> + case PHP_MODE_HIGHLIGHT:
> + {
> + zend_syntax_highlighter_ini syntax_highlighter_ini;
> +
> + if (open_file_for_scanning(&file_handle TSRMLS_CC)==SUCCESS) {
> + php_get_highlight_struct(&syntax_highlighter_ini);
> + zend_highlight(&syntax_highlighter_ini TSRMLS_CC);
> + fclose(file_handle.handle.fp);
> + }
> + return SUCCESS;
> + }
> + break;
> #if 0
> - /* Zeev might want to do something with this one day */
> - case PHP_MODE_INDENT:
> - open_file_for_scanning(&file_handle TSRMLS_CC);
> - zend_indent();
> - fclose(file_handle.handle.fp);
> - return SUCCESS;
> - break;
> -#endif
> - }
> -
> - if (SG(request_info).path_translated) {
> - persist_alloc(SG(request_info).path_translated);
> - }
> -
> - php_request_shutdown((void *) 0);
> -
> - STR_FREE(SG(request_info).path_translated);
> -
> -#ifdef PHP_FASTCGI
> - if (!fastcgi) break;
> - /* only fastcgi will get here */
> -
> - /* TODO: We should free our environment here, but
> - * some platforms are unhappy if they've altered our
> - * existing environment and we then free() the new
> - * environ pointer
> - */
> -
> - requests++;
> - if( max_requests && ( requests == max_requests )) {
> - FCGX_Finish();
> - break;
> - }
> - /* end of fastcgi loop */
> - }
> -#endif
> -
> - if (cgi_sapi_module.php_ini_path_override) {
> - free(cgi_sapi_module.php_ini_path_override);
> - }
> - } zend_catch {
> - exit_status = 255;
> - } zend_end_try();
> + /* Zeev might want to do something with this one day */
> + case PHP_MODE_INDENT:
> + open_file_for_scanning(&file_handle TSRMLS_CC);
> + zend_indent();
> + fclose(file_handle.handle.fp);
> + return SUCCESS;
> + break;
> +#endif
> + }
> +
> + if (SG(request_info).path_translated) {
> + persist_alloc(SG(request_info).path_translated);
> + }
> +
> + php_request_shutdown((void *) 0);
> +
> + STR_FREE(SG(request_info).path_translated);
> +
> +#ifdef PHP_FASTCGI
> + if (!fastcgi) break;
> + /* only fastcgi will get here */
> +
> + /* TODO: We should free our environment here, but
> + * some platforms are unhappy if they've altered our
> + * existing environment and we then free() the new
> + * environ pointer
> + */
> +
> + requests++;
> + if( max_requests && ( requests == max_requests )) {
> + FCGX_Finish();
> + break;
> + }
> + /* end of fastcgi loop */
> + }
> +#endif
> +
> + if (cgi_sapi_module.php_ini_path_override) {
> + free(cgi_sapi_module.php_ini_path_override);
> + }
> + } zend_catch {
> + exit_status = 255;
> + } zend_end_try();
>
> - php_module_shutdown(TSRMLS_C);
> + php_module_shutdown(TSRMLS_C);
>
> #ifdef ZTS
> - tsrm_shutdown();
> + tsrm_shutdown();
> #endif
>
> - return exit_status;
> + return exit_status;
> }
> /* }}} */
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php