[WordPress]StaticPress-S3プラグイン使用時にエラーになる場合


[まとめ] 現在開催中のKindleセール情報はこちら

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?」という項目があり、

  1. Disable APC for CLI – Change the apc.enable_cli INI setting to Off.
  2. Tell APC not to cache phars – Change the apc.filters INI setting to include “^phar://”.
  3. Don’t use APC – PHP 5.5, for example, comes with Zend OpCache built in. This problem has not been observed with Zend OpCache.
  4. 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のバケット選択メニューが追加されているので保存先バケットを選択します。

staticpress

一度staticディレクトリを削除して、「再構築」を実行するとs3にアップロードできました。

ハマりました。

参考

[まとめ] 現在開催中のKindleセール情報はこちら