Диагностика и решение ошибок при работе со скриптом
Общие рекомендации
Для оптимизации работы сервера и базы данных, следует учитывать несколько ключевых моментов, которые могут повлиять на скорость обработки запросов и эффективность работы сайта. Вот некоторые шаги, которые можно предпринять:
1. Увеличение мощности сервера:
Повышение объема оперативной памяти: Рекомендуется увеличить объем оперативной памяти сервера для более быстрой обработки данных.
Увеличение числа ядер процессора: Дополнительные ядра процессора могут ускорить выполнение вычислений и операций с базой данных.
2. Проверка настроек сервера:
Проверка наличия лишних задач: Убедитесь, что на сервере нет лишних задач или процессов, которые могут замедлять его работу.
Оптимизация конфигурации: Проверьте настройки сервера и базы данных на оптимальность для обеспечения эффективной работы.
3. Мониторинг производительности:
Использование инструментов мониторинга: Для контроля производительности системы рекомендуется использовать специальные инструменты, которые помогут выявить узкие места и проблемы.
4. Эксперименты с конфигурацией:
Проведение тестовых изменений: Для оптимизации работы сервера можно провести эксперименты с увеличением ресурсов (память, ядра процессора) и оценить их влияние на скорость работы.
5. Резервное копирование данных:
Создание резервных копий: Регулярное создание резервных копий данных поможет обеспечить безопасность информации и защиту от потери важных данных.
Проведение вышеуказанных действий может помочь оптимизировать работу сервера и базы данных, улучшить производительность системы и сократить время обработки запросов. При необходимости, рекомендуется консультироваться с опытными специалистами по администрированию для более точной настройки системы.
Известные проблемы и методы их решения
Ниже описаны возможные ошибки, которые могут возникать при работе со скриптом и методы решения этих ошибок.
Бесконечный редирект/ошибка редиректа
При бесконечной переадресации в настройках панели управления сервером (ISP Manager или другая) установите галочку напротив пункта "Перенаправлять HTTP-запросы в HTTPS" (пример для ISP Manager)
Долго создается заявка или не создается вовсе
Отключите SMTP-сервер в разделе "Сообщения -> E-mail шаблоны", если вы используете исходящую почту, после этого проверьте скорость создания заявки.
Зависает таблица направлений обмена при выборе валют
Установите настройки кэширования в ЛК Cloudflare — выберите опцию "No query string" в разделе "Caching" -> "Configuration"
Некорректно формируется экспортный XML-файл
Если вместо экспортного XML-файла отображается ошибка валидации файла, это чаще всего означает, что в файлах скрипта могут быть первые пустые строки в одном или некоторых файлах.
Так будет выглядеть открытый локально XML-файл, скачанный со страницы в браузере (ПКМ -> "Сохранить как -> XML-файл"
Для устранения ошибки необходимо найти файлы с пустыми строками. Для этого:
Найдите корневую папку сайта (из-под root часто это var/www/www-root/data/www/имя_домена
), заходим в неё - cd var/www/www-root/data/www/имя_домена
Из-под пользователя для сайта аналогично, но путь к корню короче (cd www/имя_домена
)
Затем выполните команду поиска пустых первых строк для поиска по всем файлам сайта:
find . -name "*.php" -type f -exec sh -c 'if [ "$(head -n 1 "$1" | tr -d "\n")" = "" ]; then echo "$1: empty first line"; fi' _ {} \;
В ответе будут все файлы, у которых первая строка пустая.
Найдите вручную все найденные файлы на сервере, откройте их и удалите пустые строки.
Нестабильная работа сайта на протоколе HTTPS
Проверьте, как указан домен в разделе "Настройки" -> "Общие" в панели администратора, должен быть указан как https://ваш_домен
Проверьте как указан домен в БД (таблица xxxx_options
), должен быть указан как https://ваш_домен
Открыть БД вы можете в панели управления ISP Manager, раздел "Базы данных"
Если кнопка "Web-интерфейс" отсутствует, установите phpMyAdmin.
phpMyAdmin для работы с БД в ISP Manager можно установить через раздел "Настройки - Конфигурация ПО" - отметить галочкой "Веб-интерфейс администрирования MySQL" - нажать кнопку "Установить" над таблицей (действия производить из-под root)
В личном кабинете Cloudflare установите тип шифрования как Flexible в разделе "SSL/TLS" -> "Overview"
Если же у вас используете самоподписанный сертификат, выпущенный не в ЛК Cloudflare - выберите пункт "Full (Encrypts end-to-end, using a self signed certificate on the server)"
Уберите галочку постоянного редиректа на HTTPS в настройках сайта в ISP Manager
Не активируется тема для сайта
Если при активации темы отображается следующая ошибка:
Активируйте опцию short_open_tag
в файле конфигурации PHP (php.ini
).
Для этого зайдите в ISP Manager под пользователем root и перейдите в настройки PHP (или откройте файл php.ini
на сервере, если не используете ISP Manager):
В поиске в правом верхнем углу наберите short
и активируйте отображаемую опцию.
После этого активируйте тему, которая отображала ошибку.
Не открывается сайт из РФ (отключение ECH)
Роскомнадзор начал блокировать Cloudflare.
Cloudflare принудительно включил всем своим пользователям шифрование заголовка SNI (Server Name Indication). Это значит, что при использовании опции невозможно узнать, к какому сайту происходит подключение через HTTPS. Роскомнадзор отреагировал на это и заблокировал сайты, использующие эту технологию.
Как результат, многие сайты которые используют Cloudflare, оказались недоступны для многих пользователей из РФ.
Если вам нужно отключить Encrypted Client Hello (ECH) для вашего домена на Cloudflare, выполните следующие шаги. Этот процесс включает проверку текущего статуса ECH, а затем его отключение через Cloudflare.
Проверка, включен ли ECH
Сначала необходимо проверить, включен ли ECH для вашего домена. Для этого перейдите по следующей ссылке, заменив example.com на ваш домен:
Если в ответе есть параметр ech=
, это подтверждает поддержку ECH. Если ECH включен, то переходите к следующему шагу.
---------------------------------------------------------------------------------------------------------
Если у вас бесплатный тариф Cloudflare:
На бесплатном тарифе доступно отключение ECH только через API сервиса.
Вам потребуются:
E-mail — почта от вашего аккаунта в Cloudflare
Global API Key — ключ для аутентификации запросов
Zone ID — это уникальный ID вашей зоны (домена) в Cloudflare
Zone ID. Перейдите в управление вашим доменом на Cloudflare и прокрутите вниз страницу. Найдите строку Zone ID и скопируйте её.
Отключение ECH через curl (вариант 1):
Теперь, когда у вас есть Global API Key и Zone ID, вы можете отключить ECH с помощью curl
.
Установите curl.
Curl — это инструмент для отправки HTTP-запросов, который понадобится для взаимодействия с API Cloudflare.
На Windows:
Для CMD
Нажмите Win + R.
Введите cmd и нажмите Enter.
Проверьте версию, выполнив команду: CMD:
curl --version
Для Powershell
Нажмите Win + R.
Введите cmd и нажмите Enter.
Проверьте версию, выполнив команду: Powershell:
curl.exe --version
На Linux/MacOS: Обычно
curl
уже установлен. Проверьте, выполнив команду: Bash:curl --version
Теперь, когда у вас есть Zone ID и API Key, выполните следующую команду:
{ZONE_ID}
замените на Zone ID Взятого из панели управления dash.cloudflare.com{ACCOUNT_EMAIL}
— замените на вашу почту от dash.cloudflare.com.{GLOBAL_API_KEY}
— замените на ваш API Key
Windows CMD:
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/settings/ech" ^
-H "X-Auth-Email: {ACCOUNT_EMAIL}" ^
-H "X-Auth-Key: {GLOBAL_API_KEY}" ^
-H "Content-Type: application/json" ^
--data "{\"id\":\"ech\",\"value\":\"off\"}"
Windows Powershell:
curl -Method PATCH "https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/settings/ech" `
-Headers @{
"X-Auth-Email" = "{ACCOUNT_EMAIL}";
"X-Auth-Key" = "{GLOBAL_API_KEY}";
"Content-Type" = "application/json"
} `
-Body '{"id":"ech","value":"off"}'
Linux:
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/settings/ech" \
-H "X-Auth-Email: {ACCOUNT_EMAIL}" \
-H "X-Auth-Key: {GLOBAL_API_KEY}" \
-H "Content-Type: application/json" \
--data '{"id":"ech","value":"off"}'
Если запрос выполнен правильно, Cloudflare вернёт ответ, подтверждающий отключение ECH:
{"result":{"id":"ech","value":"off","modified_on":null,"editable":true},"success":true,"errors":[],"messages":[]}
Отключение ECH через Postman (вариант 2):
Ту же процедуру можно проделать при помощи Postman. Postman — инструмент для тестирования API, который позволяет отправлять запросы к серверу, получать от него ответы и анализировать их. Он поддерживает работу с протоколом HTTPS и позволяет создавать запросы с использованием заголовков, параметров и тела. Это позволяет тестировать API, которые используют шифрованные соединения для обеспечения безопасности передачи данных.
Для отключения ECH в Postman создайте следующий запрос, выбрав метод PATCH. В запросе замените zone_id
на ваш Zone ID.:
https://api.cloudflare.com/client/v4/zones/zone_id/settings/ech
Во вкладке Headers
добавьте ключи:
X-Auth-Email
— адрес электронной почты, привязанный к вашему аккаунту Cloudflare;X-Auth-Key
— ваш Global API Key;Content-Type
— в столбцеValue
укажите значениеapplication/json
.
В Body выберите raw и введите следующий JSON:
{"id": "ech", "value": "off"}
И нажмите кнопку Send
.
Если у вас платный тариф Cloudflare:
Авторизуйтесь в Cloudflare.
Выберите ваш сайт.
Зайдите в раздел SSL/TLS.
Перейдите во вкладку Edge Certificates.
Найдите параметр Encrypted Client Hello (ECH).
Просто выключите эту опцию, поставив её в состояние Off.
Не отображается картинка с кодом (капча) на страницах сайта
Установите права на запись (например, 777) для папки /wp-content/pn_uploads/captcha/ или /wp-content/uploads/captcha/
.
Если вы не знаете как это сделать, то обратитесь в службу поддержки хостинга с данным вопросом.
Не отображается правая колонка с валютами ("Получаю") на главной странице обменника после включения модуля "Сортировка направлений"
Выполните "Шаг 3" в разделе "Настройки обменника" -> "Миграция" в блоке "Специальные шаги миграции" — валюты в таблице на главной должны начать отображаться корректно.
Не отображаются картинки в браузере Firefox (раздел "Партнеры")
Причина: некорректный экспорт исходных svg-изображений.
Решение:
Загрузить и распаковать архив с картинками в папку
/wp-content/uploads/partners/
на сервереЗагрузка файлов не поверх существующих файлов с их заменой, а в отдельную папку решает проблему с работой кэша Cloudflare и браузера
Не отправляются письма по статусам заявок, коды подтверждений
Возможно, домен был помечен как рассылающий спам, поэтому письма проходят через фильтры — необходимо уточнить информацию у техподдержки провайдера.
Если содержимое письма выглядит подозрительно для почтовых сервисов, можно попробовать его дополнить или изменить, чтобы избежать проблем с доставкой.
Измените тему отправляемого письма для статуса "Новая заявка" на менее формальную. Возможно, при отправке письма активируется фильтр на SMTP-сервере, который блокирует доставку.
Не работает генерация QR-кодов в заявках
Шорткод в шаблонах для статусов заявок менять не потребуется.
Не работает парсер BestChange или Парсеры 2.0 (не обновляются курсы валют)
Вероятно, файлы на сервер были загружены под рутом (root), а должны загружаться под пользователем для сайта - необходимо сменить владельца файлов и директорий. Порядок действий:
скачайте корневую папку со всеми файлами как архив на ПК
удалите эти файлы на сервере под рутом
зайдите в ISP Manager под пользователем, созданным для сайта
загрузите архив на сервер и распакуйте его по тому же пути
Не работает парсинг данных из экспортного XML-файла для BestChange
Fight Mode имеет отдельный список исключений — дополнительно добавьте в него IP-адрес 162.19.29.225
, вне зависимости от того, как вы настроили другие правила.
Не работает редактирование направлений обмена
Обратите внимание, что файл всегда должен загружаться только для соответствующей версии скрипта и только из-под пользователя, созданного для сайта (не root!).
Обновление файлов скрипта на сервере
При сложно диагностируемых ошибках быстрым и эффективным решением является обновление файлов на сервере до актуальной версии. Вам нужно:
Сделать бэкап всех файлов сайта на сервере
Загрузить архив с дистрибутивом в корневую папку сайта и распаковать архив с заменой файлов
Проверить устранение ошибки
Файлы всегда должны загружаться и быть распакованы из-под пользователя, созданного для сайта (не root)!
Отображается ошибка "Нет столбцов в таблице БД {название таблицы}"
Переактивируйте основной плагин (Premium Exchanger) в разделе "Плагины".
Затем отключите режим обновления в разделе "Настройки обменника" → "Основные настройки".
После этого недостающие столбцы будут созданы в таблице.
Отсутствует доступ к сайту
Необходимо найти таблицу XXXX_options в вашей БД через Phpmyadmin или Adminer и проверить поля home и siteurl (должен быть указать ваш актуальный домен) phpMyAdmin в ISP Manager можно установить через раздел "Настройки — Конфигурация ПО — отметить галочкой "Веб-интерфейс администрирования MySQL" - нажать кнопку "Установить" над таблицей
Очистка логов мерчантов и включение автоочистки
При долгой работе модулей "Логи мерчантов" и "Логи автовыплат" записанные логи могут относительно быстро заполнить БД и могут возникнуть ошибки при работе с сайтом, если не включена автоочистка логов.
Рекомендуем включать логирование только на время настройки модулей мерчантов, при стабильной работе приема средств и автовыплат логи можно отключить.
Необходимо зайти в БД через /Adminer и открыть таблицу (на всякий случай сделайте бэкап БД перед очисткой таблицы)
Перейдите в веб-интерфейс БД.
Если веб-интерфейс недоступен — откройте к нему доступ по инструкции:
Как узнать какой файрволл установлен на сервере: под root-пользователем зайдите в панель ISPmanager, в консоли Shell выполните команду ufw status numbered
— если будут выведены правила, то отключение правил производится командой ufw disable
. После работ с базой данных обязательно включите правила обратно командой ufw enable
.
Если будет выведена команда Command 'ufw' not found
, значит правила настроены в iptables — чтобы отключить правила там, нужно выполнить команду iptables -P INPUT ACCEPT && iptables -P FORWARD ACCEPT
, а после работ с базой данных перезагрузить сервер — правила включатся автоматически
Найдите таблицу xxxx_merch_logs
(где xxxx - ваш префикс таблицы).
Перейдите на вкладке "Операции/Operations".
Очистите таблицу по нажатию "TRUNCATE"
Подтвердите очистку данных.
Повторите действия для таблицы .
Ошибка 404 при переходе на страницу направления обмена
Скорее всего, у вас включен модуль "Тире в направлении обмена" в разделе "Модули", но не сохранены настройки для применения изменений — вы можете отключить его или оставить включенным (на ваше усмотрение).
Перейдите в раздел "Настройки -> Постоянные ссылки" и нажмите на кнопку "Сохранить изменения", ничего не меняя на самой странице.
Ошибка 525 "SSL handshake failed" при заходе на сайте
Ошибка "SSL handshake failed" указывает на то, что произошла проблема при установлении защищенного соединения между клиентом (обычно это браузер) и сервером.
В настройках личного кабинета в Cloudflare в разделе "SSL/TLS" установите параметр "Your SSL/TLS encryption mode" как "Flexible"
Ошибка файла script.js
При получении этой ошибки отключите кэширование формата js
в настройках сайта в ISP Manager
В списке "Расширения файлов для кэширования" не должно быть формата js
(если он там есть — удалите его и сохраните настройки).
Проверка размера таблиц в базе данных
Если сайт или панель администратора начинают тормозить — проблема может быть в разрастании некоторых таблиц в базе данных (чаще всего это таблицы логов).
Для просмотра самых больших таблиц для их последующей очистки выполните следующие действия:
В панели ISP Manager зайдите в раздел "Базы данных", выберите вашу БД (скопируйте название БД в текстовый файл) и перейдите в раздел "Пользователи":
На странице выберите владельца БД и нажмите "Изменить":
Нажмите на значок глаза, что просмотреть пароль пользователя. Сохраните имя пользователя и пароль в текстовый файл.
Перейдите в раздел "Shell-клиент" и введите команду mysql -u
username
-p
, где вместо username укажите имя пользователя БД из предыдущего пункта. Выполните команду, а затем введите пароль пользователя (символы не будут отображаться про вводе) и нажмите Enter. При успешной авторизации вы увидите текст "Welcome to the MySQL monitor."
Затем введите команду SELECT table_name AS "Table", round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB" FROM information_schema.TABLES WHERE table_schema = "
database_name
" ORDER BY (data_length + index_length) DESC;
, где вместо database_name
укажите имя башей БД. Нажмите Enter.
После выполнения этих пунктов отобразится список всех таблиц, отсортированных по размеру (самые большие таблицы сверху).
Редирект на поддомен при блокировке основного домена
server {
server_name 123.ru
listen 80;
location / {
if ($argument_uri) {
return 301 https://test.123.ru$request_uri;
}
## тут оставшийся конфиг }
}
Логика работы следующая: пользователь обращается к сайту, где выполняется заданное условие. В случае его выполнения осуществляется перенаправление с кодом 301, при этом передаются все параметры запроса (в том числе "хвост" партнерской ссылки).
Выше пример реализации для nginx, в Apache такая конфигурация работать не будет.
Системная ошибка (код: anticsfr)
В качестве быстрого временного решения проблемы - достаточно перезагрузить страницу в браузере.
Эта ошибка указывает на проблему с записью сессий на сервере или изменением IP-адреса пользователя. Вероятно, настройка хранения пользовательских сессий выполнена некорректно.
Для решения проблемы необходимо установить настройки сессий так, как показано на скриншоте ниже.
session.gc_probability
и session.gc_divisor
: Эти два параметра вместе определяют вероятность запуска процесса сбора мусора на каждом запросе. Вероятность рассчитывается как gc_probability/gc_divisor
. Например, если gc_probability
равно 1, а gc_divisor
равно 1000, то сбор мусора будет запускаться примерно на 0,1% запросов
session.gc_maxlifetime
: Этот параметр определяет максимальное время жизни сессии в секундах. Если сессия старше этого времени, она будет считаться "мусором" и будет удалена при следующем запуске процесса сбора мусора
После изменения конфигурации PHP, вам нужно перезапустить веб-сервер для применения изменений.
find /var/www/*/data/mod-tmp/ -name "sess_*" -exec rm {} \;
find /var/www/*/data/bin-tmp/ -name "sess_*" -exec rm {} \;
Тормозит/зависает панель управления скриптом или сайт, отображаются ошибки при создании заявки
Удаление сессий
Выполните команду через ssh:
cd /var/www
/имя_пользователя_сайта
/data
Выполните команду:
find mod-tmp -name "sess_*" -mtime +2 -type f -print0 | xargs -0rn 20 rm -f
После этого удалятся все сессии старше 2 дней.
Также вы можете зайти по SSH из другого окна (сессии) и ввести:
df -i
После ввода команды вы увидите заполненность диска файлами.
Количество inode (количество возможных файлов) на разных серверах может существенно отличаться, поэтому очистка может занять от 10 минут до 5 часов
Настройки обращения к серверу
Если вы меняли эти настройки ранее — верните их к исходному виду.
Настройки PHP
Зайдите в панель управления ISP Manager из-под root-пользователя и проверьте версию PHP для сайта.
Затем откройте настройки нужной версии PHP
Для указанных ниже параметров на вашем сервере должны быть установлены значения как на скриншоте. Если они отличаются от приведенных ниже —
измените их.
Для полной очистки файлов выполните команду find mod-tmp -name "sess_*" -type f -print0 | xargs -0rn 20 rm -f
После этих действий временные файлы будут удалены с сервера и будет работать автоочистка файлов через PHP.
Увеличение лимита памяти
В случае обработки большого объема данных, скрипту может не хватать выделенной оперативной памяти на сервере для нормальной работы. Чтобы увеличить лимит оперативной памяти, который может использовать WordPress, необходимо выполнить следующие шаги:
На сервере открыть файл
ваш_домен/wp-config.php
и после строкиdefine(‘WP_DEBUG’, false);
прописать следующие строки и сохранить изменения:
define('WP_MEMORY_LIMIT', '512M');define('WP_MAX_MEMORY_LIMIT', '1024M');
В конфигурации вашего сервера установить значение
MEMORY_LIMIT = 512M
.
Другие действия
Обратитесь в поддержку вашего хостинга и попросить дать информацию по нагрузке на ваш сервер.
Также вы можете удалить на сервере модуль \wp-content\plugins\premiumbox\moduls\courselogs
(если он есть), он может грузить систему больше всего
Можно отключить все модули в разделе "Модули" (зафиксировав состояние "до") и проверить — будет ли сайт работать быстрее?
Если да, то нужно будет постепенно включать модули обратно (по 3-5 за раз) и проверять на каком шаге начнется торможение — после этого анализировать модуль, который вызывает торможение.
Увеличение максимального размера загружаемых файлов
При необходимости вы можете установить своё значение для загружаемых пользователями файлов через ЛК или в заявке (картинки для верификации счетов/личности).
Ограничение по умолчанию составляет 2 мегабайта.
При использовании ISP Manager — зайдите под root-пользователем в панель и перейдите в раздел "Настройки PHP":
Выберите версию PHP, которая используется на вашем сайте и зайдите в её настройки:
Установите желаемое значение для опции "Макс. размер файла" и сохраните изменения. Перезагрузите сервер.
Если вы не используете панель ISP Manager — в файле php.ini найдите нижеуказанные директивы, установите для них свои значения и перезагрузите сервер.
upload_max_filesize = 128M — макс. размер одного загружаемого файла
post_max_size = 128M — макс. размер набора файлов, загружаемых за один запрос
memory_limit 256M — лимит памяти PHP
max_execution_time 300 — макс. время исполнения запроса в секундах
max_input_time 300 — макс. время время в секундах, которое скрипт может потратить на разбор входных данных
upload_max_filesize — установите значение, превышающее размер вашей резервной копии post_max_size — установите значение > чем резервная копия memory_limit — установите значение > чем резервная копия max_execution_time — установите значение 0 (бесконечно)
Установка статуса "На проверке"
В настройках всех используемых модулей мерчантов для указанного ниже блока настроек ("Работа со статусами заявок") выберите из выпадающего списка вариант "На проверке" для всех опций и сохраните изменения.
В настройках всех используемых модулей автовыплат установите запрет на совершение выплаты для заявок, находящихся в статусе "На проверке" — выберите пункт "Нет" для выделенной ниже опции.
Шпаргалка по настройке DNS записей для работы почты на домене
Время от времени приходится разбираться с некоторыми аспектами проверки электронной почты. Это включает в себя проверку ряда DNS-записей и запросов.
Модуль "QR Генератор":
Файл class-form.php для разных версий скрипта:
Версия 2.6:
Версия 2.5:
Last updated