ionCube PHP Accelerator - 共有メモリのパーミッション設定
PHPA 1.3 のデザイン上、PHPA の共有メモリキャッシュ上のパーミッションが設定されていない場合、Apache が再起動し、サーバーの動作を止めてしまうことがあります。 Apache のエラーログに、オペレーションが許可されません、とかパーミッションが拒否されたといった PHPA のエラーが見受けられた場合は、それが問題の原因ですが、 この問題は簡単に解決することができます。
正しい設定
マニュアル設定の shm_user とshm_group は、バージョン 1.3.2 リビジョン 2 以前のバージョンでのみ必要となります。
正しい設定には、PHPA の shm_user・shm_group セッティング ini セッティングが Apache と同じ設定ユーザーやグループとして設定されることが必要です。 これらは Apache の httpd.conf ファイルで参照できます。
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# . On SCO (ODT 3) use "User nouser" and "Group nogroup".
# . On HPUX you may not be able to use shared memory as nobody, and the
# suggested workaround is to create a user www and use that user.
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group nogroup on these systems!
#
User nobody
Group nogroup
この場合、Apache の User、Group がそれぞれ Nobody、Nogroup と設定されていて、se が shm_user や shm_group を代用する設定となっております。またご注意頂きたいのが、 シングルクォート 「'」 を区切りとして名称に使うと、PHP がこれを名称の一部であると認識してしまうので、「'」 の御使用はお止め下さい。 「"」 は問題ございません。 設定の変更を完了したら、以下のリカバリ手順によって変更を反映させて下さい。
サーバーハングからのリカバリ
Apache をハング状態からうまく再起動するには以下の要領で行って下さい。
- Apache を止める
- 'ps axg | grep httpd' を使って、Apache のプロセスでまだ動いているものがないか確認する。もしあれば 'kill' を使って止めて下さい。そしてまた確認作業をして下さい。
- 'phpa_cache_admin -D' を使って、PHPA 共有メモリキャッシュが削除されているかを確認する。
- 'ipcs'を動かし、0x0c0deb00 か 202238720 というキーのアイテムを捜す。これらは存在してはいけませんが、もしあっても 'ipcrm' で取り省くことができます。
- Apche を再起動させます。
- 'ipcs' をもう一度起動します。すると共有メモリセグメントと 0x0c0deb00 というキーを持ったセマフォがあるはずです。所有権が shm_user で設定したものと同じであることを確認して下さい。
このようにすると、Apache は順調に動作します。




