Skip to content

Commit 41d8a5c

Browse files
committed
Document zend.max_allowed_stack_size and related parameters
php/doc-en@b1116af
1 parent 1763d89 commit 41d8a5c

File tree

4 files changed

+131
-9
lines changed

4 files changed

+131
-9
lines changed

appendices/ini.list.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- $Revision$ -->
3-
<!-- EN-Revision: 4f6b5719d81b795d84a21c904924f6400f79825b Maintainer: takagi Status: ready -->
3+
<!-- EN-Revision: b1116af46680f7baf89c46610430a3b63ce9a1f0 Maintainer: takagi Status: ready -->
44
<!-- CREDITS: hirokawa,shimooka,mumumu -->
55

66
<section xml:id="ini.list" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
@@ -782,6 +782,12 @@
782782
<entry><constant>INI_SYSTEM</constant></entry>
783783
<entry>PHP 8.3.0 以降で利用可能。</entry>
784784
</row>
785+
<row>
786+
<entry><link linkend="ini.fiber.stack-size">fiber.stack_size</link></entry>
787+
<entry></entry>
788+
<entry><constant>INI_ALL</constant></entry>
789+
<entry>PHP 8.1.0 以降で利用可能。</entry>
790+
</row>
785791
<row>
786792
<entry><link linkend="ini.zend.multibyte">zend.multibyte</link></entry>
787793
<entry><literal>"0"</literal></entry>

appendices/migration82/other-changes.xml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- $Revision$ -->
3-
<!-- EN-Revision: 40364a64d707d6ec49f6870045807c93e09dba6d Maintainer: mumumu Status: ready -->
3+
<!-- EN-Revision: b1116af46680f7baf89c46610430a3b63ce9a1f0 Maintainer: mumumu Status: ready -->
44
<sect1 xml:id="migration82.other-changes" xmlns:xlink="http://www.w3.org/1999/xlink">
55
<title>その他の変更</title>
66

@@ -260,12 +260,11 @@
260260
後方互換を保つため、値を解釈する方法は変更されていません。
261261
影響を受ける設定は、以下のとおりです:
262262

263-
<!-- TODO: Add missing INI links after directives have been documented -->
264263
<simplelist>
265264
<member><link linkend="ini.bcmath.scale">bcmath.scale</link></member>
266265
<member><link linkend="ini.com.code-page">com.code_page</link></member>
267266
<member><link linkend="ini.default-socket-timeout">default_socket_timeout</link></member>
268-
<member>fiber.stack_size</member>
267+
<member><link linkend="ini.fiber.stack-size">fiber.stack_size</link></member>
269268
<member><link linkend="ini.hard-timeout">hard_timeout</link></member>
270269
<member><link linkend="ini.intl.error-level">intl.error_level</link></member>
271270
<member><link linkend="ini.ldap.max_links">ldap.max_links</link></member>

appendices/migration83/other-changes.xml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- $Revision$ -->
3-
<!-- EN-Revision: e1e0c52f12f7f01724d36b12cb0044ecb0c3f20d Maintainer: mumumu Status: ready -->
3+
<!-- EN-Revision: b1116af46680f7baf89c46610430a3b63ce9a1f0 Maintainer: mumumu Status: ready -->
44
<sect1 xml:id="migration83.other-changes" xmlns:xlink="http://www.w3.org/1999/xlink">
55
<title>その他の変更</title>
66

