П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4098 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6759 раз(а).

Учебник HTML.
Просмотров 3720 раз(а).

Руководство по PHP5.
Просмотров 5993 раз(а).

Хостинг через призму DNS.
Просмотров 4815 раз(а).

Подборка текстов стандартных документов.
Просмотров 56246 раз(а).

Учебник PHP - Самоучитель
Просмотров 3706 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 8346 раз(а).

Внешние атаки...
Просмотров 4566 раз(а).

Учебник PHP.
Просмотров 3175 раз(а).

SSI в примерах.
Просмотров 176 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Учебник РНР
Назад Глава 33. Приём аргументов Вперёд

Гарантия безопасной записи других параметров

Вы можете оказаться в ситуации, когда необходимо иметь доступ для записи параметра, который запрашивается функцией zend_get_parameters_ex(), но не передаётся по ссылке. В этом случае вы можете использовать макрос SEPARATE_ZVAL, который выполняет zval-сепарацию в предоставленном контейнере. Вновь генерируемый zval отсоединяется от внутренних данных и имеет только локальную область видимости, что означает, что он может быть изменён или уничтожен без глобальных изменений в контексте скрипта:
zval **parameter;

/* запросить параметр */
zend_get_parameters_ex(1, &parameter);

/* на этом этапе <parameter> всё ещё соединён */
/* с внутренними буферами данных Zend'а */

/* сделать <parameter> write-safe\безопасным для записи */
SEPARATE_ZVAL(parameter);

/* теперь можно безопасно модифицировать <parameter> */
/* без выполнения глобальных изменений */

SEPARATE_ZVAL использует emalloc() для выделения нового zval-контейнера, и это означает, что даже если вы не зачистите память самостоятельно, она будет уничтожена автоматически по окончании работы скрипта. Однако выполнение большого количества вызовов этого макроса без освобождения результирующих контейнеров использует большой объём вашей RAM-памяти.

Примечание: поскольку вы без затруднений можете обойти отсутствие доступа для записи с помощью "традиционного" API (с zend_get_parameters() и т.д.), этот API выглядит устаревшим и не обсуждается в этой главе в дальнейшем.

Назад Оглавление Вперёд
Работа с аргументами, передаваемыми по ссылке Вверх Создание переменных


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru