1. エラー内容
先日Wordpress5.5の更新が来ていたため、Wordpressの更新と併せてプラグイン「amazon-s3-and-cloudfront」と「amazon-s3-and-cloudfront-tweaks」の更新を行ったところ、「サイトに重大なエラーがありました。」と表示された際の備忘録です。これらのプラグインはOCIでオブジェクトストレージから画像を読み込む為に利用しています。
環境
- Ubuntu 20.04 LTS
- WordPress 5.5
- amazon-s3-and-cloudfront 2.4.1
- amazon-s3-and-cloudfront-tweaks 0.4.0
2. 原因
amazon-s3-and-cloudfrontのversion 2.4からstorage-provider.phpというファイルが追加されているらしく、こちらからの呼び出しの際に、呼び出し元と呼び出し先の引数の数が異なる為でした。デバッグ時のエラーは以下です。
PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function Amazon_S3_and_CloudFront_Tweaks::minio_s3_url_domain(), 5 passed in /www/wp-includes/class-wp-hook.php on line 287 and exactly 6 expected in /www/wp-content/plugins/amazon-s3-and-cloudfront-tweaks/amazon-s3-and-cloudfront-tweaks.php:314 Stack trace: #0 /www/wp-includes/class-wp-hook.php(287): Amazon_S3_and_CloudFront_Tweaks->minio_s3_url_domain() #1 /www/wp-includes/plugin.php(206): WP_Hook->apply_filters() #2 /www/wp-content/plugins/amazon-s3-and-cloudfront/classes/providers/storage/storage-provider.php(664): apply_filters() #3 /www/wp-content/plugins/amazon-s3-and-cloudfront/classes/amazon-s3-and-cloudfront.php(2456): DeliciousBrains\WP_Offload_Media\Providers\Storage\Storage_Provider->get_url_domain() #4 /www/wp-content/plugins/amazon-s3-and-cloudfront/classes/amazon-s3-and-cloudfront.php(2328): Amazon_S3_And_CloudFront->get_attachment_provider_url() #5 /www/wp-content/plugins/amazon-s3-and-cloudfront/classes in /www/wp-content/plugins/amazon-s3-and-cloudfront-tweaks/amazon-s3-and-cloudfront-tweaks.php on line 314
3. 対応内容
3-1. エラーの特定
エラーの特定にはWordpressのデバッグモードを利用しました。
- WordPressにホストしているサーバにログインし、Wordpressフォルダ直下のwp-config.phpを修正します。
修正前
define( 'WP_DEBUG', false ); define( 'WP_DEBUG_LOG', false );
修正後define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true );
- Webサイトにアクセスし、エラーを発生させます。
- debug.logを確認します。エラーログはデフォルトでは
/wordpress-root-dir/wp-content/debug.log
に出力されます。 - エラー対処(今回は問題モジュールの特定と修正を実施。)
3-2. モジュールの無効化
管理画面を含むWebサイトが操作できませんでしたので、モジュールの無効化はcliから実施しました。wp-cliをインストールし利用しました。
wp-cliのインストール
WordPress環境ではphpが既にインストール済ですので、公式サイトの手順のまま対応可能です。
無効化及びステータスの確認等は以下のコマンドで実施可能です。
//インストールプラグインのステータス確認 sudo wp --allow-root plugin status //プラグインの無効化 sudo wp --allow-root plugin deactivate amazon-s3-and-cloudfront-tweaks //プラグインの有効化 sudo wp --allow-root plugin activate amazon-s3-and-cloudfront-tweaks
3-3. エラー箇所の修正
引数の数が問題でしたので、引数の数と呼び出し先の引数を修正しました。
引数のpreviewは元々利用していないので、プラグインの機能に影響はありません。”amazon-s3-and-cloudfront-tweaks”側の”amazon-s3-and-cloudfront-tweaks.php”を修正します。
修正前
add_filter( 'as3cf_aws_s3_url_domain', array( $this, 'minio_s3_url_domain' ), 10, 6 ); function minio_s3_url_domain( $domain, $bucket, $region, $expires, $args, $preview ) {
修正後
add_filter( 'as3cf_aws_s3_url_domain', array( $this, 'minio_s3_url_domain' ), 10, 5 ); function minio_s3_url_domain( $domain, $bucket, $region, $expires, $args ) {