特定のPHPアプリケーションがきちんと動作しないときの対処法
2015-02-12
単純な原因でしたが、原因がわかるまで相当かかってしまったので、備忘録として。
現象
CentOS 6および7とDebian 7.8にて、他のCentOS 6が稼働するサーバーから移行してきたPHPのWebアプリケーションが動作しませんでした。空白(真っ白)のページが表示されたり、タイムアウトしたり、フレームワークのテンプレートのみ表示されたり……。
CentOS 6では、CakePHPのDispatcherクラスが正常に読み込めていないらしく、以下のログが"/var/log/httpd/error_log"に出力されていました。
[date] [error] [client XXX.XXX.XXX.XXX] PHP Fatal error: Class 'Dispatcher' not found in /var/www/html/app/index.php on line 103
CentOS 7では以下のログが"/var/logs/httpd/error_log"に出力されていました。
[date] [mpm_prefork:notice] [pid 16038] AH00170: caught SIGWINCH, shutting down gracefully
[date] [suexec:notice] [pid 1001] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[date] [auth_digest:notice] [pid 1001] AH01757: generating secret for digest authentication ...
[date] [lbmethod_heartbeat:notice] [pid 1001] AH02282: No slotmem from mod_heartmonitor
[date] [mpm_prefork:notice] [pid 1001] AH00163: Apache/2.4.6 (CentOS) PHP/5.4.16 configured -- resuming normal operations
[date] [core:notice] [pid 1001] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
Debian 7.8では、単に以下のログだけが"/var/log/apache2/error.log"に。
[date] [notice] caught SIGTERM, shutting down
原因
上記の現象の原因は全て、単純にphp.iniの設定不足でした。利用できるメモリの量に制限を与える、memory_limitの値が少なく、うまく動作できていなかったようでした。
実はPHP自体で以下のエラーを吐いていたようなのですが、あまりにもメモリが不足していると、そのエラーを出力できないこともあるようです。
PHP Fatal error: Allowed memory size of XXX bytes exhausted (tried to allocate XXX bytes) in …
対処
php.iniのmemory_limitの値を変更します。php.iniは、CentOSでは"/etc/php.ini"、Debianには"/etc/php5/apache2/php.ini"にあります。
memory_limit = 1024M
;上のように適切な値を割り当てるか、
memory_limit = -1
;上のように記述し上限をなくします
設定後は、Apacheの再起動を忘れずに。
apachectl restart
まとめ
httpd.confばかり見ていたので、php.iniは盲点でしたとさ。