Web Мастерская
Как найти ошибку на сайте в коде PHP
PHP — мощный инструмент для разработки динамических веб-сайтов, однако даже опытные разработчики сталкиваются с трудностями при поиске ошибок в своем коде. В этой статье рассмотрим пошаговую инструкцию, как выявить и устранить проблемы в вашем PHP-коде.

Почему важно находить ошибки:
Шаг 1: Включаем отображение ошибок (Блог: Поиск ошибок в PHP | Дебаг)
По умолчанию PHP скрывает большинство ошибок от конечных пользователей. Чтобы увидеть ошибки, добавьте следующий код в начало файла:
Это позволит вам видеть предупреждения, заметки и фатальные ошибки.
Шаг 2: Используйте инструменты для дебага

Почему важно находить ошибки:
- Безопасность: Некоторые ошибки могут привести к уязвимостям сайта, позволяя злоумышленникам получать несанкционированный доступ.
- Производительность: Исправленные ошибки позволяют ускорить работу сайта и уменьшить нагрузку на сервер.
- Пользовательский опыт: Устраняя ошибки, вы улучшаете качество обслуживания ваших клиентов.
Шаг 1: Включаем отображение ошибок (Блог: Поиск ошибок в PHP | Дебаг)
По умолчанию PHP скрывает большинство ошибок от конечных пользователей. Чтобы увидеть ошибки, добавьте следующий код в начало файла:
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);Это позволит вам видеть предупреждения, заметки и фатальные ошибки.
Шаг 2: Используйте инструменты для дебага
- Xdebug
- Жалоба
Как разделить строку по символам, при первом его появлении
При помощи функции
И я получаю из строки:
Чтобы функция разбивала строку в массив, только на первом разделители, следует использовать третий параметр функции
Готово....
explode() мы можем разбить строку в массив, по указанному символу. В моём случае указанный символ (Разделитель) - это двоеточие (:):
$part = explode(':', $param);И я получаю из строки:
user:1 массив из двух элементов. Тут всё просто. Но когда мне приходит строка такого вида: origin:https://danfa.net, сценарий отрабатывает неправильно. Потому что PHP видит в строке два разделителя, первый, где и должен быть, второй в URL и разбивает строку в массив из трех элементов, вместо двух.Чтобы функция разбивала строку в массив, только на первом разделители, следует использовать третий параметр функции
explode(), что называется лимит. Делаем так:
$part = explode(':', $param, 2);Готово....
Поиск ошибок в PHP | Дебаг
При написании php скрипта легко допустить ошибку, из-за которой скрипт работать будет неправильно, либо вообще работать не будет. Страница пустая (белая) и ошибку очень сложно найти среди десятка тысяч символов... Для того что бы быстро найти ошибку, можно в ваш файл, после
после этого должно появится сообщения с номером строки, в которой находится ошибка (правда этот вариант не всегда помогает).
Еще как вариант: добавить в файл .htaccess строку:
Возможно, будет интересно:
...
<?php добавить следующий код:
ini_set('display_errors', 'On');
error_reporting(E_ALL);после этого должно появится сообщения с номером строки, в которой находится ошибка (правда этот вариант не всегда помогает).
Еще как вариант: добавить в файл .htaccess строку:
php_flag display_errors 1Возможно, будет интересно:
...
Uncaught mysqli_sql_exception: Data too long for column
Получил ошибку: Uncaught mysqli_sql_exception: Data too long for column. Из текста ошибки ясно, что машина получила слишком длинные данные.
Я не стал менять тип поля, чтобы увеличить еёёмкость, я просто сделал проверку на длину строки, перед сохранением данных в Базу Данных (По аналогии: Тема: Слишком большое имя (failed to open stream: File name too long)).
Делаю так:
Готово. Ошибка исчезла.
Строка нужна для одногоразового поиска, и длиннее чем 250 символов, она ни к чему. Поэтому, в моём случае, удаление части строки допустимо. Если это не Ваш случай, рассмотрите вариант с увеличениемёмкости поля, куда сохраняется запись, либо замену типа столбца....
Я не стал менять тип поля, чтобы увеличить её
Делаю так:
$insert['search_query'] = (mb_strlen($search) > 250) ? mb_substr($search, 0, 250) : $search;Готово. Ошибка исчезла.
Строка нужна для одногоразового поиска, и длиннее чем 250 символов, она ни к чему. Поэтому, в моём случае, удаление части строки допустимо. Если это не Ваш случай, рассмотрите вариант с увеличением
Магический метод __call(): Вызов при недоступных методов
Магический метод
Мои два метода (
С решением этой задачи мне помог магический метод
...
__call() запускается при попытке обращения к несуществующему/недоступному методу:
public function __call($name, $arguments)
{
echo 'Метод: ' . $name . ' не найден.';
}Мои два метода (
installation и update) были похоже друг с другом, за исключением деталей, я решил их объединить, в один, при этом обращение к методам должно было остаться прежним:
$class->installation();
$class->update();С решением этой задачи мне помог магический метод
__call():
// Установка | Обновление
public function __call(string $name, array $arguments)
{
// Проверка: Если вызываемый метод не: installation, или не: update, то функция вернёт null
if (!in_array($name, ['installation', 'update']))
{
return null;
}
// Код функции
} // End: Установка | Обновление