Mercurial > hg > nginx-site
comparison xml/ru/docs/http/ngx_http_perl_module.xml @ 1251:ac1b01d37929
Perl module: removed info specific to nginx 0.6.22 and earlier.
author | Yaroslav Zhuravlev <yar@nginx.com> |
---|---|
date | Mon, 14 Jul 2014 20:03:56 +0400 |
parents | 95c3c3bbf1ce |
children | 31f21c7956dd |
comparison
equal
deleted
inserted
replaced
1250:9fbe66ff4f7c | 1251:ac1b01d37929 |
---|---|
8 <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd"> | 8 <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd"> |
9 | 9 |
10 <module name="Модуль ngx_http_perl_module" | 10 <module name="Модуль ngx_http_perl_module" |
11 link="/ru/docs/http/ngx_http_perl_module.html" | 11 link="/ru/docs/http/ngx_http_perl_module.html" |
12 lang="ru" | 12 lang="ru" |
13 rev="2"> | 13 rev="3"> |
14 | 14 |
15 <section id="summary"> | 15 <section id="summary"> |
16 | 16 |
17 <para> | 17 <para> |
18 Модуль <literal>ngx_http_perl_module</literal> позволяет писать обработчики | 18 Модуль <literal>ngx_http_perl_module</literal> позволяет писать обработчики |
79 не будут обрабатываться. Поэтому рекомендуется ограничиться операциями, | 79 не будут обрабатываться. Поэтому рекомендуется ограничиться операциями, |
80 время исполнения которых короткое и предсказуемое, например, обращение | 80 время исполнения которых короткое и предсказуемое, например, обращение |
81 к локальной файловой системе. | 81 к локальной файловой системе. |
82 </para> | 82 </para> |
83 | 83 |
84 <para> | |
85 Нижеописанные проблемы относятся только к версиям nginx до 0.6.22. | |
86 | |
87 <note> | |
88 Данные, возвращаемые методами объекта запроса <literal>$r</literal>, | |
89 имеют только текстовое значение, причём само значение хранится | |
90 в памяти, выделяемой не Perl, а nginx из собственных пулов. | |
91 Это позволяет уменьшить число операций копирования в большинстве случаев, | |
92 однако в некоторых ситуациях это приводит к ошибке. | |
93 Например, при попытке использования таких значений в числовом контексте | |
94 рабочий процесс выходит с ошибкой (FreeBSD): | |
95 <example> | |
96 nginx in realloc(): warning: pointer to wrong page | |
97 Out of memory! | |
98 Callback called exit. | |
99 </example> | |
100 или (Linux): | |
101 <example> | |
102 *** glibc detected *** realloc(): invalid pointer: ... *** | |
103 Out of memory! | |
104 Callback called exit. | |
105 </example> | |
106 Обойти такую ситуацию просто: нужно присвоить значение метода | |
107 переменной, например, такой код | |
108 <example> | |
109 my $i = $r->variable('counter') + 1; | |
110 </example> | |
111 нужно заменить на | |
112 <example> | |
113 my $i = $r->variable('counter'); | |
114 $i++; | |
115 </example> | |
116 </note> | |
117 | |
118 <note> | |
119 Так как строки внутри nginx в большинстве случаев хранятся без | |
120 завершающего нуля, то они в таком же виде возвращаются и методами | |
121 объекта запроса <literal>$r</literal> (исключения составляют методы | |
122 <literal>$r->filename</literal> и <literal>$r->request_body_file</literal>). | |
123 Поэтому такие значения нельзя использовать | |
124 в качестве имени файла и тому подобного. | |
125 Обойти это можно так же, как в предыдущей ситуации: присвоив значение | |
126 переменной (при этом происходит копирование данных и добавление необходимого | |
127 нуля) или же использовав его в выражении, например: | |
128 <example> | |
129 open FILE, '/path/' . $r->variable('name'); | |
130 </example> | |
131 </note> | |
132 | |
133 </para> | |
134 | |
135 </section> | 84 </section> |
136 | 85 |
137 | 86 |
138 <section id="example" name="Пример конфигурации"> | 87 <section id="example" name="Пример конфигурации"> |
139 | 88 |