Skip to content

Commit

Permalink
- Optimize $_REQUEST
Browse files Browse the repository at this point in the history
- Fix phpinfo()
  • Loading branch information
zsuraski committed Mar 2, 2003
1 parent 98b990e commit 622da33
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 28 deletions.
2 changes: 2 additions & 0 deletions ext/standard/info.c
Expand Up @@ -99,6 +99,8 @@ static void php_print_gpcse_array(char *name, uint name_length TSRMLS_DC)
ulong num_key;
char *elem_esc = NULL;

zend_is_auto_global(name, name_length TSRMLS_CC);

if (zend_hash_find(&EG(symbol_table), name, name_length+1, (void **) &data)!=FAILURE
&& (Z_TYPE_PP(data)==IS_ARRAY)) {
zend_hash_internal_pointer_reset(Z_ARRVAL_PP(data));
Expand Down
73 changes: 45 additions & 28 deletions main/php_variables.c
Expand Up @@ -492,7 +492,7 @@ static inline void php_register_server_variables(TSRMLS_D)

static zend_bool php_auto_globals_create_server(char *name, uint name_len TSRMLS_DC);
static zend_bool php_auto_globals_create_env(char *name, uint name_len TSRMLS_DC);

static zend_bool php_auto_globals_create_request(char *name, uint name_len TSRMLS_DC);

/* {{{ php_hash_environment
*/
Expand All @@ -503,7 +503,6 @@ int php_hash_environment(TSRMLS_D)
zend_bool have_variables_order;
zval *dummy_track_vars_array = NULL;
zend_bool initialized_dummy_track_vars_array=0;
int i;
zend_bool jit_initialization = (!PG(register_globals) && !PG(register_long_arrays));
char *variables_order;
struct auto_global_record {
Expand All @@ -521,7 +520,9 @@ int php_hash_environment(TSRMLS_D)
{ "_FILES", sizeof("_FILES"), "HTTP_FILES_GLOBALS", sizeof("HTTP_FILES_GLOBALS"), 0 },
};
size_t num_track_vars = sizeof(auto_global_records)/sizeof(struct auto_global_record);
size_t i;

/* jit_initialization = 0; */
for (i=0; i<num_track_vars; i++) {
PG(http_globals)[i] = NULL;
}
Expand Down Expand Up @@ -614,31 +615,8 @@ int php_hash_environment(TSRMLS_D)
}

/* Create _REQUEST */
{
zval *form_variables;

ALLOC_ZVAL(form_variables);
array_init(form_variables);
INIT_PZVAL(form_variables);

for (p=variables_order; p && *p; p++) {
switch (*p) {
case 'g':
case 'G':
zend_hash_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]), (void (*)(void *pData)) zval_add_ref, NULL, sizeof(zval *), 1);
break;
case 'p':
case 'P':
zend_hash_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]), (void (*)(void *pData)) zval_add_ref, NULL, sizeof(zval *), 1);
break;
case 'c':
case 'C':
zend_hash_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]), (void (*)(void *pData)) zval_add_ref, NULL, sizeof(zval *), 1);
break;
}
}

zend_hash_update(&EG(symbol_table), "_REQUEST", sizeof("_REQUEST"), &form_variables, sizeof(zval *), NULL);
if (!jit_initialization) {
php_auto_globals_create_request("_REQUEST", sizeof("_REQUEST")-1 TSRMLS_CC);
}

return SUCCESS;
Expand Down Expand Up @@ -681,16 +659,55 @@ static zend_bool php_auto_globals_create_env(char *name, uint name_len TSRMLS_DC
}


static zend_bool php_auto_globals_create_request(char *name, uint name_len TSRMLS_DC)
{
zval *form_variables;
char *variables_order;
char *p;

if (PG(variables_order)) {
variables_order = PG(variables_order);
} else {
variables_order = PG(gpc_order);
}

ALLOC_ZVAL(form_variables);
array_init(form_variables);
INIT_PZVAL(form_variables);

for (p=variables_order; p && *p; p++) {
switch (*p) {
case 'g':
case 'G':
zend_hash_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]), (void (*)(void *pData)) zval_add_ref, NULL, sizeof(zval *), 1);
break;
case 'p':
case 'P':
zend_hash_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]), (void (*)(void *pData)) zval_add_ref, NULL, sizeof(zval *), 1);
break;
case 'c':
case 'C':
zend_hash_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]), (void (*)(void *pData)) zval_add_ref, NULL, sizeof(zval *), 1);
break;
}
}

zend_hash_update(&EG(symbol_table), "_REQUEST", sizeof("_REQUEST"), &form_variables, sizeof(zval *), NULL);
return 0;
}


void php_startup_auto_globals(TSRMLS_D)
{
zend_bool cb = (!PG(register_globals) && !PG(register_long_arrays));

/*cb = 0;*/
zend_register_auto_global("_GET", sizeof("_GET")-1, NULL TSRMLS_CC);
zend_register_auto_global("_POST", sizeof("_POST")-1, NULL TSRMLS_CC);
zend_register_auto_global("_COOKIE", sizeof("_COOKIE")-1, NULL TSRMLS_CC);
zend_register_auto_global("_SERVER", sizeof("_SERVER")-1, cb?php_auto_globals_create_server:NULL TSRMLS_CC);
zend_register_auto_global("_ENV", sizeof("_ENV")-1, cb?php_auto_globals_create_env:NULL TSRMLS_CC);
zend_register_auto_global("_REQUEST", sizeof("_REQUEST")-1, NULL TSRMLS_CC);
zend_register_auto_global("_REQUEST", sizeof("_REQUEST")-1, cb?php_auto_globals_create_request:NULL TSRMLS_CC);
}

/*
Expand Down

0 comments on commit 622da33

Please sign in to comment.