TOPページからブログページへの リンクで表示されるページ上部にPHPのエラー 投稿する

投稿者:kamo  投稿日時:2025-06-17 09:24:29
いつも開発ありがとうございます、kamoです。

4月に Sqlite版SOY CMS 3.20.2、PHP8.2.22にバージョンアップしたサイトなのですが、
TOPページにブロック設定でブログ記事を表示しているのですが、
ブログ記事タイトルのリンクをクリックして該当記事ページへ移動すると
ページ上部に
PHPのエラーが表示されていることがわかり、投稿いたしました。

リンクで表示されるブログ記事ページのエラー内容
Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /*********/common/site_include/plugin/ButtonSocial/logic/BuildMetaLogic.class.php on line 13

修正方法をお教え頂きたくどうぞよろしくお願いいたします。
投稿者:齋藤毅  投稿日時:2025-06-17 09:57:02
/CMSインストールディレクトリ/common/site_include/plugin/ButtonSocial/logic/BuildMetaLogic.class.php
の107行目から
if(strlen($filepath)){
	$http = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https" : "http";
	return $http . "://" . str_replace("//", "/", $_SERVER["HTTP_HOST"]. "/" . $filepath);
}
というコードがありますが、こちらを
if(strlen($filepath)){
	$http = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https" : "http";
	return $http . "://" . str_replace("//", "/", $_SERVER["HTTP_HOST"]. "/" . $filepath);
}else{
	return "";
}
にすればエラーは消えると思います。
投稿者:kamo  投稿日時:2025-06-17 11:27:33
ご回答ありがとうございます、kamoです。
お教え頂いたコードに変更しましたが、エラーコードは消えず
CMSのキャッシュも削除していますが、そのままです。
他に直す箇所はありますでしょうか?
ご多忙のところ恐縮ですが、
どうぞよろしくお願いいたします。
投稿者:齋藤毅  投稿日時:2025-06-17 11:34:04
ゴリ押しの方法ですが、
/CMSインストールディレクトリ/common/site_include/plugin/ButtonSocial/logic/BuildMetaLogic.class.php
の13行目の
if(strlen($attrImagePath)) $image = $attrImagePath;

if(strlen((string)$attrImagePath)) $image = $attrImagePath;
に変更してみてください。
投稿者:kamo  投稿日時:2025-06-17 13:52:25
度々お手数をおかけします。
上記に変更しましたが、結果は変わりなくPHPエラーが出たままです。
投稿者:齋藤毅  投稿日時:2025-06-17 14:15:46
/*********/common/site_include/plugin/ButtonSocial/logic/BuildMetaLogic.class.php
の13行目は元々
if(strlen($attrImagePath)) $image = $attrImagePath;
↑ のコードでしたか?

PHPであれば、strlen関数にnullという値を渡してはならず、
(string)$attrImagePath
の処理でnullを空文字(0文字の文字列)に変換すれば、今回のエラーは回避出来るはずなのですが、これで解決できないとエラーの原因がわからないです。
投稿者:kamo  投稿日時:2025-06-17 15:12:52
13行目は
if(strlen($attrImagePath)) $image = $attrImagePath;
で間違いないです。

夜にでもバージョンを最新の3.20.5に上げてみます。
結果をまた投稿します。
投稿者:kamo  投稿日時:2025-06-17 21:59:46
kamoです。

ご教示頂いた内容の
-----------------------
・・・107行目から
if(strlen($filepath)){
	$http = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https" : "http";
	return $http . "://" . str_replace("//", "/", $_SERVER["HTTP_HOST"]. "/" . $filepath);
}
というコードがありますが、こちらを
if(strlen($filepath)){
	$http = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https" : "http";
	return $http . "://" . str_replace("//", "/", $_SERVER["HTTP_HOST"]. "/" . $filepath);
}else{
	return "";
}
にすればエラーは消えると思います。
------------------------
という内容でPHPエラーが消えました。

日中の修正ですが、
私のミスで同じサーバー内の別のSOYCMSのBuildMetaLogic.class.phpコードを修正して
しまっていたことに気が付き、改めて、該当ドメインのファイルを修正したところ、
エラーが消えました。

大変お騒がせいたしました。
ご教示ありがとうございました。
ログインして投稿する