コア php.ini ディレクティブに関する説明
このリストには、PHPを設定する際に使用可能なコア php.ini ディレクティブが 含まれています。拡張モジュールにより処理されるディレクティブは、それぞれの 拡張モジュールのドキュメントページにリストと詳細が記述されています。 例えば、セッション用ディレクティブに関する情報は、 セッションのページにあります。
注意:
これらのデフォルト値は、php.ini が読み込まれなかったときに使われるものです。 運用時と開発時では php.ini の値が変わることもあるでしょう。
言語オプション
名前 | デフォルト | 変更可能 | 変更履歴 |
---|---|---|---|
short_open_tag | "1" | INI_PERDIR |
|
precision | "14" | INI_ALL |
|
serialize_precision | "-1" | INI_ALL |
PHP 7.1.0 より前は、デフォルト値は 17 でした。 |
disable_functions | "" | INI_SYSTEM のみ |
|
disable_classes | "" | php.ini のみ | |
exit_on_timeout | "" | INI_ALL |
|
expose_php | "1" | php.ini のみ | |
hard_timeout | "2" | INI_SYSTEM |
PHP 7.1.0 以降で利用可能。 |
zend.exception_ignore_args | "0" | INI_ALL |
PHP 7.4.0 以降で利用可能。 |
zend.multibyte | "0" | INI_ALL |
|
zend.script_encoding | NULL | INI_ALL |
|
zend.detect-unicode | NULL | INI_ALL |
|
zend.signal_check | "0" | INI_SYSTEM |
|
zend.assertions | "1" | INI_ALL (制限あり) |
|
zend.exception_string_param_max_len | "15" | INI_ALL |
PHP 8.0.0 以降で利用可能。 |
以下に設定ディレクティブに関する 簡単な説明を示します。
-
short_open_tag
bool -
PHP タグの短縮型 (
<? ?>
) を使用 可能にするかどうかを設定します。PHPをXMLと組み合わせて用いる 場合は、<?xml ?>
をファイル中で用 いるためにこのオプションをオフにする必要があります。オンにし た場合にPHPでXMLを出力するには、例えば、次のようにします。<?php echo '<?xml version="1.0"?>'; ?>
これをオフにした場合、長い方の形式のタグ (<?php ?>
)を使用する必要があります。注意:
これは、
<?=
記法に影響を与えません。常に有効となります。 -
precision
int -
浮動小数点数に関して表示される最大桁数を指定します。
-1
は、数値を丸める際に拡張アルゴリズムを用いることを意味します。 -
serialize_precision
int -
浮動小数点数をシリアライズするときに格納する桁数を指定します。
-1
は、数値を丸める際に拡張アルゴリズムを用いることを意味します。 -
expose_php
bool -
PHP がサーバーにインストールされていることを全世界に晒し、PHP のバージョンも HTTP ヘッダに含めます (X-Powered-By: PHP/5.3.7 など)。
-
disable_functions
string - このディレクティブを使うと、特定の関数を無効にすることができます。 関数名の一覧をカンマ区切りで指定します。 PHP 8.0.0 以降では、関数を無効にすると定義を削除しますが、 ユーザーランドで再定義できます。 PHP 8.0.0 より前のバージョンでは、 関数を無効にすると、その関数は呼び出せませんでした。 このディレクティブを使って無効にできるのは、 内部関数 だけです。 ユーザー定義関数 は影響を受けません。 このディレクティブは php.ini で設定しなければなりません。 httpd.conf では設定できません。
-
disable_classes
string -
このディレクティブを使うと、特定のクラスを無効にすることができます。 クラス名の一覧をカンマ区切りで指定します。 クラスを無効にすると、クラスのインスタンス化ができなくなります。
このディレクティブを使って無効にできるのは、内部クラスのみです。 ユーザーが定義したクラスは影響を受けません。
このディレクティブは php.ini で設定しなければなりません。 httpd.conf では設定できません。 -
zend.assertions
int -
1
にすると、アサーションのコードを生成して実行します (開発モード)。0
にすると、アサーションのコードは生成しますが実行時にはスキップします (実行しません)。-1
にすると、アサーションのコードを生成せず、アサーションのコストがゼロになります (実運用モード)。注意:
実運用モードで開始したプロセスでは、zend.assertions を実行時に変更することはできません。アサーションのコードが生成されていないからです。
開発モードで開始したプロセスでは、zend.assertions を実行時に
-1
に変更することはできません。 -
zend.exception_string_param_max_len
int -
文字列化されたスタックトレース中の、関数の引数の長さの最大値。
"0"
と"1000000"
の間でなければいけません。 -
hard_timeout
int -
max_execution_time で設定されたタイムアウトに達すると、 PHPランタイムはリソースをgracefulに開放します。 リソースを開放する処理が何らかの原因で止まってしまった場合、 hard_timeout のカウントがここで設定した秒数行われます。 hard_timeout のタイムアウトに達すると、 PHP はgracefulにリソースを開放せずに終了します。 この値を 0 に設定すると、この機能は無効になります。
PHP が hard timeout で停止すると、 以下のようなメッセージが残るでしょう。
Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unknown on line 0
-
zend.exception_ignore_args
bool -
例外経由で生成されたスタックトレースから、引数を除外します。
-
zend.multibyte
bool -
マルチバイトエンコーディングで書かれたソースファイルをパースできるようにします。 zend.multibyte を有効にしないと、マルチバイト文字データの中に特殊文字を含むエンコーディング (SJIS や BIG5 など) を使えません。 ISO-8859-1 互換のエンコーディングである UTF-8 や EUC などを使う場合は、このオプションは不要です。
zend.multibyte を有効にしたい場合は、mbstring 拡張モジュールを有効にしなければいけません。
-
zend.script_encoding
string -
この値を使うのは、 declare(encoding=...) ディレクティブがスクリプトの先頭に存在しない場合です。 ISO-8859-1 非互換のエンコーディングを使う場合は、 zend.multibyte と zend.script_encoding を両方とも指定する必要があります。
リテラル文字列は、zend.script_encoding から mbstring.internal_encoding に変換されます。 mb_convert_encoding() が呼ばれたときと同じです。
-
zend.detect_unicode
bool -
BOM (Byte Order Mark) を調べ、 ファイルが有効なマルチバイト文字を含むかどうかを確認します。 この検出は、 __halt_compiler() の処理より前に行われます。 Zend Multibyte モードでのみ利用可能です。
-
zend.signal_check
bool -
置き換えられたシグナルハンドラを、シャットダウン時にチェックします。
-
exit_on_timeout
bool -
これは Apache1 の mod_php だけで使える項目で、PHP の実行タイムアウトが発生したときに Apache の子プロセスを強制終了させます。このタイムアウトがおこると Apache1 の内部で longjmp() がコールされ、その結果としていくつかの拡張モジュールが一貫性を欠く状態になってしまいます。 プロセスを強制終了させることで、未処理のロックやメモリの後始末も行います。