お問い合わせはコチラから

【超簡単】PHP8にしたらSNS Count CacheでFatal Errorが出たので修正

サイト運営

WordPress6.4にしたタイミングでPHP8に移行した人は多いかもしれません。

でも、古いプラグインで更新されていないものはPHP8に対応していないことが多く、最悪Fatal Errorとなってサイトを破壊します。

SNS Count cacheもPHP8になって非推奨コードの警告が出るようになったのですが、特に問題なく動いているように見えました。

シェア数が更新されない感じがしていたので調べたら、Fatal Errorが出る箇所がありました。

プラグインの更新は停止しているので、自分で修正することにしました。

この記事ではプラグインのソースコードの修正方法をお伝えします。

SNS Count CacheがPHP8でFatal Errorになる場所

SNS count cacheのダッシュボードのキャッシュ状況のキャッシュボタンを押すと以下のエラーが出ます。

Fatal error: Uncaught Error: Object of class CurlHandle could not be converted to string
in /home/xxxx/public_html/xxxxxxx/wp-content/plugins/sns-count-cache/includes/class-scc-http.php on line 112

つまり、SNSカウント数を取得できないということですのでPHP8ではSNS count cacheは動かないということになります。

PHP8からcurl関連関数はCurlHandleオブジェクトを返すように変更されたようで、オブジェクトを文字列にキャストしている箇所がエラーになります。

PHP 8.0: `CurlHandle` class objects replace curl handlers
PHP 8.0: `CurlHandle` class objects replace curl handlers
$handle_to_sns[ (string) $ch[ $sns ] ] = $sns;

ところが、この部分はそれ以降使われていません。

なので、コメントアウトしてしまうとエラーが出なくなります。

キャッシュ状況確認ページでWarningが出る

Warrningが出ないサイトもあるので、コーナーケースなのかもしれないが、以下のようなWarnningが出たサイトがあった。

Trying to access array offset on value of type bool	
wp-content/plugins/sns-count-cache/includes/admin-cache-status.php:284

$sns_countsはtransientで保存されたキャッシュなので、キャッシュが無い場合はbool変数と見なされるため、配列としてアクセスすると警告が出る。

284行目付近にあるif文でis_array()関数を追加すると消える。


if ( is_array($sns_counts) && SCC_Cache::has_value( $sns_counts[ self::REF_CRAWL_DATE ] ) && -1 != $sns_counts[ self::REF_CRAWL_DATE ] ) {
// if (  SCC_Cache::has_value( $sns_counts[ self::REF_CRAWL_DATE ] ) && -1 != $sns_counts[ self::REF_CRAWL_DATE ] ) {
echo '<td class="full-cache" data-label="' . esc_attr( __( 'Crawl Date', self::DOMAIN ) ) . '">';
echo esc_html( $sns_counts[ self::REF_CRAWL_DATE ] );
echo '</td>';
}else {

Warrningが出ないサイトもあるので、コーナーケースなのかもしれないが、以下のようなWarnningが出たサイトがあった。

Undefined array key 1	
wp-content/plugins/sns-count-cache/includes/class-scc-http.php:140

trim(): Passing null to parameter #1 ($string) of type string is deprecated	
wp-content/plugins/sns-count-cache/includes/class-scc-http.php:140

$middleが配列じゃない場合もあるので、配列かどうか確認するコードを追加。

foreach ($data as $part) {
    $middle = explode(':', $part, 2);
    if (is_array($middle) && count($middle) == 2) { // 追加
        $headers[trim(strtolower($middle[0]))] = trim($middle[1]);
    }// 追加
}

まとめ

SNS count cahceがシェア数を拾ってこないと思ったら、PHP8でエラーになっている可能性がありますので、この記事の内容を確認してみてください

この記事を書いた人
ブーン

はるばる日本よりオランダ王国へやってまいりました。
自分の経験が少しでも参考になれば嬉しいです。
お問い合わせは、『こちら』からお願い致します。

\ブーンをフォロー/
スポンサーリンク
サイト運営
\シェアお願いします!/
\ブーンをフォロー/
こんな記事も読まれています

失敗しないレンタルサーバーランキング

mixhost

不正アクセスに強くて使いやすいおススメサーバー
\本サイトで利用中/
メリット①:自動ウィルス駆除対応
メリット②:サイトの表示速度が速い!
メリット③:転送量の上限が多い!
メリット④:自由にプラン変更ができ、アクセス増にも対応できる!
メリット⑤:バックアップデータが無料で復元できる!
メリット⑥:Wordpressが簡単にインストールできる!
メリット⑦:どのプランでも初期費用が無料!
メリット⑧:10日間の無料お試し期間と30日の返金保証!

Conoha Wing

国内Wordpress最速の最強サーバー
メリット①:圧倒的な表示速度
メリット②:レンタルサーバーと独自ドメインがセットでお得◎
メリット③:プラン変更はすべてのプランで自由自在
メリット④:一か月の利用転送量の制限が緩い(9TB~)
メリット⑤:WordPresサイトの移行が簡単

エックスサーバー

国内シェアNo1の安定性と実績が魅力。ALL SSDで死角なしの万能サーバー。
メリット①:サイトの表示速度が安定して速い!
メリット②:アクセス負荷に強くて安定性が高い!
メリット③:24時間365日の充実サポートで安心!電話サポートもあり!
メリット④:転送量が多い!
メリット⑤:自動バックアップ機能付き!
メリット⑥:WordPressが簡単にインストールできる!
メリット⑦:10日の無料お試し期間がある!

タイトルとURLをコピーしました