@@ -355,13 +355,12 @@
355355
</listitem>
356356
<listitem>
357357
<para>
358-
<!--<link linkend="ini.zend.max_allowed_stack_size">-->zend.max_allowed_stack_size<!--</link>-->
359-
は、許可される最大のスタックサイズの値を設定するための、新しい INI ディレクティブです。設定できる値は、<literal>0</literal> (プロセスやスレッドの、スタックサイズの最大値を用います)、<literal>-1</literal> (無制限)、そしてバイト単位の正の数値です。デフォルトは <literal>0</literal> です。プロセスやスレッドのスタックサイズの最大値がわからない場合、既知のシステムのデフォルト値を使います。この値に大き過ぎる値を設定すると、スタックサイズの制限を無効にすることと同じ効果があります。ファイバーは 許可される最大のスタックサイズとして fiber.stack_size の値を使います。プロセスのコールスタックが `zend.max_allowed_stack_size - zend.reserved_stack_size` バイトを超えると、スタックオーバーフローが引き起こすセグメンテーションフォルトを防ぐため、<classname>Error</classname> がスローされます。これは、デバッグを容易にすることが目的です。スタックサイズは、制御されていない再帰処理によって増加します。増加する範囲は、内部関数やマジックメソッド <link linkend="object.tostring">__toString()</link>, <link linkend="object.clone">__clone()</link>, <link linkend="object.sleep">__sleep()</link>, <link linkend="object.destruct">__destruct()</link> 内も含みます。この機能はスタックバッファのオーバーフローとは無関係ですし、セキュリティのための機能でもありません。
358+
<link linkend="ini.zend.max-allowed-stack-size">zend.max_allowed_stack_size</link> は、許可される最大のスタックサイズの値を設定するための、新しい INI ディレクティブです。設定できる値は、<literal>0</literal> (プロセスやスレッドの、スタックサイズの最大値を用います)、<literal>-1</literal> (無制限)、そしてバイト単位の正の数値です。デフォルトは <literal>0</literal> です。プロセスやスレッドのスタックサイズの最大値がわからない場合、既知のシステムのデフォルト値を使います。この値に大き過ぎる値を設定すると、スタックサイズの制限を無効にすることと同じ効果があります。ファイバーは 許可される最大のスタックサイズとして <link linkend="ini.fiber.stack-size">fiber.stack_size</link> の値を使います。プロセスのコールスタックが <link linkend="ini.zend.max-allowed-stack-size">zend.max_allowed_stack_size</link>-<link linkend="ini.zend.reserved-stack-size">zend.reserved_stack_size</link> バイトを超えると、スタックオーバーフローが引き起こすセグメンテーションフォルトを防ぐため、<classname>Error</classname> がスローされます。これは、デバッグを容易にすることが目的です。スタックサイズは、制御されていない再帰処理によって増加します。増加する範囲は、内部関数やマジックメソッド <link linkend="object.tostring">__toString()</link>, <link linkend="object.clone">__clone()</link>, <link linkend="object.sleep">__sleep()</link>, <link linkend="object.destruct">__destruct()</link> 内も含みます。この機能はスタックバッファのオーバーフローとは無関係ですし、セキュリティのための機能でもありません。
360359
</para>
361360
</listitem>
362361
<listitem>
363362
<para>
364-
<!--<link linkend="ini.zend.reserved_stack_size">-->zend.reserved_stack_size<!--</link>--> は、予約済みのスタックサイズをバイト単位で設定するための、新しい INI ディレクティブです。許可されたスタックサイズの最大値から、この値がバッファとして引かれ、スタックサイズがチェックされます。
363+
<link linkend="ini.zend.reserved-stack-size">zend.reserved_stack_size</link> は、予約済みのスタックサイズをバイト単位で設定するための、新しい INI ディレクティブです。許可されたスタックサイズの最大値から、この値がバッファとして引かれ、スタックサイズがチェックされます。
365364
</para>
366365
</listitem>
367366
</itemizedlist>

reference/info/ini.xml

Lines changed: 119 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- $Revision$ -->
3-
<!-- EN-Revision: ada1d79de35239334b68d0120b011530e31244ff Maintainer: hirokawa Status: ready -->
3+
<!-- EN-Revision: b1116af46680f7baf89c46610430a3b63ce9a1f0 Maintainer: hirokawa Status: ready -->
44
<!-- CREDITS: takagi,mumumu -->
55
<section xml:id="info.configuration" xmlns="http://docbook.org/ns/docbook">
66
&reftitle.runtime;
@@ -101,6 +101,24 @@
101101
<entry><constant>INI_ALL</constant></entry>
102102
<entry></entry>
103103
</row>
104+
<row>
105+
<entry><link linkend="ini.zend.max-allowed-stack-size">zend.max_allowed_stack_size</link></entry>
106+
<entry>"0"</entry>
107+
<entry><constant>INI_SYSTEM</constant></entry>
108+
<entry>PHP 8.3.0 以降で利用可能</entry>
109+
</row>
110+
<row>
111+
<entry><link linkend="ini.zend.reserved-stack-size">zend.reserved_stack_size</link></entry>
112+
<entry>"0"</entry>
113+
<entry><constant>INI_SYSTEM</constant></entry>
114+
<entry>PHP 8.3.0 以降で利用可能</entry>
115+
</row>
116+
<row>
117+
<entry><link linkend="ini.fiber.stack-size">fiber.stack_size</link></entry>
118+
<entry></entry>
119+
<entry><constant>INI_ALL</constant></entry>
120+
<entry>PHP 8.1.0 以降で利用可能</entry>
121+
</row>
104122
</tbody>
105123
</tgroup>
106124
</table>
@@ -311,6 +329,106 @@
311329
</listitem>
312330
</varlistentry>
313331

