Сегодня обновил один из сайтов modx до 2.8.6 столкнулся с проблемой: все изображения (превью) в админке (во вкладке файлы и в файловом менеджере стали битыми):
при этом во Frontend все отлично.
В общем это обновление пососало немного крови:
Первым делом посмотрел логи — там пусто, посмотрел консоль браузера — тоже ничего интересного. Потом проверил права на файлы (644) и папки (755) — норм, полностью очистил кэш как в админке (Управление — Очистить кэш + Перезагрузить права доступа + удаление всего из core/cache/) так и в браузере — не помогло.
У сайта закаленный движок (системные каталоги переименованы и т.д., кому интересно зачем и почему смотрите: MODX безопасность) — думаю может в этом дело, т.к. в тройке это уже нельзя переименовывать. В общем решил для пробы обновить еще 1 сайт (тоже с закалкой и на этом же хостинге), обновил и там все чудесно.
Ладно думаю может обновления криво встало, залил еще раз MODX Advansed и перезапустил обновление (быстрое) — проблему не решило. Что за х.. не пойму.
Скачал обычный традиционный modx (переименовал у него все каталоги системные, в такие же имена как на сайте) и залил все поверх моих фалов. Запустил установщик и в этот раз уже выбрал расширенное обновление (где нужно указывать доступ к базе), сайт обновился — но проблема не решилась.
Полез искать ответы в интернете, нашёл следующие пути решения.
Варианты решения проблемы из интернета
1. Выключить на хостинге режим Safe Mode (в php) — сразу отбросил т.к. на всех сайтах которые там норм, проблема только на 1м).
2. Настройка источников файлов (Медиа -> Источники файлов): у дефолтного «Filesystem» значение параметра «basePath» должно быть пустым. У не дефолтных можно в конце поставить слэш (если его нет), например: было assets/img, стало assets/img/
3. Для тех у кого после переноса такая проблема: проверяем правильность всех путей в core/config/config.inc.php, особенно этих:
$modx_core_path=
$modx_processors_path=
$modx_connectors_path=
$modx_manager_path=
$modx_base_path=
$modx_assets_path=
От себя еще добавлю что б базе тоже нужно менять пути (об этом мало где говорят).
В общем все оказалось намного проще, в движке обновили phpThumb до 1.7.21
А он как-то плохо стал дружить с PHP < 8. Отсюда вытекает банальное решение проблемы: зайдите на хостинг и смените версию PHP до 8.0 и проблема решена*.
Пробовал PHP 8.1 — не все превью работают, в 8.2. — почти все.
*Вместе с решением это проблемы вы скорее всего получите новые проблемы (если у вас не сайт визитка), в консоль начнут сыпаться ошибки: PHP warning …. с ними уже сложнее.
В общем решил пока откатиться назад (благо хостинг делает авто бэкапы) до 2.8.5 и вернуть php 7.4 — это так сказать альтернативное решение проблемы.
Вот еще пару альтернатив, чтобы не откатывать сайт назад и не переходить на php8:
файле core/model/phpthumb/phpthumb.class.php на 317 строке убираем слово mixed.
Т.е. заменяем:
public function __set(string $name, mixed $value): void {
на
public function __set(string $name, $value): void {
()
Спасибо огромное Алексей за труд. Все заработало, но не повлияет ли удаление mixed на работу чего то другого?
Пожалуйста. После удаления mixed проблем не замечено