MAMP は PHP の include がデフォルトでできる!しかし…

このエントリーをはてなブックマークに追加

MacにMAMPを導入したのと、phpのincludeができなかったので修正した | OZPAの表4

私も普段から利用している MAMPですが 、このエントリーを書くきっかけとなったブログを読んで、疑問に思った。

自分はデフォルトで PHP の include が出来なかった記憶が、ない!

最新版では仕様が変わったのかな???と思い、最新版 DL して確認してみました。

デフォルトで include できる!

はまったとされるコードの記載があったのですが、同様のコードで、新規インストールした MAMP で試してみたところ、問題なく include されて表示されました。

<?//
include("common/include/header.php");
?>

<? 〜 ?> のショートコードが問題かとも思ったのですが、デフォルトでショートコードも利用可能でした。

結果、 apache の設定をデフォルトの状態から変更せずとも、 PHP ファイルは include 可能でした。

では何が問題か?

更新が反映されない?

確認している時に気づいたのですが、 include のファイルを変更しても変更がなかなか反映されないのです。ですが、何度かリロードしていると、ちゃんと最新の状態が反映されます。

何度もリロードしないと反映されないということで、キャッシュ周りを疑い、 php.ini の中身を確認してみました。すると、最後の方に何やらキャッシュのコードが!?

[OPcache]
zend_extension="/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/opcache.so"
  opcache.memory_consumption=128
  opcache.interned_strings_buffer=8
  opcache.max_accelerated_files=4000
  opcache.revalidate_freq=60
  opcache.fast_shutdown=1
  opcache.enable_cli=1

これは???

OPcache?

検索してみました。

PHP: OPcache - PHP マニュアル > 関数リファレンス > PHP > の振る舞いの変更 > OPcache

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

このPHP拡張モジュールは PHP 5.5.0 以降のバージョンにバンドルされています。

引用元:PHP: OPcache - PHP マニュアル > 関数リファレンス > PHP > の振る舞いの変更 > OPcache

最新版の PHP はデフォルトで 5.5.3 に設定がされているので、キャッシュが有効な状態になっています。

このキャッシュにより一定時間ファイルの修正が反映されません。

そのため、元記事での現象は、可能性として include できなかったのではなくて、キャッシュにより include ファイルの反映前が表示されてしばらく読み込まれない状態のものが表示されていたのではないかと推測しました。

OPcache の設定を変更

コーディング時は修正が即座に反映してもらいたいので、 php.ini ファイルを変更して調整します。

設定は下記を参考にしてみました。

PHP: 実行時設定 - PHP マニュアル > 関数リファレンス > PHP > の振る舞いの変更 > OPcache

設定を変更する php.ini のありかは、/Applications/MAMP/bin/php/php5.5.3/conf/php.ini です。 /Applications/MAMP/conf/php5.5.3/php.ini ではないので要注意です。

opcache.enable=0 を加える

opcache.enable=0 を加えることで無効になります

[OPcache]
zend_extension="/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/opcache.so"
  opcache.memory_consumption=128
  opcache.interned_strings_buffer=8
  opcache.max_accelerated_files=4000
  opcache.revalidate_freq=60
  opcache.fast_shutdown=1
  opcache.enable_cli=1
  opcache.enable=0

結論

タイトルの通りで、MAMP は PHP の include がデフォルトでできる!

ただし、キャッシュが有効になっているので、コーディング用に利用したい場合はキャッシュを無効にしてつかいましょう。

apache の設定変更せずとも PHP の include は可能です。拡張子が .html で PHP を動かしたりするときは設定必要ですが、 include するくらいでは設定は不要です。