Модул 5 · 5.4
По-малко е повече: почистване и решаване на конфликти
Модул 5: Теми и разширения · Време за четене: 9 минути
Учебна цел: След този урок ще можете да почиствате разширенията си и сами да откривате и решавате конфликт или бяла страница.
Ключови понятия: изключване срещу изтриване, неактивен код, критична грешка, режим на възстановяване (recovery mode), Състояние на сайта, режим за отстраняване на проблеми, преименуване на папката на разширение, WP_DEBUG, WP_DEBUG_LOG, debug.log, лог на грешките
Изключването не е изхвърляне
В Разширения можете да изключите или да изтриете едно разширение. Разликата е следната:
- Изключване: WordPress вече не зарежда разширението. Файловете обаче остават в
wp-content/plugins/и често все още могат да бъдат заредени директно през уеб сървъра. Ако в отделен PHP файл на това разширение има пробив, този пробив продължава да съществува. Нападателите сканират за известни уязвими файлове, а не за активни разширения. - Изтриване: файловете се премахват. Някои разширения при изтриване почистват и своите настройки и таблици в базата данни, а други ги оставят.
Ако вече не използвате дадено разширение, изтрийте го. Изключването е само за кратко (докато търсите причината за проблем). Същото важи и за темите (урок 2.4).
Почистване: редовна обиколка
Веднъж на тримесечие (урок 9.4) прегледайте разширенията си. За всяко разширение:
- За какво служи? Ако вече не помните, проверете. Често се оказва, че разширението е инсталирано някога за едно нещо и никога не е премахнато.
- Използва ли се още? Разширение за слайдър, а никъде няма слайдър; разширение за формуляри, а страницата Ви за контакти използва друг формуляр.
- Може ли без него? Може ли WordPress, темата или друго разширение вече да го прави (урок 5.3)?
- Поддържа ли се още? Кога е обновено за последно, все още ли е в директорията с разширения?
Почиствайте първо в тестова среда (staging) (урок 8.3) или поне направете резервно копие и изтривайте по едно разширение наведнъж, за да знаете какво се е объркало, ако нещо се обърка. Внимавайте с шорткодовете: ако изтриете разширение, което е осигурявало [formulyar id="2"], след това този текст ще се показва буквално на страницата Ви.
Когато нещо се обърка: критичната грешка
След обновяване, ново разширение или PHP ъпгрейд изведнъж виждате:
Възникна критична грешка на този уебсайт.или напълно бяла страница. Това означава, че PHP е спрял с фатална грешка, преди да има страница (урок 1.2). Обикновено причината е разширение или тема, които не работят заедно с нещо друго: друго разширение, новата версия на WordPress или версията на PHP.
От WordPress 5.2 насам WordPress прави тогава две неща:
- изпраща имейл до администраторския адрес с информация кое разширение или коя тема е причинила грешката, както и специален линк;
- с този линк влизате в режим на възстановяване (recovery mode): администрацията тогава работи, като разширението, причинило грешката, е временно изключено, така че можете да го обновите, замените или изтриете.
Затова е толкова важно да имате администраторски адрес, който четете (урок 2.2).
Търсене на собствена ръка: стъпките
Не идва имейл или режимът на възстановяване не работи? Ето как сами да намерите причината.
1. Погледнете в лога на грешките
Грешката почти винаги е записана в лога на грешките на уеб сървъра или на PHP. В DirectAdmin го намирате при логовете на Вашия домейн. Търсите ред с PHP Fatal error и часа на Вашия опит:
PHP Fatal error: Uncaught Error: Call to undefined function create_function()
in /home/potrebitel/domains/example.com/public_html/wp-content/plugins/star-slaider/slider.php:42Пътят Ви показва кой е виновникът: тук това е разширението в папката star-slaider. Останалата част от реда казва защо (тук: функция, която е премахната в PHP 8, урок 8.4).
2. Включете debug лога (не показването на екрана)
Ако в лога на грешките няма нищо полезно, добавете в wp-config.php (над реда „stop editing“):
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );Тогава WordPress записва всички грешки в wp-content/debug.log, без да ги показва на посетителите. Никога не оставяйте това включено по-дълго от необходимото: debug.log се намира в папка, която уеб сървърът обслужва, и всеки, който знае адреса, може да го прочете. В него има пътища, понякога потребителски имена и друга информация, която помага на нападател. След търсенето го изключете отново и изтрийте debug.log. Или накарайте WordPress да записва лог файла извън уеб папката, като зададете път в WP_DEBUG_LOG (например '/home/potrebitel/logs/wp-debug.log', ако Вашият хостинг доставчик позволява това). В урок 7.4 проверявате дали debug.log не е публично достъпен.
3. Изключване на разширение без администрацията
Ако не можете да влезете в администрацията, изключете подозрителното разширение, като преименувате неговата папка чрез File Manager или SFTP:
wp-content/plugins/star-slaider става wp-content/plugins/star-slaider-izklТогава WordPress вече не намира разширението и го изключва. Ако не знаете кое е, преименувайте цялата папка plugins на plugins-izkl: всички разширения се изключват. Ако сайтът тогава работи, създайте нова празна папка plugins, връщайте разширенията едно по едно и след всяко проверявайте дали грешката се появява отново. За тема важи същото: преименувайте папката на активната тема и WordPress преминава към стандартна тема, ако такава все още е инсталирана (урок 2.4).
4. Конфликти без фатална грешка
Не всеки проблем е критична грешка. Понякога не работи само една функция: бутон не прави нищо, формулярът не се изпраща, редакторът се зарежда наполовина. Тогава често става дума за конфликт между две разширения или между разширение и темата. За това е полезно официалното разширение Health Check & Troubleshooting: в режима за отстраняване на проблеми то изключва всички разширения само за Вашата сесия и превключва към стандартна тема, докато посетителите продължават да виждат нормалния сайт. След това ги включвате едно по едно, докато проблемът се появи отново.
Погледнете и в конзолата на браузъра си (F12): JavaScript грешките често посочват файла, а оттам и разширението.
Състояние на сайта
В Инструменти > Състояние на сайта WordPress сам проверява Вашия сайт: остаряла версия на PHP, разширения и теми, които не са активни, липсващи PHP разширения, REST API, който не работи, планирани задачи, които изостават. В раздела Информация са всички данни за Вашата инсталация (версии, пътища, PHP настройки). Можете да копирате този раздел и да го изпратите, когато търсите помощ. Поглеждайте тук след всяка по-голяма промяна.
Обобщение
- Изключването оставя файловете на място; изтривайте разширенията и темите, които не използвате.
- Почиствайте всяко тримесечие, по едно разширение наведнъж, с резервно копие или в тестова среда (staging).
- При критична грешка WordPress изпраща имейл с линк към режима на възстановяване.
- Логът на грешките или
debug.logпосочва пътя до виновника; след търсенето изключете debug отново, защото иначеdebug.logе публично достъпен. - Без администрацията изключвате разширение, като преименувате папката му; конфликтите търсите с режима за отстраняване на проблеми.
Тест (quiz)
Задача
Задача A5.4: Вашият debug log публично достъпен ли е? Въведете адреса на Вашия сайт и докажете с кода, който задачата Ви дава, че сайтът е Ваш (TXT запис или малък файл). Програмата заявява /wp-content/debug.log: добре е, ако той не съществува или достъпът е отказан (404 или 403). Ако програмата получи файл, резултатът е червен. Освен това програмата преброява колко различни папки на разширения се срещат в HTML кода на Вашата начална страница (само за информация).
Задача D5.4: Подреждане на списъка Ви с разширения. Направете списък с всички Ваши разширения (активни и неактивни): име, за какво служи, още ли е нужно (да/не), алтернатива без разширение. Изтрийте (след резервно копие или в тестова среда) разширенията, които вече не са нужни, по едно наведнъж, и след всяко изтриване проверявайте дали сайтът още работи. Попълнете колко разширения сте имали и колко са останали и отбележете дали са останали шорткодове, които е трябвало да почистите.
Задача D5.4: Подреждане на списъка Ви с разширения
Тази задача изпълнявате сами; никой не я проверява. Отбележете какво сте направили и маркирайте задачата като изпълнена.
Броят след е по малък или равен, и за всяко разширение, което остава, има причина. Неактивните разширения се премахват: дори изключен код може да съдържа уязвимост.
Вашите отметки и бележки остават само в този браузър; не ги изпращаме никъде. Ако сте влезли, в Моите курсове запазваме само че сте изпълнили задачата.
Допълнително четене
Тези статии описват стъпките в панелите на WebOké; в други панели те работят по подобен начин.
- Ръководство за DirectAdmin 18.1: Моят сайт е бял или показва грешка 500
- Грешка 500 или „критична грешка“ на Вашия уебсайт (включително след актуализация на WordPress)
- Ръководство за DirectAdmin 14.6: Fouten след ъпгрейд на PHP и намиране на лога с грешки
- Ръководство за DirectAdmin 17.2: Site summary & logs: лог файлът за грешки и лог файлът за достъп
- Как да отстранявам грешки в PHP, без да променям php.ini?
- Отстраняване на грешки в WordPress (developer.wordpress.org, на английски): https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/
- Избор, оценка и почистване на WordPress plugins
