Annotation of embedaddon/php/sapi/apache2handler/php_functions.c, revision 1.1

1.1     ! misho       1: /*
        !             2:    +----------------------------------------------------------------------+
        !             3:    | PHP Version 5                                                        |
        !             4:    +----------------------------------------------------------------------+
        !             5:    | Copyright (c) 1997-2012 The PHP Group                                |
        !             6:    +----------------------------------------------------------------------+
        !             7:    | This source file is subject to version 3.01 of the PHP license,      |
        !             8:    | that is bundled with this package in the file LICENSE, and is        |
        !             9:    | available through the world-wide-web at the following url:           |
        !            10:    | http://www.php.net/license/3_01.txt                                  |
        !            11:    | If you did not receive a copy of the PHP license and are unable to   |
        !            12:    | obtain it through the world-wide-web, please send a note to          |
        !            13:    | license@php.net so we can mail you a copy immediately.               |
        !            14:    +----------------------------------------------------------------------+
        !            15:    | Author: Sascha Schumann <sascha@schumann.cx>                         |
        !            16:    +----------------------------------------------------------------------+
        !            17:  */
        !            18: 
        !            19: /* $Id: php_functions.c 321634 2012-01-01 13:15:04Z felipe $ */
        !            20: 
        !            21: #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
        !            22: 
        !            23: #include "php.h"
        !            24: #include "ext/standard/php_smart_str.h"
        !            25: #include "ext/standard/info.h"
        !            26: #include "ext/standard/head.h"
        !            27: #include "php_ini.h"
        !            28: #include "SAPI.h"
        !            29: 
        !            30: #define CORE_PRIVATE
        !            31: #include "apr_strings.h"
        !            32: #include "apr_time.h"
        !            33: #include "ap_config.h"
        !            34: #include "util_filter.h"
        !            35: #include "httpd.h"
        !            36: #include "http_config.h"
        !            37: #include "http_request.h"
        !            38: #include "http_core.h"
        !            39: #include "http_protocol.h"
        !            40: #include "http_log.h"
        !            41: #include "http_main.h"
        !            42: #include "util_script.h"
        !            43: #include "http_core.h"
        !            44: #include "ap_mpm.h"
        !            45: #if !defined(WIN32) && !defined(WINNT) && !defined(NETWARE)
        !            46: #include "unixd.h"
        !            47: #endif
        !            48: 
        !            49: #include "php_apache.h"
        !            50: 
        !            51: #ifdef ZTS
        !            52: int php_apache2_info_id;
        !            53: #else
        !            54: php_apache2_info_struct php_apache2_info;
        !            55: #endif
        !            56: 
        !            57: #define SECTION(name)  PUTS("<h2>" name "</h2>\n")
        !            58: 
        !            59: static request_rec *php_apache_lookup_uri(char *filename TSRMLS_DC)
        !            60: {
        !            61:        php_struct *ctx = SG(server_context);
        !            62:        
        !            63:        if (!filename || !ctx || !ctx->r) {
        !            64:                return NULL;
        !            65:        }
        !            66: 
        !            67:        return ap_sub_req_lookup_uri(filename, ctx->r, ctx->r->output_filters);
        !            68: }
        !            69: 
        !            70: /* {{{ proto bool virtual(string uri)
        !            71:  Perform an apache sub-request */
        !            72: PHP_FUNCTION(virtual)
        !            73: {
        !            74:        char *filename;
        !            75:        int filename_len;
        !            76:        request_rec *rr;
        !            77: 
        !            78:        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) {
        !            79:                return;
        !            80:        }
        !            81: 
        !            82:        if (!(rr = php_apache_lookup_uri(filename TSRMLS_CC))) {
        !            83:                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - URI lookup failed", filename);
        !            84:                RETURN_FALSE;
        !            85:        }
        !            86: 
        !            87:        if (rr->status != HTTP_OK) {
        !            88:                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - error finding URI", filename);
        !            89:                ap_destroy_sub_req(rr);
        !            90:                RETURN_FALSE;
        !            91:        }
        !            92: 
        !            93:        /* Flush everything. */
        !            94:        php_end_ob_buffers(1 TSRMLS_CC);
        !            95:        php_header(TSRMLS_C);
        !            96: 
        !            97:        /* Ensure that the ap_r* layer for the main request is flushed, to
        !            98:         * work around http://issues.apache.org/bugzilla/show_bug.cgi?id=17629 */
        !            99:        ap_rflush(rr->main);
        !           100: 
        !           101:        if (ap_run_sub_req(rr)) {
        !           102:                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - request execution failed", filename);
        !           103:                ap_destroy_sub_req(rr);
        !           104:                RETURN_FALSE;
        !           105:        }
        !           106:        ap_destroy_sub_req(rr);
        !           107:        RETURN_TRUE;
        !           108: }
        !           109: /* }}} */
        !           110: 
        !           111: #define ADD_LONG(name) \
        !           112:                add_property_long(return_value, #name, rr->name)
        !           113: #define ADD_TIME(name) \
        !           114:                add_property_long(return_value, #name, apr_time_sec(rr->name));
        !           115: #define ADD_STRING(name) \
        !           116:                if (rr->name) add_property_string(return_value, #name, (char *) rr->name, 1)
        !           117: 
        !           118: PHP_FUNCTION(apache_lookup_uri)
        !           119: {
        !           120:        request_rec *rr;
        !           121:        char *filename;
        !           122:        int filename_len;
        !           123: 
        !           124:        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) {
        !           125:                return;
        !           126:        }
        !           127: 
        !           128:        if (!(rr = php_apache_lookup_uri(filename TSRMLS_CC))) {
        !           129:                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - URI lookup failed", filename);
        !           130:                RETURN_FALSE;
        !           131:        }
        !           132:        
        !           133:        if (rr->status == HTTP_OK) {
        !           134:                object_init(return_value);
        !           135: 
        !           136:                ADD_LONG(status);
        !           137:                ADD_STRING(the_request);
        !           138:                ADD_STRING(status_line);
        !           139:                ADD_STRING(method);
        !           140:                ADD_TIME(mtime);
        !           141:                ADD_LONG(clength);
        !           142: #if MODULE_MAGIC_NUMBER < 20020506
        !           143:                ADD_STRING(boundary);
        !           144: #endif
        !           145:                ADD_STRING(range);
        !           146:                ADD_LONG(chunked);
        !           147:                ADD_STRING(content_type);
        !           148:                ADD_STRING(handler);
        !           149:                ADD_LONG(no_cache);
        !           150:                ADD_LONG(no_local_copy);
        !           151:                ADD_STRING(unparsed_uri);
        !           152:                ADD_STRING(uri);
        !           153:                ADD_STRING(filename);
        !           154:                ADD_STRING(path_info);
        !           155:                ADD_STRING(args);
        !           156:                ADD_LONG(allowed);
        !           157:                ADD_LONG(sent_bodyct);
        !           158:                ADD_LONG(bytes_sent);
        !           159:                ADD_LONG(mtime);
        !           160:                ADD_TIME(request_time);
        !           161: 
        !           162:                ap_destroy_sub_req(rr);
        !           163:                return;
        !           164:        }
        !           165:        
        !           166:        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - error finding URI", filename);
        !           167:        ap_destroy_sub_req(rr);
        !           168:        RETURN_FALSE;
        !           169: }
        !           170: 
        !           171: /* {{{ proto array getallheaders(void)
        !           172:    Fetch all HTTP request headers */
        !           173: PHP_FUNCTION(apache_request_headers)
        !           174: {
        !           175:        php_struct *ctx;
        !           176:        const apr_array_header_t *arr;
        !           177:        char *key, *val;
        !           178: 
        !           179:        if (zend_parse_parameters_none() == FAILURE) {
        !           180:                return;
        !           181:        }
        !           182: 
        !           183:        array_init(return_value);
        !           184:        
        !           185:        ctx = SG(server_context);
        !           186:        arr = apr_table_elts(ctx->r->headers_in);
        !           187: 
        !           188:        APR_ARRAY_FOREACH_OPEN(arr, key, val)
        !           189:                if (!val) val = "";
        !           190:                add_assoc_string(return_value, key, val, 1);
        !           191:        APR_ARRAY_FOREACH_CLOSE()
        !           192: }
        !           193: /* }}} */
        !           194: 
        !           195: /* {{{ proto array apache_response_headers(void)
        !           196:    Fetch all HTTP response headers */
        !           197: PHP_FUNCTION(apache_response_headers)
        !           198: {
        !           199:        php_struct *ctx;
        !           200:        const apr_array_header_t *arr;
        !           201:        char *key, *val;
        !           202: 
        !           203:        if (zend_parse_parameters_none() == FAILURE) {
        !           204:                return;
        !           205:        }
        !           206: 
        !           207:        array_init(return_value);
        !           208:        
        !           209:        ctx = SG(server_context);
        !           210:        arr = apr_table_elts(ctx->r->headers_out);
        !           211: 
        !           212:        APR_ARRAY_FOREACH_OPEN(arr, key, val)
        !           213:                if (!val) val = "";
        !           214:                add_assoc_string(return_value, key, val, 1);
        !           215:        APR_ARRAY_FOREACH_CLOSE()
        !           216: }
        !           217: /* }}} */
        !           218: 
        !           219: /* {{{ proto string apache_note(string note_name [, string note_value])
        !           220:    Get and set Apache request notes */
        !           221: PHP_FUNCTION(apache_note)
        !           222: {
        !           223:        php_struct *ctx;
        !           224:        char *note_name, *note_val = NULL;
        !           225:        int note_name_len, note_val_len;
        !           226:        char *old_note_val=NULL;
        !           227: 
        !           228:        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &note_name, &note_name_len, &note_val, &note_val_len) == FAILURE) {
        !           229:                return;
        !           230:        }
        !           231: 
        !           232:        ctx = SG(server_context);
        !           233: 
        !           234:        old_note_val = (char *) apr_table_get(ctx->r->notes, note_name);
        !           235: 
        !           236:        if (note_val) {
        !           237:                apr_table_set(ctx->r->notes, note_name, note_val);
        !           238:        }
        !           239: 
        !           240:        if (old_note_val) {
        !           241:                RETURN_STRING(old_note_val, 1);
        !           242:        }
        !           243: 
        !           244:        RETURN_FALSE;
        !           245: }
        !           246: /* }}} */
        !           247: 
        !           248: 
        !           249: /* {{{ proto bool apache_setenv(string variable, string value [, bool walk_to_top])
        !           250:    Set an Apache subprocess_env variable */
        !           251: /*
        !           252:  * XXX this doesn't look right. shouldn't it be the parent ?*/
        !           253: PHP_FUNCTION(apache_setenv)
        !           254: {
        !           255:        php_struct *ctx;
        !           256:        char *variable=NULL, *string_val=NULL;
        !           257:        int variable_len, string_val_len;
        !           258:        zend_bool walk_to_top = 0;
        !           259:        int arg_count = ZEND_NUM_ARGS();
        !           260:        request_rec *r;
        !           261: 
        !           262:        if (zend_parse_parameters(arg_count TSRMLS_CC, "ss|b", &variable, &variable_len, &string_val, &string_val_len, &walk_to_top) == FAILURE) {
        !           263:                return;
        !           264:        }
        !           265: 
        !           266:        ctx = SG(server_context);
        !           267: 
        !           268:        r = ctx->r;
        !           269:        if (arg_count == 3) {
        !           270:                if (walk_to_top) {
        !           271:                        while(r->prev) {
        !           272:                                r = r->prev;
        !           273:                        }
        !           274:                }
        !           275:        }
        !           276: 
        !           277:        apr_table_set(r->subprocess_env, variable, string_val);
        !           278: 
        !           279:        RETURN_TRUE;
        !           280: }
        !           281: /* }}} */
        !           282: 
        !           283: /* {{{ proto bool apache_getenv(string variable [, bool walk_to_top])
        !           284:    Get an Apache subprocess_env variable */
        !           285: /*
        !           286:  * XXX: shouldn't this be the parent not the 'prev'
        !           287:  */
        !           288: PHP_FUNCTION(apache_getenv)
        !           289: {
        !           290:        php_struct *ctx;
        !           291:        char *variable=NULL;
        !           292:        int variable_len;
        !           293:        zend_bool walk_to_top = 0;
        !           294:        int arg_count = ZEND_NUM_ARGS();
        !           295:        char *env_val=NULL;
        !           296:        request_rec *r;
        !           297: 
        !           298:        if (zend_parse_parameters(arg_count TSRMLS_CC, "s|b", &variable, &variable_len, &walk_to_top) == FAILURE) {
        !           299:                return;
        !           300:        }
        !           301: 
        !           302:        ctx = SG(server_context);
        !           303: 
        !           304:        r = ctx->r;
        !           305:        if (arg_count == 2) {
        !           306:                if (walk_to_top) {
        !           307:                        while(r->prev) {
        !           308:                                r = r->prev;
        !           309:                        }
        !           310:                }
        !           311:        }
        !           312: 
        !           313:        env_val = (char*) apr_table_get(r->subprocess_env, variable);
        !           314: 
        !           315:        if (env_val != NULL) {
        !           316:                RETURN_STRING(env_val, 1);
        !           317:        }
        !           318: 
        !           319:        RETURN_FALSE;
        !           320: }
        !           321: /* }}} */
        !           322: 
        !           323: static char *php_apache_get_version()
        !           324: {
        !           325: #if MODULE_MAGIC_NUMBER_MAJOR >= 20060905
        !           326:        return (char *) ap_get_server_banner();
        !           327: #else
        !           328:        return (char *) ap_get_server_version();
        !           329: #endif
        !           330: }
        !           331: 
        !           332: /* {{{ proto string apache_get_version(void)
        !           333:    Fetch Apache version */
        !           334: PHP_FUNCTION(apache_get_version)
        !           335: {
        !           336:        char *apv = php_apache_get_version();
        !           337: 
        !           338:        if (apv && *apv) {
        !           339:                RETURN_STRING(apv, 1);
        !           340:        } else {
        !           341:                RETURN_FALSE;
        !           342:        }
        !           343: }
        !           344: /* }}} */
        !           345: 
        !           346: /* {{{ proto array apache_get_modules(void)
        !           347:    Get a list of loaded Apache modules */
        !           348: PHP_FUNCTION(apache_get_modules)
        !           349: {
        !           350:        int n;
        !           351:        char *p;
        !           352:        
        !           353:        array_init(return_value);
        !           354:        
        !           355:        for (n = 0; ap_loaded_modules[n]; ++n) {
        !           356:                char *s = (char *) ap_loaded_modules[n]->name;
        !           357:                if ((p = strchr(s, '.'))) {
        !           358:                        add_next_index_stringl(return_value, s, (p - s), 1);
        !           359:                } else {
        !           360:                        add_next_index_string(return_value, s, 1);
        !           361:                }
        !           362:        }
        !           363: }
        !           364: /* }}} */
        !           365: 
        !           366: PHP_MINFO_FUNCTION(apache)
        !           367: {
        !           368:        char *apv = php_apache_get_version();
        !           369:        smart_str tmp1 = {0};
        !           370:        char tmp[1024];
        !           371:        int n, max_requests;
        !           372:        char *p;
        !           373:        server_rec *serv = ((php_struct *) SG(server_context))->r->server;
        !           374: #if !defined(WIN32) && !defined(WINNT) && !defined(NETWARE)
        !           375: #if MODULE_MAGIC_NUMBER_MAJOR >= 20081201
        !           376:        AP_DECLARE_DATA extern unixd_config_rec ap_unixd_config;
        !           377: #else
        !           378:        AP_DECLARE_DATA extern unixd_config_rec unixd_config;
        !           379: #endif
        !           380: #endif
        !           381:        
        !           382:        for (n = 0; ap_loaded_modules[n]; ++n) {
        !           383:                char *s = (char *) ap_loaded_modules[n]->name;
        !           384:                if ((p = strchr(s, '.'))) {
        !           385:                        smart_str_appendl(&tmp1, s, (p - s));
        !           386:                } else {
        !           387:                        smart_str_appends(&tmp1, s);
        !           388:                }
        !           389:                smart_str_appendc(&tmp1, ' ');
        !           390:        }
        !           391:        if ((tmp1.len - 1) >= 0) {
        !           392:                tmp1.c[tmp1.len - 1] = '\0';
        !           393:        }
        !           394:             
        !           395:        php_info_print_table_start();
        !           396:        if (apv && *apv) {
        !           397:                php_info_print_table_row(2, "Apache Version", apv);
        !           398:        }
        !           399:        snprintf(tmp, sizeof(tmp), "%d", MODULE_MAGIC_NUMBER);
        !           400:        php_info_print_table_row(2, "Apache API Version", tmp);
        !           401:        
        !           402:        if (serv->server_admin && *(serv->server_admin)) {
        !           403:                php_info_print_table_row(2, "Server Administrator", serv->server_admin);
        !           404:        }
        !           405:        
        !           406:        snprintf(tmp, sizeof(tmp), "%s:%u", serv->server_hostname, serv->port);
        !           407:        php_info_print_table_row(2, "Hostname:Port", tmp);
        !           408:        
        !           409: #if !defined(WIN32) && !defined(WINNT) && !defined(NETWARE)
        !           410: #if MODULE_MAGIC_NUMBER_MAJOR >= 20081201
        !           411:        snprintf(tmp, sizeof(tmp), "%s(%d)/%d", ap_unixd_config.user_name, ap_unixd_config.user_id, ap_unixd_config.group_id);
        !           412: #else
        !           413:        snprintf(tmp, sizeof(tmp), "%s(%d)/%d", unixd_config.user_name, unixd_config.user_id, unixd_config.group_id);
        !           414: #endif
        !           415:        php_info_print_table_row(2, "User/Group", tmp);
        !           416: #endif
        !           417: 
        !           418:        ap_mpm_query(AP_MPMQ_MAX_REQUESTS_DAEMON, &max_requests);
        !           419:        snprintf(tmp, sizeof(tmp), "Per Child: %d - Keep Alive: %s - Max Per Connection: %d", max_requests, (serv->keep_alive ? "on":"off"), serv->keep_alive_max);
        !           420:        php_info_print_table_row(2, "Max Requests", tmp);
        !           421: 
        !           422:        apr_snprintf(tmp, sizeof tmp,
        !           423:                                 "Connection: %" APR_TIME_T_FMT " - Keep-Alive: %" APR_TIME_T_FMT, 
        !           424:                                 apr_time_sec(serv->timeout), apr_time_sec(serv->keep_alive_timeout));
        !           425:        php_info_print_table_row(2, "Timeouts", tmp);
        !           426:        
        !           427:        php_info_print_table_row(2, "Virtual Server", (serv->is_virtual ? "Yes" : "No"));
        !           428:        php_info_print_table_row(2, "Server Root", ap_server_root);
        !           429:        php_info_print_table_row(2, "Loaded Modules", tmp1.c);
        !           430: 
        !           431:        smart_str_free(&tmp1);
        !           432:        php_info_print_table_end();
        !           433:        
        !           434:        DISPLAY_INI_ENTRIES();
        !           435: 
        !           436:        {
        !           437:                const apr_array_header_t *arr = apr_table_elts(((php_struct *) SG(server_context))->r->subprocess_env);
        !           438:                char *key, *val;
        !           439:                
        !           440:                SECTION("Apache Environment");
        !           441:                php_info_print_table_start();   
        !           442:                php_info_print_table_header(2, "Variable", "Value");
        !           443:                APR_ARRAY_FOREACH_OPEN(arr, key, val)
        !           444:                        if (!val) {
        !           445:                                val = "";
        !           446:                        }
        !           447:                        php_info_print_table_row(2, key, val);
        !           448:                APR_ARRAY_FOREACH_CLOSE()
        !           449:                                                                
        !           450:                php_info_print_table_end();     
        !           451:                
        !           452:                SECTION("HTTP Headers Information");
        !           453:                php_info_print_table_start();
        !           454:                php_info_print_table_colspan_header(2, "HTTP Request Headers");
        !           455:                php_info_print_table_row(2, "HTTP Request", ((php_struct *) SG(server_context))->r->the_request);
        !           456:                
        !           457:                arr = apr_table_elts(((php_struct *) SG(server_context))->r->headers_in);
        !           458:                APR_ARRAY_FOREACH_OPEN(arr, key, val)
        !           459:                        if (!val) {
        !           460:                                val = "";
        !           461:                        }
        !           462:                        php_info_print_table_row(2, key, val);
        !           463:                APR_ARRAY_FOREACH_CLOSE()
        !           464: 
        !           465:                php_info_print_table_colspan_header(2, "HTTP Response Headers");
        !           466:                arr = apr_table_elts(((php_struct *) SG(server_context))->r->headers_out);
        !           467:                APR_ARRAY_FOREACH_OPEN(arr, key, val)
        !           468:                        if (!val) {
        !           469:                                val = "";
        !           470:                        }
        !           471:                        php_info_print_table_row(2, key, val);
        !           472:                APR_ARRAY_FOREACH_CLOSE()
        !           473:                
        !           474:                php_info_print_table_end();
        !           475:        }
        !           476: }
        !           477: 
        !           478: /* {{{ arginfo */
        !           479: ZEND_BEGIN_ARG_INFO_EX(arginfo_apache2handler_lookup_uri, 0, 0, 1)
        !           480:        ZEND_ARG_INFO(0, filename)
        !           481: ZEND_END_ARG_INFO()
        !           482: 
        !           483: ZEND_BEGIN_ARG_INFO_EX(arginfo_apache2handler_virtual, 0, 0, 1)
        !           484:        ZEND_ARG_INFO(0, uri)
        !           485: ZEND_END_ARG_INFO()
        !           486: 
        !           487: ZEND_BEGIN_ARG_INFO(arginfo_apache2handler_response_headers, 0)
        !           488: ZEND_END_ARG_INFO()
        !           489: 
        !           490: ZEND_BEGIN_ARG_INFO(arginfo_apache2handler_getallheaders, 0)
        !           491: ZEND_END_ARG_INFO()
        !           492: 
        !           493: ZEND_BEGIN_ARG_INFO_EX(arginfo_apache2handler_note, 0, 0, 1)
        !           494:        ZEND_ARG_INFO(0, note_name)
        !           495:        ZEND_ARG_INFO(0, note_value)
        !           496: ZEND_END_ARG_INFO()
        !           497: 
        !           498: ZEND_BEGIN_ARG_INFO_EX(arginfo_apache2handler_setenv, 0, 0, 2)
        !           499:        ZEND_ARG_INFO(0, variable)
        !           500:        ZEND_ARG_INFO(0, value)
        !           501:        ZEND_ARG_INFO(0, walk_to_top)
        !           502: ZEND_END_ARG_INFO()
        !           503: 
        !           504: ZEND_BEGIN_ARG_INFO_EX(arginfo_apache2handler_getenv, 0, 0, 1)
        !           505:        ZEND_ARG_INFO(0, variable)
        !           506:        ZEND_ARG_INFO(0, walk_to_top)
        !           507: ZEND_END_ARG_INFO()
        !           508: 
        !           509: ZEND_BEGIN_ARG_INFO(arginfo_apache2handler_get_version, 0)
        !           510: ZEND_END_ARG_INFO()
        !           511: 
        !           512: ZEND_BEGIN_ARG_INFO(arginfo_apache2handler_get_modules, 0)
        !           513: ZEND_END_ARG_INFO()
        !           514: /* }}} */
        !           515: 
        !           516: static const zend_function_entry apache_functions[] = {
        !           517:        PHP_FE(apache_lookup_uri,               arginfo_apache2handler_lookup_uri)
        !           518:        PHP_FE(virtual,                                 arginfo_apache2handler_virtual) 
        !           519:        PHP_FE(apache_request_headers,  arginfo_apache2handler_getallheaders)
        !           520:        PHP_FE(apache_response_headers, arginfo_apache2handler_response_headers)
        !           521:        PHP_FE(apache_setenv,           arginfo_apache2handler_setenv)
        !           522:        PHP_FE(apache_getenv,           arginfo_apache2handler_getenv)
        !           523:        PHP_FE(apache_note,             arginfo_apache2handler_note)
        !           524:        PHP_FE(apache_get_version,      arginfo_apache2handler_get_version)
        !           525:        PHP_FE(apache_get_modules,      arginfo_apache2handler_get_modules)
        !           526:        PHP_FALIAS(getallheaders,       apache_request_headers, arginfo_apache2handler_getallheaders)
        !           527:        {NULL, NULL, NULL}
        !           528: };
        !           529: 
        !           530: PHP_INI_BEGIN()
        !           531:        STD_PHP_INI_ENTRY("xbithack",           "0",    PHP_INI_ALL,    OnUpdateLong,   xbithack,       php_apache2_info_struct, php_apache2_info)
        !           532:        STD_PHP_INI_ENTRY("engine",             "1",    PHP_INI_ALL,    OnUpdateLong,   engine,         php_apache2_info_struct, php_apache2_info)
        !           533:        STD_PHP_INI_ENTRY("last_modified",      "0",    PHP_INI_ALL,    OnUpdateLong,   last_modified,  php_apache2_info_struct, php_apache2_info)
        !           534: PHP_INI_END()
        !           535: 
        !           536: static PHP_MINIT_FUNCTION(apache)
        !           537: {
        !           538: #ifdef ZTS
        !           539:        ts_allocate_id(&php_apache2_info_id, sizeof(php_apache2_info_struct), (ts_allocate_ctor) NULL, NULL);
        !           540: #endif
        !           541:        REGISTER_INI_ENTRIES();
        !           542:        return SUCCESS;
        !           543: }
        !           544: 
        !           545: static PHP_MSHUTDOWN_FUNCTION(apache)
        !           546: {
        !           547:        UNREGISTER_INI_ENTRIES();
        !           548:        return SUCCESS;
        !           549: }
        !           550: 
        !           551: zend_module_entry php_apache_module = {
        !           552:        STANDARD_MODULE_HEADER,
        !           553:        "apache2handler",
        !           554:        apache_functions,
        !           555:        PHP_MINIT(apache),
        !           556:        PHP_MSHUTDOWN(apache),
        !           557:        NULL,
        !           558:        NULL, 
        !           559:        PHP_MINFO(apache),
        !           560:        NULL,
        !           561:        STANDARD_MODULE_PROPERTIES
        !           562: };
        !           563: 
        !           564: /*
        !           565:  * Local variables:
        !           566:  * tab-width: 4
        !           567:  * c-basic-offset: 4
        !           568:  * End:
        !           569:  * vim600: sw=4 ts=4 fdm=marker
        !           570:  * vim<600: sw=4 ts=4
        !           571:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>