Помилка 500 під час оновлення до PHP 8

 
Помилка 500 під час оновлення до PHP 8

У листопаді минулого року вийшов PHP 8. У ньому було оголошено про деякі покращення продуктивності, швидкості та безпеки.

Як і будь-який хороший майстер, я побіг оновлюватись з 7.4, а саме з 7.4.16, версії, яка зараз працює на сервері.

і тут мене зустрічає приємна помилка 500, яка ламає весь сайт. Жодна URL-адреса не вирішується.

Я провів типовий тест вимкнувши всі плагіни і використовуючи шаблон за замовчуванням. Помилка 500 не зникла.

Я був шокований, але змирився з цим, будучи переконаним, що ще занадто рано оновлюватися і, як мені порадили, найкраще почекати, поки всі автори плагінів і шаблонів оновлять свій код, щоб зробити його сумісним з PHP 8.

Майже через сім місяців я спробував ще раз, але помилка 500 все ще була там.

Першою ознакою того, що помилка виникає лише в цьому блозі, є те, що в інших двох інсталяціях WordPress, які я встановив на тому ж сервері, все працює коректно.

Оскільки помилка 500 може з'явитися з багатьох причин. Наступним логічним кроком буде витягнути журнали помилок, щоб спробувати з'ясувати, в чому справа. З'являється рядок попереджень на кшталт цього:

PHP Попередження: Використання невизначеної константи minor - припускається 'minor' (це призведе до помилки в майбутній версії PHP) в /home/xxxxxx/public_html/blog/wp-config.php на рядку 11

Попередження PHP: Використання невизначеної константи minor - передбачається 'minor' (це призведе до помилки в майбутній версії PHP).

Тобто, константа повинна бути взята в лапки. Я заходжу в wp-config.php і, звичайно ж, в цьому рядку з'являється minor без лапок.

define ('WP_AUTO_UPDATE_CORE', minor);

Пошукавши на форумі WordPress, я виявив, що багато людей стикалися з такою ж проблемою при оновленні до старіших версій PHP через конфлікти з плагінами або шаблонами.

Також не можна виключати, що проблема пов'язана з установкою WordPress, в якій щось зламалося, як мені повідомили в тікеті, який я відправив на LucusHost.

У деяких відповідях, які вони отримують, вони кажуть, що для вирішення проблеми просто додайте лапки до "minor", тож спробуйте, і це те, що я зробив

define ('WP_AUTO_UPDATE_CORE', 'minor');

WP_AUTO_UPDATE_CORE дозволяє контролювати оновлення ядра WordPress для мінорних, основних і девелоперських версій. Ця константа може бути визначена кількома способами. Видалення цього рядка не є гарною ідеєю.

#Вимикає всі оновлення ядра:

define( 'WP_AUTO_UPDATE_CORE', false );

# Увімкнути всі оновлення, включаючи малі та великі оновлення:

define( 'WP_AUTO_UPDATE_CORE', true );

# Вмикає мінорні оновлення:

define( 'WP_AUTO_UPDATE_CORE', 'minor' );

Є хороші і погані новини.

Хороша новина полягає в тому, що тепер, під час запуску PHP 8, помилка 500 зникла.

На перший погляд, все працює нормально, як плагіни, так і пости.

Погана новина полягає в тому, що індекс зламався і виглядає ось так.

Помилка 500 під час оновлення до PHP 8 1

Я вирішив атакувати спочатку шаблон шаблон постушаблон, зроблений за допомогою Elementor Proна випадок, якщо конструктор залишив якесь приховане сміття, але переглянувши його і переробивши повністю, я виключив, що помилка походить звідти.

Зараз я все ще видаляю шаблон (GeneratePress Premium) в тестовому середовищі і принаймні знаю, де він ламається, але в основному я дивлюся на WordPress, де, на мою думку, криється суть проблеми, якийсь застарілий код, якийсь фільтр, забитий жиром або ще щось.

Я залишаю цю замітку тут на випадок, якщо у когось була подібна проблема, і вона може бути корисною, або те, що я написав тут, або хтось знає багато про WP і може дати мені ще кілька підказок, як її вирішити.

Як тільки я знайду остаточне виправлення і можливе пояснення, я оновлю цей пост.

Оновлення

Журнал помилок, після активації DEBUG, дає підказки, що GeneratePress десь падає, можливо, через якийсь хук або фільтр, який я поставив в його модулі Elements (або щось подібне).

