soycmsとsoyshopバージョンアップしphp8にしたらデータベースと接続できなくなった 投稿する

投稿者:Huckle Berry  投稿日時:2023-09-11 13:08:23
soycms3.0.2p130→soycms_3.13.6
soyshop1.18.2p310→soyshop_2.9.2

にバージョンアップ後、
PHP7.2からPHP8.2に変更し、データベースのバージョンアップを
押したところ、接続が消えたorデータベースが消えた
のかわかりませんが、
サイトが消えました。

その後、バックアップのデータベースに戻しましたが
ログインできなかったので、

https://saitodev.co/article/SOY_CMS%E3%81%A7%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%81%AE%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%99%82%E3%81%AE%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E5%BF%98%E3%82%8C%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%86%8D%E8%A8%AD%E5%AE%9A

ここを見てパスワードなしで管理画面に入りました。

すると添付の画面となります。

公開側は
Can not get DataSource (mysql:host=xxxx.xxx.jp;dbname=xxxxxxx).
と表示されているのみ。

何か対処方法はありますか・・・
投稿者:Huckle Berry  投稿日時:2023-09-11 13:20:33
レポートです。

DETECT DATE: 2023-09-11T13:13:48+09:00

MESSAGE: Can not get DataSource (mysql:host=xxxx.xxx.jp;dbname=xxxxxxx)
EXCEPTION TYPE: SOY2DAOException
LOCATION: /cms/common/lib/soy2_build.min.php (1620)

SOY CMS Version:			 3.13.6
SOY CMS Build Date:		2023-09-06T15:37:31+09:00
SOY CMS DB Type:			 mysql
SOY2RootDir:				 /home/xxxxx/xxxxxxxx.com/public_html/cms/common/
SOY2_DOCUMENT_ROOT:		undefined


STACK TRACE
-----------------------
0:SOY2DAO::_getDataSource
	argument[0]: String("mysql:host=xxxx.xxx.jp;dbname=xxxxxxx")
	argument[1]: String("データベースユーザー名入っています")
	argument[2]: String("データベースのパスワードが入っています")

	/cms/common/lib/soy2_build.min.php(1594)
-----------------------
1:SOY2DAO->getDataSource

	/cms/common/lib/soy2_build.min.php(1695)
-----------------------
2:SOY2DAO->executeQuery
	argument[0]: SOY2DAO_Query ["select `id`,`user_id`,`app_id`,`app_role`,`app_role_config` from `AppRole` where `user_id` = :userId"]
	argument[1]: array (
		':userId' => NULL,
	)

	/cms/admin/cache/3.13.6_dao_cache_AppRoleDAOImpl_3df3b5b05241d6b23aa6a9a266d1518c.class.php(116)
-----------------------
3:AppRoleDAOImpl->getByUserId
	argument[0]: null

	/cms/common/logic/admin/Application/ApplicationLogic.class.php(101)
-----------------------
4:ApplicationLogic->getLoginableApplications
	argument[0]: null

	/cms/common/logic/admin/Application/ApplicationLogic.class.php(125)

Server Environment
PHP Version:			7.4.33

PHP SAPI NAME:		cgi-fcgi
PHP SAFE MODE:		No
SHORT_OPEN_TAG:		 No

MEMORY_LIMIT:		 200M Bytes
Memory Usage:		 1,192,720 Bytes
						2,097,152 Bytes (Real)
						1,236,760 Bytes (Peak)
						2,097,152 Bytes (Peak, Real)

MAX_EXECUTION_TIME:	 30 sec.
POST_MAX_SIZE:		30M Bytes
UPLOAD_MAX_FILESIZE:	30M Bytes

mb_string:			Yes
PDO:					Yes
PDO_SQLite:			 Yes
PDO_MySQL:			Yes
Standard PHP Library: Yes
SimpleXML:			Yes
JSON:				 Yes
Services_JSON:		No
ZIP:					Yes
ZipArchive:			 Yes
Archive_Zip:			No
OpenSSL:				Yes
HASH:				 Yes
GD:					 Yes

