Сегодня я обновил свой веб-сервер с Debian Buster до Bullseye, и на самом деле это было довольно простое обновление. Казалось, все работает, пока я не попытался зайти на несколько сайтов WordPress на сервере. Сначала я получил ошибку об отсутствующем модуле MySQL. Сообщение об ошибке, которое я получил от PHPMyAdmin, дало мне лучшую подсказку: в нем говорилось, что отсутствует модуль mysqli.
Поэтому я установил его с помощью apt установить php7.4-mysqli
и это фактически заставило мои сайты WordPress снова работать.
Однако теперь единственная проблема заключается в том, что я не могу обновить Wordpress. Каждый раз, когда я пытаюсь обновить WordPress, я получаю сообщение об ошибке:
Я подозреваю, что мне нужно установить suphp. Но прежде чем я это сделаю, может ли кто-нибудь подтвердить, что это действительно так? Или мне нужно сделать что-то еще после перехода с Buster на Bullseye?
РЕДАКТИРОВАТЬ:
Мне потребовалось довольно много времени, чтобы понять, что на самом деле происходит. Теперь я знаю, я понятия не имею, как решить проблему.
Сообщение об ошибке, которое выдает WP, на самом деле неверно. Как оказалось, это является смог нормально распаковать обновление в нужную папку. Но когда он проверяет, действительно ли файлы были распакованы, что-то идет не так. Проблема заключается в этом фрагменте кода в обновление-core.php:
foreach ($roots как $root) {
если ($wp_filesystem->exists($from. $root. 'readme.html')
&& $wp_filesystem->exists($from . $root . 'wp-includes/version.php')
) {
$ дистрибутив = $ корень;
сломать;
}
}
если ( ! $ дистрибутив ) {
$wp_filesystem->удалить($from, true);
return new WP_Error('insane_distro', __('Не удалось распаковать обновление'));
}
Здесь он просто проверяет наличие двух файлов в папке, в которую он только что распаковал zip-файл. Это не удается. А причина в следующем:
Я использую метод FTP для установки обновлений. Поэтому, когда я говорю ему обновить, он сначала определяет папку, в которую он должен загрузить zip-файл. Эта папка хранится в $working_dir и с этого момента используется для остальной части процесса обновления.Истинный путь на сервере /domains/domainname.com/htdocs/wp-content/upgrade/
но так как пользователи FTP имеют chroot, WP находит и сохраняет /htdocs/wp-контент/обновление/
вместо. Файл обновления загружается в эту папку, а затем распаковывается.
Затем он выполняет вышеуказанную проверку. И это не удается, потому что он пытается найти файл в /htdocs/wp-контент/обновление/
в то время как истинное местоположение /domains/domainname.com/htdocs/wp-content/upgrade/
.
Я понимаю, почему он отлично загружает пакет (поскольку пользователи FTP имеют chroot). Но я не понимаю, почему он не распаковывается после этого, но не работает при проверке существования файлов...
Я проверил все настройки php и не могу найти ничего, что отличалось бы от настроек до обновления Debian…