PHP Strict Standards: Non-static method と出る場合の対処法
CakePHP1.2やCakePHP1.3を、PHP5.4以上に移行すると次のようなエラーが出る場合があります。
PHP Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /…/cake/libs/debugger.php on line 683 PHP Strict Standards: Non-static method Configure::read() should not be called statically, assuming $this from incompatible context in /…/cake/libs/debugger.php on line 308 PHP Strict Standards: Non-static method Configure::getInstance() should not be called statically, assuming $this from incompatible context in /…/cake/libs/configure.php on line 163 PHP Strict Standards: Non-static method CakeLog::write() should not be called statically, assuming $this from incompatible context in /…/cake/libs/debugger.php on line 311 PHP Strict Standards: Non-static method CakeLog::getInstance() should not be called statically, assuming $this from incompatible context in /…/cake/libs/cake_log.php on line 230
PHP5.4 からエラー出力レベル E_ALL に E_STRICT が含まれるようになったことが原因です。
このため E_STRICT がエラーとして表示されます。
CakePHP では error_reporting() でエラー出力レベルを上書きしてしまいます。
このためphp.iniなどでの設定では対応できません。
最新のバージョンに更新するとエラーは解消されます。
1.3系の最新版のダウンロード先
https://github.com/cakephp/cakephp/archive/1.3.21.zip
https://github.com/cakephp/cakephp/releases/tag/1.3.21
最新のバージョンが手に入らない場合や、バージョンの変更が困難な場合はerror_reportingの該当箇所を変更します。
改修箇所は、『 E_ALL 』や『 ~E_DEPRECATED 』で全検索して変更を行います。
cake/bootstrap.php
error_reporting(E_ALL & ~E_DEPRECATED); ↓ error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
cake/console/cake.php
ini_set('error_reporting', E_ALL & ~E_DEPRECATED); ↓ ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT);
cake/tests/cases/libs/cake_log.test.php
Configure::write('log', E_ALL & ~E_DEPRECATED); ↓ Configure::write('log', E_ALL & ~E_DEPRECATED & ~E_STRICT);
cake/tests/cases/libs/configure.test.php
$this->assertEqual($result, E_ALL & ~E_DEPRECATED); ↓ $this->assertEqual($result, E_ALL & ~E_DEPRECATED & ~E_STRICT); $this->assertEqual(ini_get('error_reporting'), E_ALL & ~E_DEPRECATED); ↓ $this->assertEqual(ini_get('error_reporting'), E_ALL & ~E_DEPRECATED & ~E_STRICT);
CakePHP1系は、現在は更新がされていないので、いくつかの未改修の脆弱性が存在します。
CakePHP2系に更新するほうが安全です。
関連記事
- 標準のValidatorを拡張してカスタマイズする方法
- テンプレート(template)側でログイン情報を取得する方法
- フォームの必須エラーメッセージをHTML5標準にする方法、カスタマイズする方法
- 標準のHelperを拡張してカスタマイズする方法 CakePHP2
- 国際化i18n(多言語化)
- URLをハイフン区切りからアンダーバー区切りやキャメルケースにする方法
- CakePHP5系の入手方法・インストール方法
- CakePHP4系の入手方法・インストール方法
- CakePHP3系の入手方法・インストール方法
- CakePHP2系の入手方法・インストール方法
- CakePHP1系(CakePHP1.3)をPHP7・PHP8以降に対応させる方法
- CakePHP1系(CakePHP1.3)の入手方法・インストール方法
- Composerコマンドでウクライナへのメッセージが表示されたことがあります
- Composerをインストールする方法と使い方
- コーディング規約のチェックを行う・整形する標準ツール(PHP CodeSniffer)の使い方
- Seedの実行順(外部キー制約などを先に実行させる方法) Foreign key violation
- PostgreSQLでERROR: duplicate key value violates unique constraint "hoge_pkey" DETAIL: Key (id)=(10) already exists.と出る場合
- PostgreSQLで自動採番をするシーケンス(sequence)とは【AUTO INCREMENT】
- Apacheで所有権や書き込み権限があるにも関わらずPermissions deniedが出る場合
- CakePHPのバージョンごとのシステム要件
- 1つのフィールドにバリデーションエラーを1つだけ表示させる方法
- CakePHPでカラムを比較してSELECTする方法
- [CakePHPのバグ]キャッシュ処理でunlinkエラーが発生する
- 『id』以外のプライマリキーのカラム名を使用する方法
- [CakePHPのバグ]キャッシュ処理でunserializeエラーが発生する
- プライマリキーIDを連番数字ではなく推測しにくい文字列にする方法
- 複数のデータベースを切り替える方法(別データベースを使用する)
- MySQLで文字化けを防ぐ方法
- action名にlistは使えない listを使う方法
- ログイン認証処理をする方法
- CakePHP、Symfony、Zend Frameworkの比較
- CakePHPのDB接続情報設定
- ファイル読み込みPATHを設定
- デバッグレベルを設定
- セキュリティレベルの設定
- キャッシュを有効にする
- CakePHPのエラーテンプレートの一覧
- データベーステーブルを参照しないページを作る
- TOPページはIndexControllerではない Cannot redeclare config()
- ディレクトリ構成
- CakePHP
スポンサーリンク