web-dev-qa-db-ja.com

OPCacheを一時的に無効にします

私は最近PHP 5.4に移動し、OPCacheをインストールしました。非常に強力です!

キャッシュを一時的に無効にするにはどうすればよいですか?

私は試した :

 ini_set('opcache.enable', 0);

しかし、効果はありません。

ありがとう

39
Anthony

スクリプトを実行したら、ファイルをキャッシュしないには遅すぎます。 PHPの外部で設定する必要があります。

  • PHPがApacheモジュールとして実行される場合、.htaccessファイル:

    php_flag opcache.enable Off
    
  • PHPがCGI/FastCGIとして実行される場合、.user.iniファイル:

    opcache.enable=0
    

そして、いずれにしても、古き良きシステム全体のphp.iniアクセスできる場合。

75

opcache.enablePHP_INI_ALLです。これは、ini_set()doesが現在のみで動作することを意味します現在のリクエストでコンパイルされた残りのスクリプトのOPcacheキャッシュを無効にするリクエスト。 (強制的に有効にすることはできません)。他の要求についてはシステムのデフォルトに戻ります。この段階では、 auto_prepend_file スクリプトでini_setを実行しない限り、リクエストスクリプトはすでにキャッシュされています。

システムのデフォルト(PHP_INI_SYSTEM)は、PHPシステムの起動の一部としてラッチされ、再読み込みできません。たとえば、Apacheの場合、これらを変更/リロードするにはApacheを再起動する必要があります。

.htaccessphp_flagディレクティブは、mod_phpまたは同等のものを実行している場合にのみ適用されます。それらと.user.iniファイルはPHP_INI_PERDIRであり、リクエストのアクティブ化時にもラッチされます。

今、あなたが尋ねているかもしれないと思うQに。開発システムを使用している場合、最も簡単な方法は、適切なINIファイルにopcache.enable=0を設定し、Webサーバーを再起動します。=1に戻し、完了したら再起動します。

また、(開発コンテキストで)opcache.validate_timestamps=onおよびopcache.revalidate_freq=0の設定を検討してください。これにより、OPcacheが有効になりますが、スクリプトはコンパイル要求ごとに統計され、変更されているかどうかが確認されます。これにより、開発時に両方の長所が得られます。

opcache.blacklist_filenameディレクティブも参照してください。これにより、除外ファイルを指定できます。これに/var/www/testが含まれており、Webサービスのdocrootが/var/wwwである場合、/var/www/test*階層内のanyスクリプトはキャッシュされません。

お役に立てれば :)

21
TerryE

私の場合、特定のPHPファイルでopcacheを無効にするための最良の方法は次のとおりです:opcache_invalidate(__FILE__, true);

PHP:opcache_reset();ですべてのキャッシュをリセットすることもできます

1
Jul