CakePHP

PHP5.6環境でのCakePHP1.3のSTRICTエラー対応

使っていたPCのHDDが逝ってしまわれたので、新PCにApache2.4、PHP5.6、MySQL5.1という内容で開発環境を作成しました。

これまでの環境では動いていたものが動かなくなるって事はやはり多いですね。
今回はCakePHP1.3で作成したサイトの「STRICTエラー」周りの修正の備忘録です。

STRICTエラー

エラー内容

[default]
Strict Standards: Redefining already defined constructor for class Object in I:\website_data\*****\cakephp\cake\libs\object.php on line 54
[/default]

エラーメッセージを頼りに検索しますと、『Shin x blog』さんがヒット。
「求めていたのはまさしくこれだ!」という完璧な内容でした。

エラーが出る要因としては、PHP5.4以上では、エラー出力レベル E_ALL に E_STRICT が含まれたため、とのこと。
対策もしっかりと書かれておりました。そのまま転載させて頂きます。

下記6箇所を修正するだけで幸せになれます。

(1) app/webroot/index.php

[php]
define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
}
}
+ if (php_sapi_name() == 'cli-server') {
+ $_SERVER['PHP_SELF'] = '/'.basename(__FILE__);
+ }
if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {
trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR);
}
[/php]

(2) cake/bootstrap.php

[php]
if (!defined('E_DEPRECATED')) {
define('E_DEPRECATED', 8192);
}
-error_reporting(E_ALL & ~E_DEPRECATED);
+error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);

require CORE_PATH . 'cake' . DS . 'basics.php';
$TIME_START = getMicrotime();
[/php]

(3) cake/console/cake.php

[php]
function __initConstants() {
if (function_exists('ini_set')) {
ini_set('display_errors', '1');
- ini_set('error_reporting', E_ALL & ~E_DEPRECATED);
+ ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT);
ini_set('html_errors', false);
ini_set('implicit_flush', true);
ini_set('max_execution_time', 0);
[/php]

(4) cake/tests/cases/libs/cake_log.test.php

[php]
*/
function testLoggingWithErrorHandling() {
@unlink(LOGS . 'debug.log');
- Configure::write('log', E_ALL & ~E_DEPRECATED);
+ Configure::write('log', E_ALL & ~E_DEPRECATED & ~E_STRICT);
Configure::write('debug', 0);

set_error_handler(array('CakeLog', 'handleError'));
[/php]

(5)(6) cake/tests/cases/libs/configure.test.php

[php]
Configure::write('debug', 2);
$result = ini_get('error_reporting');
- $this->assertEqual($result, E_ALL & ~E_DEPRECATED);
+ $this->assertEqual($result, E_ALL & ~E_DEPRECATED & ~E_STRICT);

$result = ini_get('display_errors');
$this->assertEqual($result, 1);
[/php]

[php]
$this->assertEqual(ini_get('display_errors'), 0);

Configure::write('debug', 2);
- $this->assertEqual(ini_get('error_reporting'), E_ALL & ~E_DEPRECATED);
+ $this->assertEqual(ini_get('error_reporting'), E_ALL & ~E_DEPRECATED & ~E_STRICT);
$this->assertEqual(ini_get('display_errors'), 1);

Configure::write('debug', 0);
[/php]

php_sapi_name

php_sapi_name って関数を知らなかったので、リファレンスのページもメモっておきます。

ちなみに、ローカルで var_dump した結果は「apache2handler」が返ってきました。

-CakePHP
-, , ,