Оскільки у мене є дочірній шаблон GeneratePress, я розгубився і не знаю, куди рухатися далі, але оскільки у мене є пара підозр, я ще не вважаю місію проваленою.

Фатальна помилка: Uncaught TypeError: Непідтримувані типи операндів: string + int в /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169 Трасування стеку: #0

/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(419): generate_do_post_meta_item() #1

/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(538): generate_posted_on() #2

/home/ public_html/blog/wp-includes/class-wp-hook.php(292): generate_post_meta() #3

/home/ public_html/blog/wp-includes/class-wp-hook.php(316): WP_Hook->apply_filters() #4

/blog/wp-includes/plugin.php(484): WP_Hook->do_action() #5

/blog/wp-content/themes/generatepress/content.php(48): do_action() #6

/blog/wp-includes/template.php(732): require('/home/ ...') #7

/blog/wp-includes/template.php(676): load_template() #8

/blog/wp-includes/general-template.php(204): locate_template() #9

/blog/wp-content/themes/generatepress/inc/theme-functions.php(587): get_template_part() #10

/blog/wp-content/themes/generatepress/index.php(37): generate_do_template_part() #11

/blog/wp-includes/template-loader.php(106): include('/home/ ...') #12

/blog/wp-blog-header.php(19): require_once('/home/ ...') #13

/blog/index.php(17): require('/home/ ...') #14

у файлі /blog/wp-content/themes/generatepress/inc/structure/post-meta.php на 169-му рядку виникла помилка {main}

виправлено! Ну, майже

На щастя, перший рядок був ключовим, саме він викликав усі помилки з цього довгого списку:

Фатальна помилка: Uncaught TypeError: Непідтримувані типи операндів: string + int в /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169

Помилка 500 під час оновлення до PHP 8 2

Загадка помилки полягала в якійсь непідтримуваній операції клятого get_the_time .

Зв'язавши все докупи, підозри підтвердилися. Помилка була викликана цим фрагментом функції, який я використовував для відображення дня і часу оновлення як розширення мета в даті.

Що ще гірше, я не знаю як, але він залишився резидентним після відключення Фрагменти коду і очищення кешу.

Помилка 500 під час оновлення до PHP 8 3

Мораль цієї історії: не використовуйте функції, які добре працюють для інших, тому що кожна сторінка має свою особливу історію, і дуже ймовірно, що вони в кінцевому підсумку щось зіпсують, якщо ви забудете їх, оновите WP, PHP, шаблон або плагін, і вони більше не будуть сумісні.

Видаливши цей фрагмент, все працює нормально, і домашня сторінка повернулася до нормального вигляду.

Немає двох без трьох, ще одна помилка. Тепер Feedzy

Але не розходьтеся, тому що тепер плагін Плагін Feedzy (напевно) або щось з ним пов'язане обриває сторінку новин.

Помилка 500 під час оновлення до PHP 8 4

Настав час відкрити тікет підтримки, оскільки це платна версія, щоб повідомити розробникам плагіна, чи сумісний він на 100% з PHP 8 (і якщо він ламається через те, що це не так), або отримати від них підказку.

02/07/2021 - Feedly відтворив фатальну помилку, використовуючи PHP 8, і передав проблему своїм розробникам, тепер нам залишається чекати, коли вони випустять нову версію плагіна, яка виправляє проблему.

05/07/2021 - Опис помилки тепер доступний на їхньому Github.

06/07/2021 - Хоча вони ще не відповіли і не випустили нову версію з виправленням, в цьому коміті вже є рядки коду, які виправляють цю помилку. Я протестував його і, за відсутності хорошого і ретельного тестування, здається, що PHP 8 більше нічого не ламає.

Підводячи підсумки

Непогано. Від помилки 500, яка зламала весь блог, до помилки лише на головній сторінці і, нарешті, на одній"другорядній" сторінці, щоб в кінцевому підсумку знайти виправлення - цього достатньо, щоб бути задоволеним годинами, витраченими на ремонт.

Ключ до всього - в дослідженні, витратьте весь свій час на пошук джерела проблеми і її причин в інших частинах вашого блогу. Не намагайтеся швидко вирішити проблему без достатньої кількості підказок, тому що ви або витратите свій час, або, в гіршому випадку, зламаєте щось ще.

Я оновлю статтю, коли мені вдасться виправити новий баг за допомогою Feedzy чи як там його цього разу.


Suscríbete por email para recibir las viñetas y los artículos completos y sin publicidad

Схожі статті