baserCMS の4.0.2.1のインストール時に、Illegal string offset 'Content' 等の警告がでる

flower4487 > baserCMS の4.0.2.1のインストール時に、Illegal string offset 'Content' 等の警告がでる @ 2017/3/16 17:22
本日、たまたま最新版のbaserCMS 4.0.2.1 をダウンロードしてインストールしようとしたら、

Warning (2): Illegal string offset 'Content' [CORE/Baser/Model/Behavior/BcUploadBehavior.php, line 106]

Warning (2): Illegal string offset 'Content' [CORE/Baser/Model/Behavior/BcUploadBehavior.php, line 111]

Warning (2): Illegal string offset 'EditorTemplate' [CORE/Baser/Model/Behavior/BcUploadBehavior.php, line 106]

Warning (2): Illegal string offset 'EditorTemplate' [CORE/Baser/Model/Behavior/BcUploadBehavior.php, line 111]


というようなエラーがでました。PHPは、7.1.1, SQLite 3.15.1 です。
原因は、BcUploadBehavior.php の $savePathプロパティ変数が配列ではなく文字列なのが原因のようです。

% diff -u BcUploadBehavior.php.orig BcUploadBehavior.php
--- BcUploadBehavior.php.orig   2017-03-16 16:38:26.750626000 +0900
+++ BcUploadBehavior.php        2017-03-16 16:43:09.809059000 +0900
@@ -50,7 +50,7 @@
  *
  * @var string
  */
-       public $savePath = '';
+       public $savePath = array();

 /**
  * 設定


PHP5.3以前ではうごいていたのかもしれませんが、5.4移行は警告がでるのかしもれません。
修正された方がいいと思います。

以上、報告いたします。

■ BaserCMSのバージョン: 4.0.2.1
■ PHPのバージョン: 7.1.1
■ 設置フォルダ: ドキュメントルート
■ PHPスキル(自己評価): C
■ OSの種類: FreeBSD 10.3

goichi > Re: baserCMS の4.0.2.1のインストール時に、Illegal string offset 'Content' 等の警告がでる @ 2017/3/16 23:13
こんにちは。
もしかしたら、baserCMSの土台になっているCakePHPが、7.1以上に対応できていないかも知れません。CakePHPの動作要件がありますので、参考までに掲載しておきます。
flower4487 > Re: baserCMS の4.0.2.1のインストール時に、Illegal string offset 'Content' 等の警告がでる @ 2017/3/17 12:20
リプライ有難うございます。

> もしかしたら、baserCMSの土台になっているCakePHPが、7.1以上に対応できていないかも知れません。
> CakePHPの動作要件がありますので、参考までに掲載しておきます。

サイトからダウンロードした basercms-4.0.2.1.zip に同梱されている CakePHPのバージョンは、2.8.5 でした (CORE/Cake/VERSION.txtを参照し確認)。
また、CakePHP バージョン 2.8.0 以上は PHP 7 をサポートするので大丈夫だと思います。また、7.1以上の場合、mcryptが必要と書かれていますが、これもインストール済みです。

% php -m | grep mcrypt
mcrypt


警告がでた、CORE/Baser/Model/Behavior/BcUploadBehavior.php の106,111行目をみると

105         if ($this->settings[$Model->alias]['saveDir']) {
106             $this->savePath[$Model->alias] = WWW_ROOT . 'files' . DS . $this->settings[$Model->alias]['saveDir'] . DS;
107         } else {
108             $this->savePath[$Model->alias] = WWW_ROOT . 'files' . DS;
109         }
110
111         if (!is_dir($this->savePath[$Model->alias])) {
112             $Folder = new Folder();
113             $Folder->create($this->savePath[$Model->alias]);
114             $Folder->chmod($this->savePath[$Model->alias], 0777, true);
115         }



「 $this->savePath[$Model->alias] 」という部分で警告がでています。
この場合、$Model->alias は、'Content' もしくは 'EditorTemplate' というstring型ですが、
$this->savePath は、初期値が長さゼロの文字列なので、このゼロの長さの文字列に対し、文字単位のアクセスを
数値ではない('Content' or 'EditorTemplate' という) インデックス(オフセット)でアクセスしようとして、
警告が出ています --> 文字列への文字単位のアクセスと修正

憶測になってしまいますが、$this->savePath プロパティ変数は、最初単一のパスを格納していたが、途中で 'Content' もしくは 'EditorTemplate' の複数のパスを保存するものに意味を変更した。しかし、初期値を文字列から配列に変更するのを失念していたため警告がでるようになってしまった、ということではないかと思います。

スレッドの最初に示したように、BcUploadBehavior.php に「public $savePath = array();」の修正を加えたら、ブラウザから最初にアクセスしたときのインストール時設定も正常に動作し、いまのところ問題なく動いているように見えます(まだ使い始めたばかりですが...)。

■ BaserCMSのバージョン: 4.0.2.1
■ PHPのバージョン: 7.1.1
■ 設置フォルダ: ドキュメントルート
■ PHPスキル(自己評価): C
■ OSの種類: FreeBSD 10.3

ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
17 人のユーザが現在オンラインです。 (17 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 17