Инсталлер -> Установлено. Ошибка 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 ответов
С какой версией Shop-Script вы это проверяли?
Проверял с последней на тот момент версией 8.22.0.50.
На PHP 7.2.х ошибки нет, поэтому не напрягает особо сильно.
Лишь бы эта проблема дальше на 9-ку не переехала, но тут я проверить не могу, т.к. до 9-ки пока не обновлял даже тестовую установку.
Сообщать об ошибках в программных продуктах и на сайтах Webasyst лучше в специальном разделе форума.
На тестовой установке с PHP 8.0.12 в 9-ке та же самая ошибка и даже ещё веселее т.к. с какого-то перепуга оно на фронтенд лезет, но причины всё те же. :) На 7.2.х ожидаемо работает.
это строка "Plural-Forms: ..." в каком-то плагине/приложении старая, замените массово на во всех *.po файлах для русской локали на
Найдено 256 результатов. :) Пойду-ка чайку поставлю.
Еще один вариант избавится от проблемы, это обернуть eval в wa-system/helper/misc.php (примерно 115-120 строка
Просто иногда возникают проблемы найти все проблемы локали и тогда проще устранить Fatal, но видимо ценой множественных форм, хотя не уверен, что они используются.
Плагины-виновники найдены (несколько штук). Авторам отписал по контактным данным. Часть плагинов крашит фронтенд Магазина с ошибкой 500. Часть убивает и админку магазина тоже с ошибкой 500. Некоторая комбинация убивает только Инсталлер в разделе Установлено. Причем делают они это с инсталлером даже в отключенном состоянии. На всякий случай перекомпилировал ещё и *.mo файлы подозреваемых по измененным данным. Но всё это "веселье" вылезает только на PHP 8.
Не только, просто на PHP8 некоторые проверки стали строже из-за поддержки ковариативности. Суть в проблемы в том, что проверки вида "a ? b : c ? d : e" не верны и должны заменяться на "a ? b : (c ? d : e)", wa пытается использовать Plural-Forms в качестве кода для проверки формы слов в переводе.
Некорректные файлы скорее всего генерируются автоматически самим WA через консольную команду ">php wa.php locale"(класс webasystLocaleCli)там все окСуть понятна. Не было толком времени искать источник проблемы и ковыряться в коде т.к. не срочно это всё. С такой ошибкой ещё не сталкивался на WA, поэтому и закинул вопрос на форум в надежде на то, что вдруг кто-то да и встречал такое же. Попутно по ходу правок плагинов проштудировал ещё и кулинарную книгу на тему Локализация от WA.
Напишите какие плагины, чтобы другие не искали их. Мы обнаружили в плагине /shop/new и плагине /shop/plugmein и там поправили файлы локализации.
Кто-нибудь решил данную проблему перехода на php 7.4 - 8.0 ?
Решил. Решение выше опубликовано. В части плагинов авторы уже сделали замены сами после обращения. Об остальном неизвестно. Оптимально конечно же пока оставаться на 7.4 по целому ряду причин по крайней мере на рабочей установке с набором плагинов. Сама по себе смена php на 8 версию в рамках этой темы производилась для тестирования исключительно.
php 8.0 - не будет поддерживаться 70% плагинов, голый магазин запустить не проблема там.