Профессиональное программирование на PHP

Страница 570 из 591


590 Глава 23 Написание SAPI-интерфейсов и расширение Zend Engine

switch(arg) {

case PARSE_GET:

if(!IF_G(get_array)) { ALLOC_ZVAL(array_ptr); array_init(array_ptr); INITJPZVAL(array_ptr);

zend_hash_update(&EG(symbol_table), "_RAW_GET", sizeof("_RAW_GET"), &array_ptr, sizeof(zval *), NULL);

IF_G(get_array) = array_ptr; break; case PARSE_POST:

if(!IF_G(post_array)) {

ALLOC_ZVAL(array_ptr);

array_in.it (array_ptr) ;

INIT_PZVAL(array_ptr);

zend_hash_update(&EG(symbol_table), "_RAW_P0ST", sizeof("_RAW_P0ST"), &array_ptr, sizeof(zval *), NULL);

IF_G(post_array) = array_ptr; break; case PARSE_CO0KIE:

if(!IF_G(cookie_array)) { ALLOC_ZVAL(array_ptr); array_init(array_ptr); INIT_PZVAL(array_ptr); zend_hash_update(&EG(symbol_table), "_RAW_COOKIE",sizeof("_RAW_COOKIE"),

&array_ptr, sizeof(zval *), NULL);

IF_G(cookie_array) = array_ptr; break;

}

Z_STRLEN(new_var) = val_len;

Z_STRVAL(new_var) = estrndup(*val, val_len);

Z_TYPE(new_var) = IS_STRING;

php_register_variable_ex(var, &new_var, array_ptr TSRMLS_DC); php_strip_tags(*val, val_len, NULL, NULL, 0); *new_val_len = strlen(*val); return 1;

}

Когда raw_f ilter вызывается, он проверяет, существует ли соответствующий $_RAW-MaccHB, и если — нет, то создает его. Затем он помещает в массив копию исходного значения *val. Далее фильтр с помощью функции php_strip_tags () (С-функ-ция, на которой основана PHP-функция strip_tags ()) удаляет все HTML-теги из *val и определяет новую (скорее всего меньшую) длину *val.

treatdata и default_post_reader

Несмотря на то что обратный вызов input_f ilter позволяет модифицировать входящие переменные, он не дает полного контроля над процессом импорта переменных. Например, он не дает возможности избежать вставки переменных или изменить способ синтаксического анализа их необработанной формы.




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006