The 5th Annual China PHP Conference

実行時設定

php.ini の設定により動作が変化します。

OPcache 設定オプション
名前 デフォルト 変更可能 変更履歴
opcache.enable "1" PHP_INI_ALL  
opcache.enable_cli "1" PHP_INI_SYSTEM PHP 7.1.2 以降デフォルトで有効
opcache.memory_consumption "64" PHP_INI_SYSTEM  
opcache.interned_strings_buffer "4" PHP_INI_SYSTEM  
opcache.max_accelerated_files "2000" PHP_INI_SYSTEM  
opcache.max_wasted_percentage "5" PHP_INI_SYSTEM  
opcache.use_cwd "1" PHP_INI_SYSTEM  
opcache.validate_timestamps "1" PHP_INI_ALL  
opcache.revalidate_freq "2" PHP_INI_ALL  
opcache.revalidate_path "0" PHP_INI_ALL  
opcache.save_comments "1" PHP_INI_SYSTEM  
opcache.load_comments "1" PHP_INI_ALL  
opcache.fast_shutdown "0" PHP_INI_SYSTEM  
opcache.enable_file_override "0" PHP_INI_SYSTEM  
opcache.optimization_level "0xffffffff" PHP_INI_SYSTEM  
opcache.inherited_hack "1" PHP_INI_SYSTEM  
opcache.dups_fix "0" PHP_INI_ALL  
opcache.blacklist_filename "" PHP_INI_SYSTEM  
opcache.max_file_size "0" PHP_INI_SYSTEM  
opcache.consistency_checks "0" PHP_INI_ALL  
opcache.force_restart_timeout "180" PHP_INI_SYSTEM  
opcache.error_log "" PHP_INI_SYSTEM  
opcache.log_verbosity_level "1" PHP_INI_SYSTEM  
opcache.preferred_memory_model "" PHP_INI_SYSTEM  
opcache.protect_memory "0" PHP_INI_SYSTEM  
opcache.mmap_base NULL PHP_INI_SYSTEM  
opcache.restrict_api "" PHP_INI_SYSTEM  
opcache.file_cache NULL PHP_INI_SYSTEM PHP 7.0.0 以降で利用可能
opcache.file_cache_only "0" PHP_INI_SYSTEM PHP 7.0.0 以降で利用可能
opcache.file_cache_consistency_checks "1" PHP_INI_SYSTEM PHP 7.0.0 以降で利用可能
opcache.file_cache_fallback "1" PHP_INI_SYSTEM PHP 7.0.0 以降で利用可能
opcache.validate_permission "0" PHP_INI_SYSTEM PHP 7.0.14 以降で利用可能
opcache.validate_root "0" PHP_INI_SYSTEM PHP 7.0.14 以降で利用可能
PHP_INI_* モードの詳細および定義については どこで設定を行うのか を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

opcache.enable boolean

オペコード・キャッシュを有効にします。 無効にした場合、コードは最適化もキャッシュもされません。 opcache.enable の設定を、実行時に ini_set() で有効化することはできません。 実行時にできるのは、無効化だけです。スクリプト内で有効化しようとすると、警告が発生します。

opcache.enable_cli boolean

PHP の CLI 版に対してオペコード・キャッシュを有効にします。

opcache.memory_consumption integer

OPcache によって使用される共有メモリ・ストレージのサイズ。( MB 単位)

opcache.interned_strings_buffer integer

インターン (intern) された文字列を格納するために使用されるメモリ量。( MB 単位) この設定ディレクティブの値は、PHP 5.3.0 未満では無視されます。

opcache.max_accelerated_files integer

OPcache ハッシュテーブルのキー(すなわちスクリプト)の最大数。 使用される現時点の値は、 素数の集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } のうち、 設定値以上の最初の数値です。 最小値は 200 です。最大値は、PHP 5.5.6 より前のバージョンでは 100000、PHP 5.5.6 以降では 1000000 となります。

opcache.max_wasted_percentage integer

再起動がスケジュールされるまでに許される、無駄なメモリの最大の割合。

opcache.use_cwd boolean

有効にすると、OPcache は現行の作業ディレクトリをスクリプト・キーに追加します。 その方法によって、同じ基底名を持つファイル同士で起こりうる衝突を回避します。 このディレクティブを無効にするとパフォーマンスが向上しますが、既存のアプリケーションを破壊するかもしれません。

opcache.validate_timestamps boolean

