Помилка «strict standards non-static method» в Textpattern
Так, що ж це така за помилка «non-static method» в Textpattern і як з нею справитись? Взагаліто в даному конкретному випадку з Textpattern 4.4.1 така помилка виникає із-за певних відмінностей (а їх таки вистачає, причому суттєвих) між PHP 5.3.x та PHP 5.4.x . Зокрема в PHP 5.4.4 E_ALL тепер включає помилки рівня E_STRICT в конфігураційній директиві error_reporting. А в текстпаттерні якраз і присутні кілька кодів, що генерують помилку рівня E_STRICT. Раніше ми її просто не помічали, а на версії PHP 5.4.4 вся адмінка текстпаттерна рясніє помилками «Strict Standards: Non-static method theme::init() ...» Виникає вона через те, що у файлах /textpattern/index.php та /textpattern/lib/txplib_misc.php деякі не статичні методи визиваються як статичні.. Зовні на роботу сайту це ніяк не впливає, усе ніби працює (якщо не працює — значить включений режим «тестування» або «відлагоджування»), от тільки в адмінці працювати неможливо.
Звісно розробники знайшли досить простий вихід з цієї ситуації, хоча сумніваюсь що він є досить хорошим (правильним). Проте яким би він не був — головне, що у Textpattern 4.4.1 це працює. А полягає він в простій фільтрації помилок E_STRICT в директиві error_reporting. Отож ближче до коду ;)
Перед редагуванням файлів — рекомендую зробити їх резервні копії. На всяк випадок :) Щоб позбутись помилок типу «strict standards non-static method» в Textpattern 4.4.1 необхідно виправити наступні два файли:
в файлі /textpattern/index.php шукаєм код:
error_reporting(E_ALL);
і заміняєм наступним кодом:
// We need to violate/disable E_STRICT for PHP 4.x compatibility
// E_STRICT bitmask calculation stems from the variations for E_ALL in PHP 4.x, 5.3, and 5.4
error_reporting(E_ALL & ~(defined('E_STRICT') ? E_STRICT : 0));
у файлі /textpattern/lib/txplib_misc.php шукаєм код:
error_reporting(E_ALL /* TODO: Enable E_STRICT in debug mode/PHP5.x? | (defined('E_STRICT') ? E_STRICT : 0) */);
і заміняєм на:
// We need to violate/disable E_STRICT for PHP 4.x compatibility
// E_STRICT bitmask calculation stems from the variations for E_ALL in PHP 4.x, 5.{0,1,2,3}, and 5.4+
// E_STRICT is defined since PHP 5.x and is set in E_ALL in PHP 5.4
error_reporting(E_ALL & ~(defined('E_STRICT') ? E_STRICT : 0));
шукаєм:
// default is 'testing': display everything except notices
error_reporting(E_ALL ^ (E_NOTICE));
заміняєм на:
// default is 'testing': display everything except notices and strict
error_reporting((E_ALL ^ E_NOTICE) & ~(defined('E_STRICT') ? E_STRICT : 0));
От і усе, зберігаємо зміни і юзаєм текстпаттерн на PHP5.4.4 Інформація щодо змін з сторінки релізів початкового коду r3679 Доречі, у бета версії Textpattern 4.5.0 цю проблему виправлено аналогічним методом.
- Попередня
- Наступна
Коментарі
Користувався версією Textpattern 4.4.1 після вимушеної зміни хостингу виникла аналогічна проблема…
Дякую за рекомендації, допомогло!
дякую! допомогло, не знав що PHP 5.4 в E_ALL включає помилки рівня E_STRICT
Коментарі