332+
<varlistentry xml:id="ini.zend.max-allowed-stack-size">
333+
<term>
334+
<parameter>zend.max_allowed_stack_size</parameter>
335+
<type>int</type>
336+
</term>
337+
<listitem>
338+
<para>
339+
オペレーティングシステムが、
340+
プログラムに使うことを許可しているネイティブスタックスペースの最大値。
341+
オペレーティングシステムがが許可している以上のサイズを使おうとすると、
342+
通常はハードなクラッシュが発生し、
343+
デバッグ情報が簡単に利用できることはありません。
344+
デバッグを容易にするために、PHP のエンジンはそうしたことが発生する前に
345+
(<link linkend="ini.zend.max-allowed-stack-size">zend.max_allowed_stack_size</link>-<link linkend="ini.zend.reserved-stack-size">zend.reserved_stack_size</link> バイト以上のスタックをプログラムが使った場合に)
346+
<classname>Error</classname> をスローします。
347+
</para>
348+
<para>
349+
ユーザー定義の再帰的なコードは、ネイティブスタック空間を消費しません。
350+
しかし、内部関数やマジックメソッドは消費します。
351+
これらの関数を含む、とても深い再帰コードは、
352+
利用可能なネイティブスタックスペースをすべて使い切る原因になりえます。
353+
</para>
354+
<para>
355+
この
356+
このパラメータに設定可能な値は下記の通りです:
357+
<simplelist>
358+
<member>
359+
<literal>0</literal>:
360+
プログラムが消費できる、
361+
オペレーティングシステムのネイティブスタックスペースの最大値を自動検知します。これがデフォルトです。
362+
検知できない場合は、既知のシステムのデフォルト値を使います。
363+
</member>
364+
<member>
365+
<literal>-1</literal>: エンジンのスタックサイズチェックを無効にします。
366+
</member>
367+
<member>
368+
正の整数: 固定のサイズをバイト単位で指定します。
369+
この値に大き過ぎる値を指定すると、スタックサイズチェックを無効にすることと同じことになります。
370+
</member>
371+
</simplelist>
372+
</para>
373+
<para>
374+
<link linkend="language.fibers">fibers</link> のスタックサイズは
375+
<link linkend="ini.fiber.stack-size">fiber.stack_size</link>
376+
によって決まります。
377+
Fiber の実行中に行われるスタックをチェックする際には、
378+
<link linkend="ini.zend.max-allowed-stack-size">zend.max_allowed_stack_size</link> の代わりにこれを使います。
379+
</para>
380+
<note>
381+
<para>
382+
この機能は スタック <emphasis>バッファ</emphasis>
383+
のオーバーフローとは無関係です。つまり、セキュリティ機能ではありません。
384+
</para>
385+
</note>
386+
</listitem>
387+
</varlistentry>
388+
389+
<varlistentry xml:id="ini.zend.reserved-stack-size">
390+
<term>
391+
<parameter>zend.reserved_stack_size</parameter>
392+
<type>int</type>
393+
</term>
394+
<listitem>
395+
<para>
396+
予約するスタックのサイズを、バイト単位で指定します。
397+
この値はバッファの値として
398+
スタックサイズをチェックする際に <link linkend="ini.zend.max-allowed-stack-size">max allowed stack size</link> から引かれます。
399+
</para>
400+
<para>
401+
このパラメータに設定可能な値は下記の通りです:
402+
<simplelist>
403+
<member>
404+
<literal>0</literal>: 適切な値を自動的に検知します。
405+
</member>
406+
<member>
407+
正の整数: 固定のサイズをバイト単位で指定します。
408+
</member>
409+
</simplelist>
410+
</para>
411+
</listitem>
412+
</varlistentry>
413+
414+
<varlistentry xml:id="ini.fiber.stack-size">
415+
<term>
416+
<parameter>fiber.stack_size</parameter>
417+
<type>int</type>
418+
</term>
419+
<listitem>
420+
<para>
421+
個別の <link linkend="language.fibers">Fiber</link>
422+
に割り当てられるネイティブスタックサイズを、
423+
バイト単位で指定します。
424+
</para>
425+
<para>
426+
ポインタのサイズが8バイトより小さいシステムでは、
427+
デフォルト値は 1MiB です。
428+
8バイト以上のシステムでは、デフォルトは 2MiB です。
429+
</para>
430+
</listitem>
431+
</varlistentry>
314432
</variablelist>
315433
</para>
316434
</section>

0 commit comments

Comments
 (0)