有効にすると、OPcache は、スクリプトが更新されたか opcache.revalidate_freq 秒ごとにチェックします。 このディレクティブが無効な場合、ファイルシステムへの変更を反映するには、 opcache_reset() または opcache_invalidate() 関数を介して、 または Web サーバを再起動して手動で OPcache をリセットしなければいけません。

opcache.revalidate_freq integer

更新のためにスクリプトのタイムスタンプをチェックする頻度。(秒単位) 0 にすると、OPcache は、リクエストごとに更新をチェックします。

この設定ディレクティブは、 opcache.validate_timestamps が無効の場合、 無視されます。

opcache.revalidate_path boolean

無効にすると、 同一の include_path を使用する、 キャッシュされた既存のファイルが再利用されます。 したがって、同じ名前を持つファイルが include_path の他の部分にあると、それは見つかりません。

opcache.save_comments boolean

無効にすると、最適化したコードのサイズを減らすために OPcode キャッシュからすべてのドキュメンテーション・コメントが廃棄されます。 この設定ディレクティブを無効にすると、注釈のためにコメント・パースに依存するアプリケーションおよびフレームワークを破壊するかもしれません。 それには、Doctrine、Zend Framework 2 および PHPUnit が含まれます。

opcache.load_comments boolean

無効にすると、たとえ存在していても、ドキュメンテーション・コメントはオペコード・キャッシュから読み込まれません。 これは、それらを必要とするアプリケーションでコメントを読み込むためだけに opcache.save_comments と一緒に使用できます。

opcache.fast_shutdown boolean

有効にすると、それぞれに割り当てられたブロックを解放しない、高速シャットダウン・シーケンスが使用されます。 しかし、リクエスト変数のすべてのセットをひとまとめに割当てを解除することは、Zend Engine のメモリ・マネージャに依存します。

opcache.enable_file_override boolean

有効にすると、file_exists()is_file() および is_readable() が呼ばれた際に、 ファイルが既にキャッシュ済みかどうかをオペコード・キャッシュからチェックします。 これは、PHP スクリプトの存在および読み込み可能かをチェックするアプリケーションのパフォーマンスを改善させるかもしれません。 しかし、opcache.validate_timestamps が無効な場合に、 陳腐化した結果を返す危険があります。

opcache.optimization_level integer

どの最適化パスが実行されるかコントロールするビットマスク。

opcache.inherited_hack boolean

PHP 5.3 未満では、OPcache は DECLARE_CLASS オペコードが継承を使用した場所を保存します。 ファイルが読み込まれる際に、OPcache は現行の環境を使用して継承クラスをバインドしようとします。 DECLARE_CLASS オペコードが現行のスクリプトで不要かもしれない時に問題です。 オペコードが定義されていることをスクリプトが必要とする場合、それは実行できないかもしれません。

この設定ディレクティブの値は、PHP 5.3 以降では無視されます。

opcache.dups_fix boolean

"Cannot redeclare class" (クラスを再宣言できません)というエラーを回避する目的でのみ、このハックを有効にするべきです。

opcache.blacklist_filename string

OPcache ブラックリスト・ファイルの場所。 ブラックリスト・ファイルは、高速化すべきではないファイルの名前を 1 行につき 1 つ含むテキストファイルです。 ワイルドカードが許されます。そして、プレフィックスも提示できます。 セミコロンで始まる行は、コメントとして無視されます。

簡単なブラックリスト・ファイルは、以下の通りかもしれません。

