PHPのお勉強!

PHP TOP

コア 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() がコールされ、その結果としていくつかの拡張モジュールが一貫性を欠く状態になってしまいます。 プロセスを強制終了させることで、未処理のロックやメモリの後始末も行います。

リソース制限

リソース制限
名前 デフォルト 変更可能 変更履歴