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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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





Учебник РНР
Назад Глава 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