[WordPress]StaticPress-S3プラグイン使用時にエラーになる場合
StaticPressで静的ファイルを作成した後、そのファイルをs3にアップロードしてくれる staticpress-s3プラグインをインストールしました。
cd wp-content/plugins
git clone https://github.com/megumiteam/staticpress-s3.git
chown -R apache:apache staticpress-s3
s3のバケット設定を済ませた後、設定画面にアクセスキー等を入力して、再構築を行ったのですが初期化が終わって「フェッチ開始」と表示された後すぐエラーになってしまう現象が発生しました。
(s3バケット設定後、設定画面からs3の項目が消えてしまいました。) とりあえず
tailf /var/log/php-fpm/www-error.log
でログを確認してみると、
[26-Oct-2014 08:53:26 UTC] PHP Fatal error: Cannot redeclare class Guzzle\Service\ClientInterface in phar:///var/www/vhosts/blog.hello-world.jp.net/wp-content/plugins/staticpress-s3-master/includes/aws.phar/Guzzle/Service/ClientInterface.php on line 16
とのエラーが。
AWSのPHP SDKの中で重複してクラス定義が行われてしまっているとのこと。
調べてみると、AWS PHP SDKの FAQページに「Why am I seeing a "Cannot redeclare class" error?」という項目があり、
Disable APC for CLI - Change the apc.enable_cli INI setting to Off.
Tell APC not to cache phars - Change the apc.filters INI setting to include "^phar://".
Don't use APC - PHP 5.5, for example, comes with Zend OpCache built in. This problem has not been observed with Zend OpCache.
Don't use the phar - You can install the SDK through Composer (recommended) or by using the zip file.
と書かれていました。
どうやらAPCでcacheされてしまうことで上記エラーが発生するようです。
そこで以下のようにapc.iniにapc.filtersを追加。
# /etc/php.d/apc.ini
; Enable apc extension module
extension=apc.so
apc.shm_size=128M
apc.filters="^phar://"
php-fpmに設定を反映
sudo /etc/init.d/php-fpm reload
これで再度StaticPressの設定画面にアクセスするとs3のバケット選択メニューが追加されているので保存先バケットを選択します。
一度staticディレクトリを削除して、「再構築」を実行するとs3にアップロードできました。
ハマりました。