Как устранить ошибки php5 Strict?
После обновления моего PHP до 5.4.3 (WAMP server 2.2) мое веб-приложение, сделанное в CakePHP 1.3, показывает следующие ошибки в моем индексе:
Строгие стандарты: переопределение уже определенного конструктора для класса Объект в C:...\cake\cake\libs\object.php в строке 63
Строгие стандарты: нестатический метод Configure:: getInstance() должен не называться статически в C:...\cake\cake\bootstrap.php в строке 49
Я обнаружил, что некоторые люди решают эту проблему, установив error_reporting
в php.ini на E_ALL & ~E_STRICT
.
Я сделал это в обоих файлах php.ini(C:\wamp\bin\php\php5.4.3 и C:\wamp\bin\apache\apache2.4.2\bin) на моем компьютере, но не сделал решить проблему.
Я также попытался поместить php_value error_reporting 6143
в C:...\cake.htaccess, но безуспешно.
Кто-нибудь знает, как я могу это решить? Я не могу обновить CakePHP из-за firebird.
Ответы
Ответ 1
Одно из изменений в php 5.4 заключается в том, что E_STRICT теперь является частью E_ALL
Итак, в вашем /cake/bootstrap.php вы можете удалить E_STRICT из сообщения об ошибках:
error_reporting(E_ALL ^ E_STRICT);
и снова совместиться с версиями до версии 5.4.
Ответ 2
Вместо того, чтобы модифицировать файлы ядра торта, которые отстойны, если вы хотите обновить версию вашего торта, зайдите в файл Config/core.php и найдите конфигурацию обработчика ошибок:
Configure::write('Error', array(
'handler' => 'ErrorHandler::handleError',
'level' => E_ALL & ~E_DEPRECATED,
'trace' => true
));
и замените 'level' на это:
...
'level' => E_ALL & ~E_STRICT & ~E_DEPRECATED,
...
Ответ 3
Пожалуйста, замените
error_reporting = E_ALL
в php.ini, с
error_reporting = E_ALL & ~E_STRICT
Для меня
error_reporting(E_ALL ^ E_STRICT);
который показан в принятом ответе на этот вопрос, не работал и дал Бесконечный цикл, обнаруженный в JError, для моего сайта Joomla.
Ответ 4
Вы используете новую версию php. в php 5.4, E_STRICT является частью E_ALL
в торте 1.3, откройте файл /cake/bootstrap.php и измените error_reporting следующим образом
error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);
Ответ 5
Если вы боретесь с строгими предупреждениями PHP в выпуске консоли cake, посмотрите на app/config/core.php
.
В CakePhp 1.3 error_reporting(...)
перезаписывается опцией 'log'
, поэтому вы можете исключить E_STRICT
здесь:
/**
* CakePHP Log Level:
*
* In case of Production Mode CakePHP gives you the possibility to continue logging errors.
*
* The following parameters can be used:
* Boolean: Set true/false to activate/deactivate logging
* Configure::write('log', true);
*
* Integer: Use built-in PHP constants to set the error level (see error_reporting)
* Configure::write('log', E_ERROR | E_WARNING);
* Configure::write('log', E_ALL ^ E_NOTICE);
*/
Configure::write('log', E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
Ответ 6
Убедитесь, что вы обновили правильный файл php.ini - если вы создаете файл php в корневом каталоге со следующим кодом
<?php
phpinfo();
?>
и загрузите его в своем веб-браузере, он скажет вам, какой файл INI используется, если вы его пропустили.
Также возможно, что файл htaccess устанавливает это значение через значение php_flag error_reporting
, которое также может быть установлено для каталога.
Ответ 7
Файл bootstrap.php из корневой папки (корневой)
if (!defined('E_ALL')) {
define('E_ALL', 8192);
}
Файл debugger.php из папки (root) cake\libs
error_reporting(E_ALL ^ ~E_STRICT ^ ~E_DEPRECATED);