Все публикации
93 материалаРаботает вручную, но не в cron: проверяем окружение
Почему скрипт работает из терминала, но не из cron: пути, пользователь, рабочий каталог и вывод ошибок.
JavaScriptFormData: что попадает в отправляемую форму
Какие поля попадают в FormData и почему Content-Type с multipart boundary лучше оставить браузеру.
LinuxРотация файлового журнала: конфиг logrotate и переоткрытие
Настраиваем logrotate для текстового журнала и проверяем, что после ротации приложение пишет в новый файл.
MySQLСоставной индекс MySQL: порядок колонок начинается с запроса
Подбираем составной индекс MySQL под фильтр и сортировку списка заказов и проверяем его через EXPLAIN.
PHPstrict_types в PHP: почему важен файл вызывающего кода
Где действует strict_types в PHP и почему проверка пользовательского ввода всё равно нужна.
PostgreSQLUPSERT для счётчика: конфликт должен иметь явный ключ
Увеличиваем счётчик через INSERT ON CONFLICT и отличаем конкурентный запрос от повторной доставки события.
JavaScriptIntersectionObserver: отложенная загрузка с понятным запасным сценарием
Загружаем изображения при приближении к экрану через IntersectionObserver и оставляем запасной вариант для старых браузеров.
LinuxПрофили SSH: понятные подключения без длинных команд
Сохраняем пользователя, порт и ключ в SSH-профиле и проверяем, какие настройки клиент выбрал на самом деле.
LinuxИзмеряем этапы HTTP-запроса с curl
Измеряем DNS, соединение и время первого байта через curl, не приписывая всю задержку базе данных.
MySQLUNIQUE и NULL: почему допускается несколько незаполненных кодов
Почему уникальный индекс MySQL допускает несколько NULL, но отклоняет повтор пустой строки или известного кода.
