edo1z blog

プログラミングなどに関するブログです

EC2 phpmyadminが動かない

APCとmemcachedを入れたことが原因だった。

当初でていたエラーはこれ。

Undefined property: PMA_Error::$hash in /usr/share/phpMyAdmin/libraries/Error.class.php on l     ine 169

Notice:  Undefined property: PMA_Error::$isDisplayed in /usr/share/phpMyAdmin/libraries/Message.class     .php on line 724

Notice:  Undefined property: PMA_Error::$params in /usr/share/phpMyAdmin/libraries/Message.class.php      on line 538

Fatal error:  Class 'PMA_Message' not found in /usr/share/phpMyAdmin/libraries/Message.class.php on l     ine 649

これはセッションが変なときに出るやつらしい。PHPMyAdmin Error: Class ‘PMA_Message’ not foundここにエラーのことが書いてある。セッション書き込み権限がない的なことが書いてある。

通常、php.iniのsession.save_pathに設定されているディレクトリにsessionが書き込まれるので、そこの権限がapacheになってないといけない。chown root:apache ディレクトリ、chmod 660 ディレクトリみたいになっているか確認する必要がある。自分の場合はそうなっていたが、APCをインストールしたらこのエラーがでるらしい。下記によって、phpmyadmin内ではapcを無効にするとエラーがでなくなった。

vim /etc/httpd/conf.d/phpMyAdmin.conf

<Directory /usr/share/phpMyAdmin/>
   php_admin_value apc.enabled 0
</Directory>

参考:Running phpMyAdmin with APC cache enabled, fatal PHP errors

これで当初のエラーがなくなったが、下記のようなセッション関連のエラーが出続けてなんでかなと思ったら、memcachedを入れたときに、/etc/php.d/memcache.iniに、session.save_path="tcp://localhost:11211"と書いていた。だから、php.iniのsession.save_pathは無効になってる状態だった。。

Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

memcachedを使いつつ、phpmyadminを正常に動かす方法もあるのかもしれないけど、下記でmemcachedをphpmyadminだけで無効にする方法が書いてあった。

Phpmyadmin doesn't work if session.save_handler set to memcache

You might have to change this lines in phpmyadmin folder 'libraries/session.inc.php': Try include this line at the top of the file: ini_set('session.save_path', "/tmp/"); Uncomment this line (about 74): ini_set('session.save_handler', 'files');

ソースコードいじるっていうのはかなり微妙だし、やってるのはini_setだけなので、/etc/httpd/conf.d/phpMyAdmin.confを下記のようにてみた。

<Directory /usr/share/phpMyAdmin/>
   php_admin_value apc.enabled 0
   php_value session.save_path /tmp/session
</Directory>

これでできた。長かった。。

ちなみに、config.inc.phpの場所は、色んなブログに、/usr/share/phpMyAdmin/config.inc.phpと書いてあったので、ないないと思ってたら、/etc/phpMyAdmin/config.inc.phpにあった。

AmazonLinuxで割と新しい版のphpmyadminをインストールするには、下記でやるとよかった。

yum install --enablerepo=remi,epel,ius phpMyAdmin