; 特定のファイルに一致します。
/var/www/broken.php
; x で始まるすべてのファイルに一致するプレフィックス
/var/www/x
; ワイルドカード一致です。
/var/www/*-broken.php
opcache.max_file_size integer

キャッシュできるファイル・サイズの最大。(バイト単位) これが 0 の場合、すべてのファイルがキャッシュされます。

opcache.consistency_checks integer

ゼロ以外の場合、OPcache は、リクエスト N 回毎にキャッシュのチェックサムを検証します。 N は、この設定ディレクティブの値です。 パフォーマンスを損なうので、これはデバッグ時のみ有効にすべきです。

opcache.force_restart_timeout integer

キャッシュがアクティブではない場合に、スケジュールされた再起動が始まるのを待つ時間の長さ。(秒単位) タイムアウトに達すると、OPcache は何か具合が悪いとみなして、リスタートできるようにするためにキャッシュのロックを所持する処理を殺します。

opcache.log_verbosity_level が 2 以上の場合、警告発生時にエラーログに記録されます。

opcache.error_log string

エラーに対するエラーログ。 空の文字列は、stderr と同様に扱われ、 結果として標準エラー(ほとんどの場合、Web サーバーのエラーログです)に送られるログになります。

opcache.log_verbosity_level integer

ログ冗長レベルです。 デフォルトでは、致命的エラー(レベル 0 )およびエラー(レベル 1 )だけが記録されます。 利用できる他のレベルは、警告(レベル 2 )、情報メッセージ(レベル 3 )およびデバッグ・メッセージ(レベル 4 )です。

opcache.preferred_memory_model string

OPcache が使用する優先のメモリ・モデル。 空のままにすると、OPcache は最も適切なモデルを選びます。 それは実質的にすべての場合に正しいふるまいです。

可能な値には、mmapshmposix および win32 があります。

opcache.protect_memory boolean

スクリプト実行中に予期しない書込みから共有メモリを保護する。 これは、内部のデバッギングだけに役立ちます。

opcache.mmap_base string

Windows 上で共有メモリ・セグメントに使用される基底。 すべての PHP 処理は、共有メモリを同じアドレス空間にマップしなければいけません。 このディレクティブを使用すると、"Unable to reattach to base address" (基底アドレスに再アタッチできません) というエラーを修復できます。

opcache.restrict_api string

OPcache API 関数の呼び出しを、指定した文字列から始まるパス上の PHP スクリプトからだけに制限します。 デフォルトは "" で、これは、何も制限しないことを意味します。

opcache.file_cache string

ファイルベースのセカンドレベル opcode キャッシュを有効にし、そのディレクトリを設定します。 これは共有メモリ上の opcode キャッシュがいっぱいの時やサーバ再起動時、 もしくは共有メモリ上の opcode キャッシュをリセットした場合のパフォーマンスを向上させます。 デフォルトは "" で、これはファイルベースのキャッシュを無効にします。

opcache.file_cache_only boolean

共有メモリ内でのオペコード・キャッシュを有効あるいは無効にします。

opcache.file_cache_consistency_checks boolean

ファイルキャッシュから読み込んだスクリプトのチェックサムの検証を有効あるいは無効にします。

opcache.file_cache_fallback boolean

共有メモリへの再アタッチに失敗するプロセスについて、 opcache.file_cache_only=1 であるものとみなします (Windows のみ)。 ファイルキャッシュを明示的に有効にする必要があります。

opcache.validate_permission boolean

Validates the cached file permissions against the current user.

opcache.validate_root boolean

Prevents name collisions in chroot'ed environments. This should be enabled in all chroot'ed environments to prevent access to files outside the chroot.

add a note add a note

User Contributed Notes 5 notes

up
1
damien at overeem dot org
3 months ago
When using PHP on a windows platform and enabling opcache, you might run into occasional 500 errors. These will appear to show up entirely random.

When this happens, your windows Event log (Windows Logs/Application) will show (probably multiple)  entries from Zend OPcache with Event ID 487. Further information will state the following error message: "Base address marks unusable memory region".

This issue can be resolved by adding the following to your php.ini:

    opcache.mmap_base = 0x20000000

Unfortunately I do not know the significance of the value "0x20000000". I can only tell you that this value works to solve the problem (Tried and tested)
up
1
bdurand at ensemblegroup dot net
4 months ago
It would appear as though the [opcache.enable] setting is indeed NOT PHP_INI_ALL.
For changing it within user.ini yields no effect when disabled at global level. user.ini is ignored for that setting.
up
-2
Tizian Schmidlin st at cabag dot ch
1 year ago
When running PHP on Windows, you need to be running the Webservice (Apache or IIS) as a local administrator in order to allow PHP to create a shared memory segment. If you run your webservice as anything else, OPCache will simply be disabled.
up
-2
jpokress at gmail dot com
9 months ago
Windows PHP 7 users PLEASE NOTE:

You need to add the following line to your php.ini file in order for opcache to be loaded:

zend_extension=php_opcache.dll

This was missing from the stock php.ini file in the distribution I obtained. Credit:

http://stackoverflow.com/questions/19495935/php-5-5-opcache-not-working-on-apache
up
-7
BR
1 year ago
opcache.max_wasted_percentage must have a value between 1 and 50. Otherwise it will automatically set the variable 5 %.
To Top