• Как обработать ошибку mysql подключения в PHP 8.1?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ни в коем случае не надо совершать ни одно из телодвижений, предложенных Rsa97
    Режим выброса исключений специально сделан, чтобы не писали этот говнокод из прошлого века.
    Если в коде написано if($mysqli->connect_errno) {, это означает что никакой нормальной обработки ошибок там всё равно не было. И надо просто убрать этот бесполезный мусор. Поскольку вариант с исключением в сто раз информативнее и удобнее для обработки.
    И у запросов тоже, кстати, надо поубирать всю тупизну с if($mysqli->error) или, того хуже, or die()

    Если же интересует, как в принципе обрабатывать ошибки в РНР, то это другой вопрос.
    Для локальной системы ничего менять не надо. Для боевой - включить логирование ошибок, выключить показ в браузер и в случае ошибки выводить стандартную страницу о временной недоступности сайта.

    Тот редкий случай, когда действительно требуется именно обработка ошибки соединения, а не "die('что-то пошло не так')" мы здесь не рассматриваем, поскольку к моменту, когда программисту такое может понадобиться, он уже владеет базовыми приемами программирования и вполне разберётся сам.
    Ответ написан
    Комментировать
  • В чем ошибка моего кода?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Самое время познакомиться с темной стороной программирования.
    Начинающие вайтишники искренне думают, что программист - это типа такой художник. Берет мольберт, поллитру, кисти и начинает ВАЯТЬ. Потом отходит на шаг, любуется делом рук своих, и снова. Ваять. А потом сразу заказчику, за большие деньги.

    Так вот, в реальности это всё не так.
    Большую часть времени программист не пишет код.
    А пытается разобраться, почему он не работает.

    Так что мы будем сейчас учиться это делать.
    Тем более, что это в принципе несложно.
    Главное не думать, что чем-то поможет сидеть и тупить в свой кодик. И приглашать других людей потупить в него тоже бессмысленно. Потому что причина может быть совсем не в нем. но даже если проблема и в коде, то искать её всё равно надо по-другому.
    В код не надо тупить. Его надо ЗАПУСКАТЬ.
    И выводить промежуточные результаты. Проверять его работу.
    Заранее выяснить, какие должны быть значения у переменных, и проверять их на каждом этапе.
    Где не совпадут - там и проблема.
    В идеале IDE сама покажет содержание всех переменных при трассировке, но если пишешь код в блокнотике, то даже тупо писать var_dump($bar1,$var2,$var3...); и смотреть что там лежит.
    Условия проверять еще проще, тупо echo 'зашли в условие if (!empty($user))';
    И если лежит не то, или эхо не выводится - вот тогда уже смотреть в код и думать, почему так получилось.

    В частности, при авторизации надо проверить две вещи:
    1. Находится ли юзер по логину
    2. если находится, то проверить корректность хэша. Для этого при регистрации надо вывести полученный через password_hash пароль и записать на бумажке
    потом запросить сохраненный из БД и сравнить

    Кроме того
    Разумеется, отладка невозможна без сообщений об ошибках.
    В половине случаев РНР человеческим голосом сообщает в чем проблема.
    Поэтому всегда, в любом окружении должно стоять error_reporting(E_ALL);
    плюс на домашнем компике полезно прописать ini_set('display_errors', 1); чтобы сразу видеть ошибки на экране.
    На боевом сервере разумеется поставить 0 вместо 1, и добавить ini_set('log_errors', 1);

    У меня только один вопрос.
    Какой смысл вообще делать парольную защиту, если любой придурок сможет спокойно авторизоваться через SQL инъекцию?
    Ответ написан
    9 комментариев
  • Как выполнить миграцию в контейнере Docker?

    Viji
    @Viji
    Associate DevOps Engineer
    Привет,

    1. Скорее всего у тебя env vars в docker compose не правильно указаны, они должны быть в секции server, а не в секции db или в обоих
    2. попробуй в run.sh вместо php artisan migrate, написать sleep 1800
    зайди внутрь работающего php containerа с помощью docker exec -ti container_id bash и выполни там env - посмотри есть ли variables for php script to work
    Ответ написан
    8 комментариев
  • Какие алгоритмы и структуры данных чаще всего спрашивают на собеседовании джуна?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Меня за все 20+ собеседований не спрашивали про алгоритмы, максимум пузырьковую сортировку написать и какие-то простые задачи на мышление.
    UPD. Спрашивали еще за B-tree деревья, но это в контексте индексов в MySQL, важно уметь на пальцах объяснить как происходит поиск по индексу
    Ответ написан
    3 комментария
  • Какие алгоритмы и структуры данных чаще всего спрашивают на собеседовании джуна?

    @karminski
    Senior React.JS Developer
    Как-то я в ответ на похожие вопросы спросил собеседователя - а вам оно на кой сдалось? Кроме чего-то невнятного, что типа это проверка знаний, он ответить не смог. Большинство задающих похожие вопросы не понимают сути собеседования. И как правило вам не стоит обращать внимание на такого работодателя. Хотя - вы джун, можете попытаться набраться опыта.
    Ответ написан
    Комментировать
  • Какие алгоритмы и структуры данных чаще всего спрашивают на собеседовании джуна?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Как по мне собеседнику плевать на ваши алгоритмы. спрашивают про реальные проекты.
    Описывайте что делали на чем, чего добились, что показалось сложным или интересным.
    Ответ написан
    Комментировать
  • Почему моя быстрая сортировка работает неочевидно?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Все ломается

    потому что при рекурсивном вызове функции rand() выдаёт разное значение и опорный элемент прыгает

    $elem = [$array[rand(0, count($array) - 1)]];
    Ответ написан
    1 комментарий
  • Как сконфигурировать Apache внутри Docker?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Подходят. Когда будешь запускать контейнер подмонтируй директорию с конфигами Apache.
    Пример Start a container with a volume

    PS
    EXPOSE 8080 - не пробрасывает порт в систему, это информационная директива, которая сообщает пользователю какой порт слушает сервис в контейнере. Можно её вообще не использовать.
    Ответ написан
    1 комментарий
  • Как сделать очередь-демон в laravel?

    AmdY
    @AmdY
    PHP и прочие вебштучки
    Демон - это постоянно работающая в фоновом режиме программа. Вам же надо раз в день, это не демон, а планировщик задач https://laravel.com/docs/8.x/scheduling
    Ответ написан
    Комментировать
  • Как сделать очередь-демон в laravel?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    Немного логики:

    С помощью CRON запускаем задачу раз в сутки
    В этой задаче получаем все модели подходящие под условия
    Отправляем или саму модель (если нужна более гибкая работа с ними) в очередь или перебираем модели и отправляем письмо в очередь (мне кажется лучше первое, тк лучше 100 легких задач чем одна тяжелая, учитывая что даже простой vps потянет сотни тысяч задач в час)
    В очереди выполняем то что надо с моделью.
    Cron самостоятельно повторяет это раз в час.

    Лучше прочитать документацию Laravel от начала и до конца будет понимание что он умеет. Все что я описал там есть. laravel.su/docs/8.x
    Ответ написан
    Комментировать
  • Как сделать очередь-демон в laravel?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Попробуй поискать ответ в документации. Подсказка: надо делать не на очередях (хотя возможно и на них, но очереди не для этого).
    Ответ написан
    2 комментария
  • Какая нужна теоретическая база на собеседовании джуна?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Реальное понимание ООП и паттернов - это не уровень джуна.
    И да - как вы верно заметили - те кто говорят, на самом деле просто заучили пару расхожих заклинаний.
    Как метко сказано в последней книжке Пелевина,
    Маня была счастлива. Вот что значит быть дочкой банкира - папа не объяснял, папа инструктировал, как объяснять другим".

    Вот людей, которые могут объяснить, но сами не понимают, в последнее время как-то очень много появилось.

    В реальности от джуна требуется чисто механическая часть ООП:
    - уметь использовать готовые классы, уверенно обращаться к свойствам и методам
    - знать что делают основные магические методы
    - понимать неймспейсы и автолоад
    - в целом уверенно читать исходный код классов - то есть не пугаться слов implements и use (которое трейты а не неймспейсы)
    - уметь использовать контрол-клик в Шторме
    Ответ написан
    3 комментария