Module/CGI			CGI
Rewrite				 Unknown

USER_AGENT:			 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
REQUEST_URI:			/cms/admin/
SCRIPT_NAME:			/cms/admin/index.php
PATH_INFO:			
QUERY_STRING:		 

DOCUMENT_ROOT:		/home/xxxxx/xxxxxxxxxx.com/public_html
SCRIPT_FILENAME:		/home/xxxxx/xxxxxxxxxx.com/public_html/cms/admin/index.php

SOY CMS Options
SOYCMS_ALLOWED_EXTENSIONS: undefined
SOYCMS_ALLOW_PHP_SCRIPT:	 undefined
SOYCMS_SKIP_MOBILE_RESIZE: undefined
SOYCMS_BLOCK_LIST:		 undefined
SOYCMS_TARGET_DIRECTORY:	 /home/xxxxx/xxxxxxxxxx.com/public_html/
SOYCMS_TARGET_URL:		 undefined
SOYCMS_ADMIN_ROOT:		 undefined
SOYCMS_LANGUAGE:			 ja
投稿者:齋藤亮子  投稿日時:2023-09-11 13:48:15
データベースは、以前はSQLiteかMYSQLのどちらをお使いでしたでしょうか?
もし、SQLiteを使っていたのに、MYSQLをインストールした場合、Can not get DataSourceのエラーが出ます。
投稿者:Huckle Berry  投稿日時:2023-09-11 13:48:52
MYSQLです!
投稿者:齋藤亮子  投稿日時:2023-09-11 14:01:50
/CMSインストールディレクトリ/config/db/mysql.phpに記載されているMySQLの情報を使って、PHPMyAdmin等で直接データベースに接続し、Siteテーブルにデータが残っているか?の確認をしてみてください。

もし、MySQLを直接コマンドで実行する場合は、
SELECT * FROM Site;
で結果が返ってくるか?を確認してください。

Administratorのテーブルの方もデータが残っているか?も確認してください。
SELECT * FROM Administrator;
投稿者:Huckle Berry  投稿日時:2023-09-11 14:04:57
phpMyadminログインして確認しています。

siteテーブル
Administratorテーブル
ともにデータ残っています。

サイトが消えてから、データベースは昨日のバックアップに戻しています。
投稿者:齋藤亮子  投稿日時:2023-09-11 14:15:35
PHPMyAdminに接続する時は/CMSインストールディレクトリ/config/db/mysql.phpに記載されているでログインしましたか?
もし使用していたら、MESSAGE: Can not get DataSource (mysql:host=xxxx.xxx.jp;dbname=xxxxxxx)のエラーにはならないはずなので、パスワードなしでログインした時に意図しない操作が入っている可能性があります。
投稿者:Huckle Berry  投稿日時:2023-09-11 14:33:39
ログインIDとパスワード使用しても入れないので
https://saitodev.co/article/SOY_CMS%E3%81%A7%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%81%AE%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%99%82%E3%81%AE%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E5%BF%98%E3%82%8C%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%86%8D%E8%A8%AD%E5%AE%9A

↑こちらのやり方でパスワードなしでログインしました。

