0
<< предыдущая заметкаследующая заметка >>
17 января 2024
PHP: ошибка 2038 года

Предыстория — ваял небольшую софтинку, подробности не принципиальныИсторически у меня лежит на локальном сервере архив фото, текстов, музыки, документов и проч. И с веба он не виден. А иногда надо. Поэтому я решил потратить денек и написать веб-оболочку, которая бы позволяла браузерам членов семьи с админскими правами бегать по домашним архивам. Нормальный пользователь бы пошел читать документации, какие есть для этого готовые системы, какие у них ограничения, и как их можно привинтить для своих достаточно развесистых задач, но мне проще за два дня написать своё, чем три дня разбираться с чужим. Первая проблема оказалась в том, что неплохо бы делать превьюшки для всех фоток, которых ровно 100 тыс за все эти годы. Ну не вопрос, накидал софтинку, со вчерашнего вечера она работает, 38% уже сделала в отдельной папке в формате webp. Нарисовал тем временем фотоальбом, листалку папок, набросал минимальный редактор, чтоб можно было фотку повернуть или удалить, ну и конечно встал вопрос линка. Потому что иногда надо кинуть кому-то линк на закрытый материал, это важный функционал. Традиционно у меня в дневнике принято, что в такой парольной ссылке прописан срок годности. Ну типа если ты левому бухгалтеру кидаешь ссылку на свое свидетельство о рождении, то наверно ему это нужно час или месяц. И ссылка не будет вечно открытой для всех, кто ее найдет через год. Но в движке у меня функционал позволял задавать цифирками, сколько ссылка хранится, а тут я думаю, дай сделаю SELECT. Короче, сделал выбор плюс к текущей дате: час, неделя, месяц, год, ну или 50 лет — это типа вечно. И тут выясняется... С JS все норм. Но PHP, на котором я по-быстрому накидал бэкенд, принялся при подсчете +50 лет выдавать ошибку. Мол, хуле в функцию data() ты передаешь float, когда ожидается int? Штааа?! Какой float в PHP, сроду там типы не различались?! И внезапно выясняется, что в PHP есть некий параметр PHP_INT_MAX, и на моем сервере он int32 и его максимум 2147483647. Что в случае date('Y-m-d--H-i-s',PHP_INT_MAX) соответствует числу секунд UnixTime для даты 2038-01-19 06:14:07...

Не то, чтоб я собирался сильно долго жить и нужна была вечная игла для примуса, как говорил в таких случаях Остап Бендер. Но интересно осознавать, что через 14 лет и 4 дня жители Британии встали рано в 6 часов — у бэкендов нет часов! Ну это у них там в Британии будет 6 утра, у нас в Ингрии уже наверно 9 или 10 часов утра будет. А сколько будет в Москве и будет ли вообще — неизвестно. Как думаете, исправят PHP-шники ошибку функции data() или к тому времени сам PHP уйдет в музей древней хуйни?

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок

Комментарии к этой заметке скрываются - они будут видны только вам и мне.

Оставить комментарий