Инсталлер -> Установлено. Ошибка 500. PHP 8.0.12 (без Магазина ошибки нет) Есть решение

На установках (проверял на 3-х) с Магазином Инсталлер дает ошибку 500 на стенде с php 8.0.12. На установках без Магазина ошибки нет. Наборы плагинов и приложений везде разные, но из глобальных отличий только наличие/отсутствие Магазина.

Ошибка такая

[14-Feb-2022 18:11:08 Europe/Moscow] PHP Fatal error:  Unparenthesized `a ? b : c ? d : e` is not supported. Use either `(a ? b : c) ? d : e` or `a ? b : (c ? d : e)` in /...путь.../wa-system/helper/misc.php(116) : eval()'d code on line 1


14 ответов

  • 1
    Михаил Ушенин 21 февраля 2022 09:52 #

    С какой версией Shop-Script вы это проверяли?

    • +1
      replicant replicant 21 февраля 2022 11:17 #

      Проверял с последней на тот момент версией 8.22.0.50.
      На PHP 7.2.х ошибки нет, поэтому не напрягает особо сильно.
      Лишь бы эта проблема дальше на 9-ку не переехала, но тут я проверить не могу, т.к. до 9-ки пока не обновлял даже тестовую установку.

  • 1
    Михаил Ушенин 21 февраля 2022 09:52 #

    Сообщать об ошибках в программных продуктах и на сайтах Webasyst лучше в специальном разделе форума.

  • 1
    replicant 21 февраля 2022 12:31 #

    На тестовой установке с PHP 8.0.12 в 9-ке та же самая ошибка и даже ещё веселее т.к. с какого-то перепуга оно на фронтенд лезет, но причины всё те же. :) На 7.2.х ожидаемо работает.

  • 2
    Anton F Разработчик 21 февраля 2022 12:57 # Решение

    это строка "Plural-Forms: ..." в каком-то плагине/приложении старая, замените массово на во всех *.po файлах для русской локали на

    "Plural-Forms: nplurals=3; plural=((((n%10)==1)&&((n%100)!=11))?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));\n"

    • +1
      replicant replicant 21 февраля 2022 13:05 #

      Найдено 256 результатов. :) Пойду-ка чайку поставлю.

    • +1

      Еще один вариант избавится от проблемы, это обернуть eval в wa-system/helper/misc.php (примерно 115-120 строка

      try { $result = eval($f); } catch (Throwable $t) {}

      Просто иногда возникают проблемы найти все проблемы локали и тогда проще устранить Fatal, но видимо ценой множественных форм, хотя не уверен, что они используются.

  • 2
    replicant 21 февраля 2022 16:19 # Решение

    Плагины-виновники найдены (несколько штук). Авторам отписал по контактным данным. Часть плагинов крашит фронтенд Магазина с ошибкой 500. Часть убивает и админку магазина тоже с ошибкой 500. Некоторая комбинация убивает только Инсталлер в разделе Установлено. Причем делают они это с инсталлером даже в отключенном состоянии. На всякий случай перекомпилировал ещё и *.mo файлы подозреваемых по измененным данным. Но всё это "веселье" вылезает только на PHP 8.

    • +1
      Anton F Anton F Разработчик 21 февраля 2022 17:27 #

      Не только, просто на PHP8 некоторые проверки стали строже из-за поддержки ковариативности. Суть в проблемы в том, что проверки вида "a ? b : c ? d : e" не верны и должны заменяться на "a ? b : (c ? d : e)", wa пытается использовать Plural-Forms в качестве кода для проверки формы слов в переводе.

      Некорректные файлы скорее всего генерируются автоматически самим WA через консольную команду ">php wa.php locale"(класс webasystLocaleCli)  там все ок


      • +1
        replicant replicant 21 февраля 2022 17:37 #

        Суть понятна. Не было толком времени искать источник проблемы и ковыряться в коде т.к. не срочно это всё. С такой ошибкой ещё не сталкивался на WA, поэтому и закинул вопрос на форум в надежде на то, что вдруг кто-то да и встречал такое же. Попутно по ходу правок плагинов проштудировал ещё и кулинарную книгу на тему Локализация от WA.

    • +2
      Модная Ты Модная Ты 7 февраля 2023 00:51 #

      Напишите какие плагины, чтобы другие не искали их. Мы обнаружили в плагине /shop/new и плагине /shop/plugmein и там поправили файлы локализации.

  • 1
    erin_ganu 18 октября 2022 17:43 #

    Кто-нибудь решил данную проблему перехода на php 7.4 - 8.0 ?

    • +1
      replicant replicant 18 октября 2022 18:56 #

      Решил. Решение выше опубликовано. В части плагинов авторы уже сделали замены сами после обращения. Об остальном неизвестно. Оптимально конечно же пока оставаться на 7.4 по целому ряду причин по крайней мере на рабочей установке с набором плагинов. Сама по себе смена php на 8 версию в рамках этой темы производилась для тестирования исключительно.

    • +1
      Welldi.ru Welldi.ru Эксперт Разработчик 19 октября 2022 18:51 #

      php 8.0 - не будет поддерживаться 70% плагинов, голый магазин запустить не проблема там.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите