PHP5.6環境でのCakePHP1.3のSTRICTエラー対応
使っていたPCのHDDが逝ってしまわれたので、新PCにApache2.4、PHP5.6、MySQL5.1という内容で開発環境を作成しました。
これまでの環境では動いていたものが動かなくなるって事はやはり多いですね。
今回はCakePHP1.3で作成したサイトの「STRICTエラー」周りの修正の備忘録です。
STRICTエラー
エラー内容
1 |
Strict Standards: Redefining already defined constructor for class Object in I:\website_data\*****\cakephp\cake\libs\object.php on line 54 |
エラーメッセージを頼りに検索しますと、『Shin x blog』さんがヒット。
「求めていたのはまさしくこれだ!」という完璧な内容でした。
PHP5.4 ビルトインサーバで CakePHP を試食する(CakePHP Advent Calendar 2011 4日目) - Shin x blog
http://www.1x1.jp/blog/2011/12/cakephp_on_php54_builtin_web_server.html
http://www.1x1.jp/blog/2011/12/cakephp_on_php54_builtin_web_server.html
エラーが出る要因としては、PHP5.4以上では、エラー出力レベル E_ALL に E_STRICT が含まれたため、とのこと。
対策もしっかりと書かれておりました。そのまま転載させて頂きます。
下記6箇所を修正するだけで幸せになれます。
(1) app/webroot/index.php
1 2 3 4 5 6 7 8 9 |
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); } |
(2) cake/bootstrap.php
1 2 3 4 5 6 7 8 |
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(); |
(3) cake/console/cake.php
1 2 3 4 5 6 7 8 |
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); |
(4) cake/tests/cases/libs/cake_log.test.php
1 2 3 4 5 6 7 8 |
*/ 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')); |
(5)(6) cake/tests/cases/libs/configure.test.php
1 2 3 4 5 6 7 |
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); |
1 2 3 4 5 6 7 8 |
$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_sapi_name
php_sapi_name って関数を知らなかったので、リファレンスのページもメモっておきます。
PHP: php_sapi_name - Manual
http://php.net/manual/ja/function.php-sapi-name.php
http://php.net/manual/ja/function.php-sapi-name.php
PHP: ビルトインウェブサーバー - Manual
http://php.net/manual/ja/features.commandline.webserver.php
http://php.net/manual/ja/features.commandline.webserver.php
ちなみに、ローカルで var_dump した結果は「apache2handler」が返ってきました。