ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    XAMPPでPHPの更新がすぐに反映されない場合の対策

    このエントリーを含むはてなブックマーク はてなブックマーク - XAMPPでPHPの更新がすぐに反映されない場合の対策 あとで読む
    Webサイトの開発で、XAMPPを使っていたら、PHPコードの変更がすぐに反映されなくて困りました。
    調べてみたら、PHPの「Zend OPcache」が有効になっていて、コード変更の反映にタイムラグが生じていました。
    →修正方法をメモ。

    ●Zend OPcacheとは?
    PHP: OPcache 導入 - Manual

    OPcache はコンパイル済みのバイトコードを共有メモリに保存し、PHP がリクエストのたびにスクリプトを読み込み、パースする手間を省くことでパフォーマンスを向上させます。

    このPHP拡張モジュールは PHP 5.5.0 以降のバージョンにバンドルされています。
    PHP 5.2, 5.3, 5.4 では PECL で利用可能です。



    PHP 5.5ネーティブキャッシュの話 from Rui Hirokawa


    OPcacheを有効にすると、変更したスクリプトを読み込むのではなく、すでに蓄積されているキャッシュのバイトコードの方を読み込んでしまい、変更がすぐに反映されていない状態になっていたんですね!

    phpinfo()でPHPの設定を確認してみます。

    opcache.enable On



    確かに、「opcache.enable」という項目があり、オプションが「On」になっていました。
    開発環境では、「opcache.enable」を「Off」にしておきましょう。

    ●PHPバイトコードのキャッシュ生成を無効化
    Zend OPcacheを開発環境で無効にする | Webエンジニアブログ
    ini_set('opcache.enable', 0);

    PHPのエントリーポイント(最初に実行される部分)に、この1行を入れておけば、とりあえず開発環境ではOPcacheを無効化できました。

    めでたし、めでたし!

    opcache.enable 無効化 - Google 検索
    検索してみたら、たくさん対策がヒットしたので、いろんな人が困っていたみたいですねw

    ini_set()を使って、とりあえず設定を変えるだけでもOKですが、ちゃんとやるならPHP設定ファイル「php.ini」の該当ディレクティブを書き換えておくべきでしょう。

    ●Zend OPcacheの役割
    Zend OPcacheは、中間コードのキャッシュだけでなく、コードの最適化も行ってくれるそうです。

    PHP 5.5 を使った時にキャッシュが効いてプログラムの変更が即、反映されなかった - 強火で進め

    OPcacheはその名前とは異なり、キャッシュ処理だけではなく、コードの最適化もしてくれるみたいです。
    その為、キャッシュはさせたくないけど最適化の恩恵は受けたいという場合にはOPcacheを無効にするのでは無く、更新チェック頻度の指定(秒)を0( opcache.revalidate_freq=0 )にして対応するのが良いでしょう。

    後、プログラム内で強制的に更新させたい場合には opcache_reset() や opcache_invalidate() 関数で行えます。



    なるほど。
    公開サーバーでは、PHPのZend OPcacheを有効にしておいた方が良さそうですね!


    詳細! PHP 7+MySQL 入門ノート
    大重 美幸
    ソーテック社
    2016/7/1
    ¥ 3,218


    関連記事

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    http://hamamuratakuo.blog61.fc2.com/tb.php/1413-0cc8d8ef

    FC2Ad