27行目付近
function login($userid,$password){
	return true; //←この行を追加
$dao = SOY2DAOFactory::create("admin.AdministratorDAO");

とありましたが
soycms_3.13.6だと
		try{
			$bean = SOY2DAOFactory::create("admin.AdministratorDAO")->getByUserId($userid);
		}catch(Exception $e){
			return false;
}

になっていたので、

$bean
の一行上に挿入したのですが。

PHPMyAdminは、/CMSインストールディレクトリ/config/db/mysql.php
に記載のものでログインしています。

パスワードありでログインに戻すと、ログインできません。

エックスサーバー使用していますが
MARIADB5.5(旧MySQL5.0)
なのが問題でしょうか?

バージョンアップ前は動いていましたが…
投稿者:齋藤亮子  投稿日時:2023-09-11 15:14:19
/CMSインストールディレクトリ/common/lib/soy2_build.min.php
1615行目の

try{
	$pdo[$dsn] = new PDO($dsn,$user,$pass,$pdoOptions);
} catch (Exception $e) {
	$event = SOY2DAOConfig::getOption("connection_failure");
	if($event == "throw"){
		throw new SOY2DAOException("Can not get DataSource ({$dsn})", $e);
	}else{
		die("Can not get DataSource ({$dsn}).");
	}
}

try{
	$pdo[$dsn] = new PDO($dsn,$user,$pass,$pdoOptions);
} catch (Exception $e) {
	var_dump($e);
	$event = SOY2DAOConfig::getOption("connection_failure");
	if($event == "throw"){
		throw new SOY2DAOException("Can not get DataSource ({$dsn})", $e);
	}else{
		die("Can not get DataSource ({$dsn}).");
	}
}
に変更した後、再びブラウザで管理画面のURLにアクセスして、出力されたエラーの確認をお願いします。
投稿者:Huckle Berry  投稿日時:2023-09-12 09:20:09
変更しました。

かなりたくさんエラーができましたが、とりあえず最初の文です。
ログイン画面のエラーです。

Deprecated: Creation of dynamic property AutoLoginAction::$_result is deprecated in /home/xxxxx/xxxxxxxxxxxxxx.com/public_html/cms/common/lib/soy2_build.min.php on line 537
object(PDOException)#24 (8) { ["message":protected]=> string(428) "SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(2000) ["file":protected]=> string(81)
投稿者:齋藤亮子  投稿日時:2023-09-12 12:54:30
mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.
ですが、最初にやりとりにあります
PHP7.2からPHP8.2に変更
が影響している可能性がありそうです。

phpMyAdminでPHPとMySQLを繋げる為に作成したアカウントのパスワードを変更してみると解決するかもしれません。
http://piyopiyocs.blog115.fc2.com/blog-entry-844.html
投稿者:Huckle Berry  投稿日時:2023-09-12 13:59:31
サーバーの管理画面から、パスワードを再設定(同じもので)したら接続できました!
ありがとうございます。

PHP8.2だと、3行ほどエラーが表示されましたので
とりあえずはPHP8.0で使用させていただきます。

ありがとうございました!
投稿者:齋藤亮子  投稿日時:2023-09-12 14:47:22
解決したようでよかったです。

PHP8.2だと、3行ほどエラーが表示されました
可能であれば上記のエラーコードを教えて頂きたいです。
よろしくお願い致します。
投稿者:Huckle Berry  投稿日時:2023-09-12 14:54:47
ログイン後
Deprecated: Creation of dynamic property CheckVersionAction::$_result is deprecated in /home/xxx/xxxxxxxxxxxxx.com/public_html/cms/common/lib/soy2_build.min.php on line 537

Deprecated: Creation of dynamic property CheckAdminVersionAction::$_result is deprecated in /home/xxx/xxxxxxxxxxxxx.com/public_html/cms/common/lib/soy2_build.min.php on line 537
Deprecated: Creation of dynamic property DefaultLoginAction::$_result is deprecated in /home/xxx/xxxxxxxxxxxxx.com/public_html/cms/common/lib/soy2_build.min.php on line 537

/CMSインストールディレクトリ/common/lib/soy2_build.min.php
で行った1615行目の変更は

変更後、変更前ともに同じエラーです。

soyshopに入った後、公開側でもエラーが出ています。
投稿者:齋藤亮子  投稿日時:2023-09-12 15:00:50
ありがとうございます。
次期バージョンで反映します。

すぐに解消したければ、
/CMSインストールディレクトリ/common/lib/soy2_build.min.php
の487行目付近の

/**
 * @package SOY2.SOY2Action
 */
class SOY2Action extends SOY2ActionBase{
	const SUCCESS = "_success_";
const FAILED = "_failed_";
の後に
private $_result;
を追加すれば解決するはずです。
投稿者:Huckle Berry  投稿日時:2023-09-12 15:13:15
解消しました!
soyshopの方ではまだエラーがたくさん出てきるので
soyshopの方で質問させていただきますね。
ログインして投稿する