Связаться с поддержкой

Мы отвечаем по электронной почте, обычно в течение двух дней.

Для защиты от злоупотреблений Google reCAPTCHA проверяет эту отправку; при этом данные передаются в Google. Скрипт загружается только при открытии этой формы.

← Все записи

Длинный адрес уронил счётчик

9 августа 2026 года двадцать изображений счётчика не появились. Не нарисовались неправильно, не нарисовались медленно — посетитель не получил ничего там, где должен был стоять счётчик.

Причиной был адрес страницы длиннее 255 знаков.

Цепочка

Столбец, хранящий, на какую страницу пришло посещение, — varchar(255). Адрес пришёл длиннее. Вставка провалилась с SQLSTATE 22001, данные слишком длинны для столбца, что в этом коде поднимает исключение.

А запись статистики происходит до рисования изображения. Исключение, стало быть, потеряло не одну строку статистики. Оно оборвало запрос, а запрос был именно тем, который производит картинку счётчика. Страница с длинным адресом ломала собственный счётчик, молча, для каждого посетителя.

Длинные адреса не экзотика. Галерея с вложенными путями, магазин с дюжиной отслеживающих параметров, приклеенных рекламной площадкой, страница результатов поиска — любая из них берёт 255 знаков без труда.

Исправление и то, которое не выбрали

Адрес теперь режется до ширины столбца перед вставкой. У очень длинного адреса в списке страниц не хватает двадцати знаков; больше ничего не меняется.

Альтернативой было расширить столбец. Она отпала: нет ширины, которую нельзя превысить, а выбор большего числа лишь отодвигает тот же отказ туда, где его будет труднее распознать, когда он придёт. Режим отказа должен перестать быть смертельным, а не стать более редким.

Обернуть вставку в try/catch тоже сняло бы видимый симптом, и было бы хуже: счётчик рисовался бы, строка тихо исчезала бы, а в списке страниц навсегда не хватало бы именно тех страниц с самыми сложными адресами, без записи где бы то ни было.

Два вывода

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

Знайте, что ещё висит за вашим режимом отказа. Это была ошибка статистики в службе статистики, а видимым ущербом стала пропавшая картинка. Запись и рисование делили один запрос; ничто в коде не говорило, что они связаны, и ничто не предупреждало, что провалившаяся вставка утащит картинку с собой.

Двадцать сломанных картинок за день — немного. Нашлось при чтении журналов совсем по другому поводу, что обычный способ находить такое и причина продолжать их читать.

Реклама