coreserverでのAPC(Alternative PHP Cache)について調べてみた
ちょっとCoreserverで動かしてるphpアプリで、APCが使えるなら使ってみたいと思ったので調べてみました。
まとめ
その前に注意
- Coreserverはサーバーによって構成が異なるので、このエントリーが当てはまらないかも知れません。
- このエントリーの方法がCoreserverに許可されているかどうか分かりません。このエントリーの趣旨はAPCが使えたではなく、あくまで調べたまとめです。
手順
複数ドメインを運用してて、Subにwww.example.comを設定しているとします。
AddHandler application/x-httpd-php5cgi .php
まずはPHPをCGIモードで動くように、/public_html/www.example.com/.htaccess
を置きます。一応、PHP4で動かすならちょっと内容が違い((x-httpd-php4cgi
だったかな?))ます。
extension_dir = "/usr/local/lib/php/extensions/" extension=apc.so
次にこの内容のphp.iniを/public_html/www.example.com/php.ini
に設置します。APCを動かすだけならこれで一応完了です。ただ、APCの設定値をどうするかというのもあるし、前述の通り使って良いものなのかどうか分かりません。
詳細
<初期費用無料> 超高速・高安定レンタルサーバー コアサーバー(CORESERVER)- 30日間無料お試しPHPが白紙になる、正常に実行されない場合について
可能性として、運用されているPHPスクリプトと、サーバー側でのPHP高速化・キャッシュモジュールとの相性の問題が発生していることがあります。その場合は、下記コマンドを「.htaccess」に記載してください。
php_flag apc.cache_by_default off
※標準でキャッシュがOnになっており、高速化されております。明示的に有効にするには、下記コマンドを「.htaccess」に記載してください。
php_flag apc.cache_by_default on
そもそも、このページを読む限り、CoreserverではAPCは元々導入されているはずです。にもかかわらず、自分が確認できる2つのサーバーでは、APCが動いていませんでした。php_flag apc.cache_by_default on
を書いたり、phpをモジュールモード・CGIモードに切り替えたりしてみても、phpinfo()
でAPCの項目は出てきません。
http://sb.xrea.com/showthread.php?t=10744○「php.ini」を設置、カスタマイズして動かす
ご自身で「php.ini」を設置して動かすことができます。
設置場所は、呼び出すphpファイルを設置しているディレクトリ・フォルダ内になります。中略
## SQLiteモジュールを使う
extension_dir = "/usr/local/lib/php/extensions/"
extension=sqlite.so
extension=sqlite3.so
ここを見ると/usr/local/lib/php/extensions/
にphp拡張モジュールが置いてあるようです。
> ls /usr/local/lib/php/extensions/ apc.la eaccelerator.so no-debug-non-zts-20050922 php_ming.so sqlite.so xcache.so apc.so imagick.so no-debug-non-zts-20060613 sqlite3.so xcache.la
extension_dir = "/usr/local/lib/php/extensions/" extension=apc.so
前述の引用の通り、CGIモードでphpを動かすなら、php.iniを設置できるのでphp拡張モジュールを追加できます。SQLiteのケースを参考にapc.soを追加したところ、結果の通りAPCが動きました。
No cache info available. APC does not appear to be running.
APCはPECLで配布されていますが、そこからダウンロードした場合はapc.phpという管理画面の様なスクリプトが付いてきます。この元から設置してあったapc.soは3.0.15なので、PECL :: Package :: APCからAPC-3.0.15.tgzをダウンロードして、それのacp.phpを置いてみたら上記エラー。
array(10) { [0]=> string(25) "apc_cache_info_digirockvv" [1]=> string(15) "apc_clear_cache" [2]=> string(12) "apc_sma_info" [3]=> string(9) "apc_store" [4]=> string(9) "apc_fetch" [5]=> string(10) "apc_delete" [6]=> string(20) "apc_define_constants" [7]=> string(18) "apc_load_constants" [8]=> string(16) "apc_compile_file" [9]=> string(7) "apc_add" } <?php var_dump(get_extension_funcs('apc')); ?> <hr /> <?php show_source(__FILE__); ?>
APCの関数を出力してみたところapc_cache_info()が無く、代わりにapc_cache_info_digirockvv()
がありました。名前から察するにCoreserver側で何か手を入れているようです。apc.php内のapc_cache_info()
を一通りapc_cache_info_digirockvv()
に置き換えて、apc.phpも動きました。apc.phpの表示では、実際にAPCが動いてキャッシュされている事も確認できました。
と、こんな感じで、元々導入されてるはずなのに無かったり、でもapc.soだけは置いてあったりで、このまま使って良いのかどうかはちょっと謎です。一応こういう状況ですというまとめとして書いておきます。
環境
coreserver
Apache | 1.3.37 |
php | 5.2.5 |
APC | 3.0.15 |
*1:rbashは回避済み