Задать вопрос
  • Разбивка на страницы?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы ограничить количество выводимых страниц требуется знание арифметики в пределах начальной школы.
    Чтобы вместо 1 и $num_pages использовать заранее рассчитанные значения, укладывающиеся в определённый интервал. Например 10 страниц.
    То есть надо всего лишь определить начальную и конечную цифры, которые подставлять в for вместо 1 и $num_pages.
    Например, если мы хотим выводить только 10 страниц, а текущую выводить посередине то для получения первой цифры надо отнять от текущей 4. Затем к ней надо прибавить 9 - так мы получим второе число.
    При этом, разумеется, надо проверить, чтобы первое не было меньше 1, а последнее - больше $num_pages.
    А дальше просто подставить их в for. Вот и всё.
    Ответ написан
    2 комментария
  • Как в верстке сделать уши у контейнера?

    delphinpro
    @delphinpro Куратор тега Вёрстка
    frontend developer
    Проще всего не запихивать все блоки в один общий контейнер, а прописывать каждому блоку внутри свой отдельный.
    И тут появляется много вариантов. вот один из них. https://codepen.io/delphinpro/pen/bNGPwyN



    или так https://codepen.io/delphinpro/pen/dPyBpEq

    Ответ написан
    Комментировать
  • Как вернуть коммиты после rebase?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Почему «пропали» коммиты?

    Главная ошибка — использование --amend во время rebase.
    Команда git commit --amend не создает новый коммит, а перезаписывает предыдущий.

    Когда вы время интерактивного rebase на каждом шаге делаете --amend, вы по сути всё время заменяете один и тот же коммит. Остальные коммиты, которые Git должен был «применить» в процессе ребейза, просто исчезают, потому что их заменили.

    Как делать правильно?

    Во время rebase -i вместо amend нужно:

    git add <файлы> #  главное проиндексировать правки файлов
    git rebase --continue # тут гит уже сам сделает git commit --no-edit
    Вручную делать git commit перед continue имеет смысл только если вы хотите поменять ещё и сообщение коммита.

    Как восстановить утерянные коммиты

    Git не удаляет коммиты сразу. Они остаются в репозитории и доступны в reflog — журнале ссылок.

    Их можно найти так: git reflog

    Затем восстановить ветку: git reset --hard <хеш_из_reflog>

    Вывод

    Это не баг Git, а ожидаемое поведение. Просто rebase + amend — взрывоопасная смесь, особенно если не до конца понимать, что происходит.
    Ответ написан
    Комментировать
  • Возможно ли восстановить данные с нерабочего смартфона?

    15432
    @15432
    Системный программист ^_^
    Да, для этого процессор и память перепаивают на полностью рабочий донорский телефон, запускают и извлекают данные. Обычно стоит дорого, но данные важнее
    Ответ написан
    5 комментариев
  • На сайте очень много видео. Какие есть идеи в оптимизации?

    @alexalexes
    Отображать превью видео, вместо видео. Когда пользователь наведет мышью на превью (окажется в области просмотра в мобильной версии сайта), то заменять превью на видео или на облегченную версию видео.
    Ответ написан
    1 комментарий
  • Бест практис разработки регистрации с подтверждением по email?

    @alexalexes
    1. Активные пользователи хранятся там же, где неактивные пользователи - в нормальной реляционной СУБД, а не редис.
    Активный пользователь отличается от неактивного, наличием даты-время подтверждения эл. почты. В этой же записи пользователя в отдельном атрибуте храните сгенерированный хеш-код для подтверждения, который используете в ссылке.
    2. В неавторизованном состоянии предусматриваете возможность повторной высылки кода подтверждения на указанный эл. адрес. (Прямо отдельная форма).
    3. Любые действия, связанные с высылкой письма должно подтверждаться проверкой пользователя, что он человек (капча, или использование сторонних сервисов проверки).
    4. Скрипт, который обрабатывает ссылку подтверждения почты тоже должен иметь защиту от ддоса.
    Все.
    Ответ написан
    7 комментариев
  • Кривая работа функции date php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Неделя начинается с понедельника и идентифицируется своим порядковым номером в году. Первой календарной неделей года считают первую неделю, содержащую первый четверг текущего года. Последней календарной неделей календарного года считают неделю, которая предшествует первой календарной неделе следующего года. ISO 8601.
    Соответственно, 2024-12-29 - воскресенье, последний день последней, 52-й недели года.
    2024-12-30 - понедельник, входящий в неделю, где четвергом является 2025-01-02, то есть в первую неделю 2025 года.
    Ответ написан
    6 комментариев
  • Почему не могу зайти в phpmyadmin, 404 Not Found?

    @dodo512
    location ~ ^/phpmyadmin/(.+\.php)$ {
        root /usr/share/phpmyadmin;

    Путь к файлу формируется путём простого добавления URI к значению директивы root.

    URI = /phpmyadmin/index.php
    root = /usr/share/phpmyadmin

    В итоге nginx будет искать файл /usr/share/phpmyadmin/phpmyadmin/index.php

    Если в root убрать лишний /phpmyadmin.

    location ~ ^/phpmyadmin/(.+\.php)$ {
        root /usr/share;

    nginx будет искать файл /usr/share/phpmyadmin/index.php
    Ответ написан
    Комментировать
  • Стоит ли использовать Django для создания многофункционального сайта?

    @Belvarm
    Java TeamLead, интеграционные решения
    Стоит использовать те фреймворки, которые вы знаете, а то будет мало пользы
    Ответ написан
    Комментировать
  • Почему PHP выполняет математические операции неправильно?

    Коротко - потому что IEEE 754

    Выполняет он математические операции правильно, но некоторые числа компьютер просто не способен представить со 100% точностью, тк для них нужно было бы бесконечное количество памяти.

    Точно также, как мы не можем записать все цифры числа 1/3 в десятичной системе, точно также и компьютер иногда не может записать все цифры в двоичной.

    Если ты работаешь с деньгами, то тогда используй то, что делают все банки - представляй суммы денег не как дробные числа, а как целые. Например место 1.5 рублей записывай как 150 копеек. Запятую добавишь при выводе человеку.
    btw тут в комментах пишут, что для денег тоже есть паттерн по-лучше конкретно для php.

    Если при делении у тебя получилось дробное количество копеек - округляй так, как велит закон.

    Если ты делаешь какие-то математические вычисления - возможно тебе нужны рациональные числа.
    Не знаю, что обычно для этого в пхп используют, но нагуглил https://github.com/webgriffe/rational
    https://github.com/markrogoyski/math-php

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

    Если тебе критически важна скорость, а точность - не так важна, то оставайся на IEEE754 и просто округляй то N значимых цифр (обычно больше 5 цифр мало кому нужно)
    Ответ написан
    13 комментариев
  • Почему PHP выполняет математические операции неправильно?

    Vamp
    @Vamp
    Потому что типом данных double нет возможности представить число 0.58. Поэтому компьютер берёт наиболее близкое к 0.58 число, которое double может выразить.

    Если вам нужны точные вычисления, то следует воспользоваться специальными функциями:

    $format = bcdiv("580000000", "1000000000", 2); // "0.58"
    
    var_dump(bcmul($format, "100")); // string(2) "58"


    Существует даже специальный сайт, рассказывающий о данной особенности математики чисел с плавающей запятой: https://0.30000000000000004.com/
    Ответ написан
    Комментировать
  • ИИ на стадии обучения программированию. Стоит ли?

    ИИ не позволяет тебе научиться двум очень важным навыкам:
    1. Поиск и фактчекинг информации
    2. Дебаггинг, самостоятельный поиск и решение проблем.

    "Ломание головы, почему код не работает" - это важная часть учёбы.

    Любая LLM - это не всезнающий джин и у всех есть свои неприятные ограничения с которыми ты рано или поздно столкнёшься.

    И RAG, всякие MoE, подключение поисковика не всегда могут помочь.

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

    Я не говорю, что тебе нужно срочно отказываться и прекращать использовать chatgpt. Это точно такой же инструмент, как и поисковик, всякие QnA, stackoverfloe и тд, со своими ограничениями и нишами, где он хорошо работает.
    Ответ написан
    Комментировать
  • Устанавливать ли в php таймзону пользователя?

    @alexalexes
    Проблем с временными зонами вообще не будет, если их представление выдавить максимально ближе к модели представления данных на интерфейсе пользователя.
    Нужно конвертировать в строку только непосредственно перед отрисовкой дату и время из UTC, и обратно загонять время в UTC, если забираете пользовательский ввод.
    Весь бек должен работать в одной временной зоне, а от пользователя знать, что он в такой-то временной зоне, только в контексте сессионной переменной, если это необходимо.
    Ответ написан
    Комментировать
  • Сохранить Json файл в котором присутствует base64 отправленый без urlencode?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Пробелы вполне поддерживаются стандартом JSON - их не нужно никак экранировать и что либо делать с ними.
    Ответ написан
    2 комментария
  • Можно ли видео на сайте без сохранение на диск показывать в меньшем разрешении?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Видео в любом случае должно быть кем то сконвертировано, перед отправкой клиенту, варианты:
    - Либо множество заранее подготовленных видео роликов с нужным качеством (ютуб так делает), потребуется сильно больше места на диске, но нагрузка на процессор будет сильно меньше + можно выбрать ночное время для обработки.
    - Либо сервер, который будет конвертировать видео в реальном времени, но нагрузка на процессор будет сильно больше.
    Ответ написан
    5 комментариев
  • Какой CRUD генератор для Laravel является общепринятым в 2025?

    Sanes
    @Sanes
    Из популярных и бесплатных MoonShine, FilamentPHP, Orchid. Можно назвать их админками.
    Но толку от них немного. Только базовый функционал, дальше боль.
    А прям генератор, то лучше посмотреть Blueprint
    Ответ написан
    Комментировать
  • Какой использовать стек для написания онлайн сервиса управления производством?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    На том, который лучше всего знают ваши разработчики.
    Ответ написан
    Комментировать
  • Как заменить текст в файле .csv с помощью PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Угу. Сначала понаставим @, чтобы скрыть все ошибки, а потом будем голову ломать, почему ничего не работает и ошибок не показывает.

    А вообще, это делается в одну строку.
    file_put_contents($outfilename, str_replace('Российский рубль', 'RUB', file_get_contents($infilename)));
    Ответ написан
    Комментировать
  • Как реализовать авторизацию на ТВ по 6 значному коду?

    Или проще сделать наоборот: показывать код на мобильном устройстве, а на ТВ вводить?

    Для пользователя проще вводить что-либо на телефоне, а не на телевизоре.

    В общем-то такой способ входа не только на телевизорах и yt практикуется. Такое есть ещё у Microsoft и Github при использовании oauth, например. Ещё видел такое у samsung на телевизорах/мониторах и у nintendo на свиче

    Смысл такой:
    1. Клиент инициирует процесс аутентификации запросом к серверу аутентификации и просит, чтобы аутентификация происходила на другом клиенте. (при этом передаётся clientid / client secret просто чтобы понять, что за приложение этот запрос инициировало).

    2. Сервер генерирует какой-то уникальный идентификатор для этого запроса с некоторым временем жизни (обычно не больше 30 минут). И передаёт его клиенту в ответе на запрос.

    3. Клиент показывает пользователю:
    1) qr-код с ссылкой для аутентификации, где уже зашит этот id
    2) ссылку в виде текста
    3) этот id, если вдруг его придётся вводить руками

    4. Пользователь переходит в итоге по ссылке и опционально вводит этот id. Дальше идёт обычная oauth аутентификация, только без коллбэка (в конце, вместо коллбэка просто страничка аля "всё готово, страницу можно закрыть")

    5. Параллельно с этим клиент в фоне опрашивает сервер аутентификации о том, прошла ли аутентификация (просто периодические запросы раз в n секунд, long polling, sse, websocket - не важно). В один прекрасный момент сервер сообщит, что аутентификация прошла и передаст твои обычные токены (обычно пару access/refresh)
    Ответ написан
    Комментировать