Инсталлер -> Установлено. Ошибка 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


9 ответов

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

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

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

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

  • 1
    Михаил Ушенин Webasyst 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
    replicant 21 февраля 2022 16:19 # Решение

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

    • +1

      Не только, просто на 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.

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

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