PHP5系から7.4にしたらサイト内検索がつかえなくなりました。

上記のトピックで原因を探していたら、

ウィジェットエリアの1つ1つをオンオフして調べてみたところ、
「サイト内検索」をオンにするとエラーになることが判明しました。

現在、「サイト内検索」の表示をオフすることにより、
エラーが解消されているところです。

「サイト内検索」だけオンにしたところ、エラーとなります。

「サイト内検索」は、
コアウィジェットの中から何も加工せずに(加工できないと思いますが)
使用していたのでこれはバグなんでしょうか??

他の環境でも再現するか確認をお願いしたいところです。

とりあえず、表示できるようになりましたが、「サイト内検索」が使えない状態です。

という結果になりました。
「サイト内検索」が使えないバグ?ではないかと思いますので、
こちらに新しくトピックを作成しました。

他の方で同じ症状が発生してないでしょうか?

【環境情報】
・baserCMSのバージョン:4.4.1.1
・レンタルサーバー名:ロリポップ
・使用テーマ:bc_sample
・PHPスキル(自己評価): 全くわからない

1 Likes

先日リリースされたばかりのPHP7.4.12とbaserCMS4.4.1.1で
新規インストールして試してみましたが、再現しませんでした。
他に何かヒントになりそうな情報はありますでしょうか?

1 Likes

5系から7.4に変更したくらいでしょうか。
あと、ロリポップの一番安いプランくらいです。

再度、エラーを発生させてみました。

An Internal Error Has Occurred.

エラー: 内部エラーが発生しました。

と表示されます。

検索を作り直してみましたが結果は同じでした。

PHPのバージョンは7.4.4のようです。


デバッグモードに設定すると何か表示されますでしょうか?
上記ページはv3の情報ですが、同じように管理画面で設定できます。
1 Likes

こんばんは。

デバックモードですが、
以前も、選択できなくなっていて、
ちょっと作業が必要でした。

以前、こちらで教えていただいた方法で対応できました。

Argument 2 passed to TreeBehavior::formatTreeList() must be of the type array, bool given, called in /home/users/0/main.jp-サイト名/web/フォルダ名/lib/Cake/Model/Behavior/TreeBehavior.php on line 454

エラー: 内部エラーが発生しました。

Stack Trace

以下、この部分にはなにかがずらーっとでております。

これでなにか、わかりますでしょうか。

PHP Version 7.4.4
baserCMSバージョン: 4.4.1.1
データベース: SQLite

当方のLOLIPOPのホスティング環境に上記の環境を新たに作り、bc_sample(v.1.0.0)を別環境から移植して再現性を試みてみましたが、不具合は発生しませんでした。
サービスプランは違うかもしれませんが、ホスティングサービスも同じですので、比較的環境は近いと思います。

少し横道にそれますが、今回、はじめてSQLiteを使ってみましたが、バージョンアップやモジュールの追加などアップデートをした後は、キャッシュの内容とコンフリクトを起こして、見かけ上不具合を起こしたような挙動が多いなぁーという印象です。
ですので、アップデートの後は、ブラウザのキャッシュクリア、サーバーキャッシュクリア、場合によってはログアウトしての再ログインなどの手順を入れたほうが良いように感じました。

1 Likes

再現ありがとうございます。
発生しませんでしたか。

ですので、アップデートの後は、ブラウザのキャッシュクリア、サーバーキャッシュクリア、場合によってはログアウトしての再ログインなど、環境を刷新する作業を入れたほうが良いように感じました。

ブラウザキャッシュはコントロール+F5を押す。
サーバーキャッシュは画面の右上のボタンを押す、
というのは行っておりますが、
ログアウトは試してないので試してみましたが変化なしでした。

うーむ。

ふと思ったのですが、下記、サーバー側のphp.iniの設定はされていますか?
全くの当てずっぽうですが、再度、チェックしてみてください。
mbstring.internal_encodingの設定

1 Likes

こんにちは。
アドバイスありがとうございます。

「mbstring.internal_encoding」の項目を確認したところ、
「未設定」になっていたので、「UTF-8」にしました。
(これまで簡単インストールして、PHP5系で使ってきて不具合なかったので、この設定は7系にしたときに元?にもどってしまったのかもしれません。注意が必要ですね。)

結果、不具合は解消されませんでした。
別に原因があるのかな??

must be of the type array,

ありがとうございます、修正できるかも?後ほど修正ファイルを作ります。

1 Likes

回答ありがとうございます。

ということは、baserCMSの不具合という理解でよろしいのでしょうか?

エラーを吐いている場所を直せば早いんですが、CakePHP本体なので
できればここはさわらずに済ませたいです。
app/webroot/theme/bc_sample/Elements/widgets/search.php
上記のファイルの中身を教えていただけますでしょうか?
当トピックにファイルを添付いただくか、中身をテキストとして
貼り付けていただければ見てみます。

1 Likes

こんばんは。
これでよろしいでしょか?
よろしくお願いします。

<?php
/**
 * [PUBLISH] サイト内検索フォームウィジェット
 *
 * baserCMS :  Based Website Development Project <http://basercms.net>
 * Copyright (c) baserCMS Users Community <http://basercms.net/community/>
 *
 * @copyright		Copyright (c) baserCMS Users Community
 * @link			http://basercms.net baserCMS Project
 * @package			Baser.View
 * @since			baserCMS v 0.1.0
 * @license			http://basercms.net/license/index.html
 */

/**
 * $this->BcBaser->widgetArea('ウィジェットエリアNO') で呼び出す
 * 管理画面で設定されたウィジェットエリアNOは、 $widgetArea で参照できる
 */

if (Configure::read('BcRequest.isMaintenance')) {
return;
}
if (!empty($this->passedArgs['num'])) {
$url = array('plugin' => null, 'controller' => 'search_indices', 'action' => 'search', 'num' => $this->passedArgs['num']);
} else {
$url = array('plugin' => null, 'controller' => 'search_indices', 'action' => 'search');
}
/**
*$folders = $this->BcContents->getContentFolderList($this->request->params['Site']['id'], ['excludeId' *=> $this->BcContents->getSiteRootId($this->request->params['Site']['id'])]);
*/
$folders = $this->BcContents->getContentFolderList($this->request->params['Site']['id'], ['excludeId' => [12]]);
?>


<div class="widget widget-search-box widget-search-box-<?php echo $id ?>">
<h2>サイト内検索</h2>
<?php echo $this->BcForm->create('SearchIndex', ['type' => 'get', 'url' => $url]) ?>
<?php if($folders): ?>
<?php echo $this->BcForm->label('SearchIndex.f', 'カテゴリ') ?><br>
<?php echo $this->BcForm->input('SearchIndex.f', ['type' => 'select', 'options' => $folders, 'empty' => '指定しない', 'escape' => false]) ?><br>
<?php endif ?>
<?php echo $this->BcForm->input('SearchIndex.q', ['placeholder' => 'キーワード']) ?>
<?php echo $this->BcForm->hidden('SearchIndex.s', ['value' => $this->request->params['Site']['id']]) ?>
<?php echo $this->BcForm->submit('検索', array('div' => false, 'class' => 'submit_button')) ?>
<?php echo $this->BcForm->end() ?>
</div>
1 Likes

ありがとうございます、再現できました。
修正方法について後ほどお知らせします。

2 Likes

再現できましたか!ありがとうございます。

お待たせしました。baserCMSは同梱テーマも普通にPHPで書かれていて、
本体と同様に修正と改善が繰り返されているので、baserCMSをアップデート
する場合は実はテーマも更新する必要があります。方法は下記のとおりです。

thema/フォルダ内の bc_sample フォルダを削除します。
いちおうバックアップはとっておいてください。問題が解決すれば削除してよいです。

lib/Baser/Config/theme/
上記フォルダ内に最新の bc_sample テーマが入っていますので、これを
thema/ フォルダ内にコピーします。

念のために管理画面でキャッシュを削除します。

以上で解決できると思います。

3 Likes

yamamotoさん、いつもご対応ありがとうございます!
PHPの対応処理をしていただいたとのことなのですが、具体的には、どのような処理なのでしょうか?
同環境を作成しても再現しなかったので、作成済みのデータ(記事)の内容に起因して起きたこととしかおもえないのですが。。。
簡単で結構ですので、起きている事情と、対応策(対応いただいた内容)をお教えいただけるとうれしいです。
あと、dbkaiyuさんの場合、使用されているbc_sampleのバージョンは、前バージョン?をベースにカスタマイズされたものですので、新規にアップデートして使用するものではないとおもわれるため、今回のアップデートに伴って必要なファイルのみ差し替える対応になるかと思います。
取り沙汰されていたsearch.phpのみの差し替えでよいのでしょうか?そのあたりも合わせてご教示ください。
以上、たいへんお手数ですがよろしくお願いいたします。

1 Likes

search.phpに限って見ると、今まで上記のような改修が行われています。
上記のうち、今利用しているsearch.phpの改造元になっているのは
2016年11月14日(5d3fa15)の時点のファイルのようです。
$folders = $this->BcContents->getContentFolderList($this->request->params['Site']['id'], ['excludeId' => $this->BcContents->getSiteRootId($this->request->params['Site']['id'])]);

上記のように書かれている部分を

$folders = $this->BcContents->getContentFolderList($this->request->params['Site']['id'], ['excludeId' => [12]]);

上記のように書き換える改造を行なっているようです。つまり excludeId の値を決め打ちで
12 としています。なので最新の search.php の該当部分を探して 12 に変更すると
okということになります。

たぶんこんな感じで、他のファイルも変わっているはずなので、うーん、どうするかですね・・
どこをどう書き換えたのかは、専門のプログラマーならすぐ分かるのですが。
時間があったら、対応作業を行なうための手順をqiitaあたりで書いてみます。

1 Likes