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

    @d-sem
    0) В БД не обходимо добавить поле - письмо отправлено (boolean или дата).

    Тогда алгоритм следующий:

    1) cron с нужной периодичностью запускает скрипт;
    2) скрипт делает выборку по дате (>5 дней от запуска скрипта и кому еще не отправлялось письмо);
    3) скрипт отправляет письмо;
    4) после отправки ставит флаг письмо отправлено или записывает дату отправки (необходимо для предотвращения повторной отправки).
    Ответ написан
    Комментировать
  • Как сделать бесконечный скрол без потери позиции?

    profesor08
    @profesor08 Куратор тега JavaScript
    При прокрутке проверяй какие элементы из загруженного пула есть на экране и сохраняй эти данные где-то. При перезагрузке бери эти данные и загружай те самые элементы. Профит.
    Ответ написан
    Комментировать
  • Как жить после php?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Я тебе больше скажу - в php все тоже самое. Ты просто даже не подобрался к первой ступеньке сложности в веб-разработке
    Ответ написан
    Комментировать
  • Eloquent orm, как сделать перебор месяцев, когда были зарегестрированы люди?

    @Nc_Soft
    Никогда не делайте на php то, что можно сделать базой данных
    SELECT GROUP_CONCAT(`id`), DATE_FORMAT(`registered_at`, '%Y-%m') FROM `user` GROUP BY DATE_FORMAT(`registered_at`, '%Y-%m')
    Ответ написан
    Комментировать
  • Eloquent orm, как сделать перебор месяцев, когда были зарегестрированы люди?

    New_Horizons
    @New_Horizons
    Бред:
    groupBy
    $usersByYear = $users->groupBy(function ($user) {
    	return $user->created_at->year;
    });


    UPD: не увидел что нужно по месяцам. Но сути не меняет, вместо year вернуть год и месяц.
    Ответ написан
    Комментировать
  • Как сделать вывод без лишних символов?

    @Flying
    Если делать корректно - то вам стоит использовать libphonenumber, есть её порт на PHP.

    Однако если речь идёт о частном случае - то всё можно сделать намного проще:
    function formatPhone($phone)
    {
        $number = preg_replace('/\D+/', '', $phone);
        if (strlen($number) === 10) {
            $number = '7' . $number;
        }
        return [
            'display' => sprintf('+%s (%s) %s-%s-%s', substr($number, 0, -10), substr($number, -10, 3), substr($number, -7, 3), substr($number, -4, 2),
                substr($number, -2, 2)),
            'link'    => sprintf('tel:+%s', $number),
        ];
    }
    
    $phone = '(495) 123-45-00';
    $formatted = formatPhone($phone);
    
    echo "${formatted['display']}\n{$formatted['link']}\n";

    Посмотреть вживую можно здесь.
    Ответ написан
    Комментировать
  • Best practice по константам проекта в PHP. Нормально ли собрать в файл все константы (100-200 шт) проекта?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    В драйвер БД встроена примочка для вставки констант и для неё приходится писать полный путь

    смотрите. при условии что драйвер для работы БД не может нормально работать с алиасами классов , вы пытаетесь подстроить архитектуру, а не исправить драйвер.
    Понимаете в чем дело , библиотеки которые вы используете формируют вашу архитектуру, библиотеки уйдут, заменятся другими, а архитектура останется.
    Ответ написан
    Комментировать
  • Best practice по константам проекта в PHP. Нормально ли собрать в файл все константы (100-200 шт) проекта?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    Мне кажется структура проекта должна быть удобным для работы с ним, и основное условие это модульность и разделение обязанностей. И в плане производительности подключить один класс со всеми константами, наверное будет не намного производительнее чем пару классов с константами (и немного странно что константа используется без самого класса, ну то есть если используется константа для работы с БД, то логично было бы расположить ее в маппере который с БД и работает). Как вариант можно вынести общие константы, которые используют несколько модулей. А остальные оставить в используемых классах.
    Ответ написан
    3 комментария
  • Плохо ли так выводить html?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Плох и тот и другой вариант.

    Он подразумевает что вывод идёт прямо вперемешку с запросами к БД. А надо сначала выполнить все запросы, собрать все данные для вывода, и только потом начинать выводить.
    <?php
    if (isset($_POST['register'])) {
        if ($user) {
            $error = "This email address is already associated with an account.";
        }
      // остальные проверки

    и только после того как закончили все проверки, начинаем выводить хтмл.

    А вот что в этих кусках кода действительно плохо - это то что переменная пихается прямо в запрос.

    Да. И никакого "накладного расхода" при испльзовании echo, тем более по сравнению с другими вариантами вывода, в природе не существует - это всё бабкины сказки.
    Ответ написан
    Комментировать
  • Какой путь развития выбрать?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Для начала нужно выбрать что-то одно.
    Знать по чуть-чуть во всех областях бесспорно полезно для саморазвития, но на начальных этапах это прямой путь в дешевый фриланс и "сайт под ключ за 5-10-20 т.р".

    Хотите работать верстальщиком - учите html/css/less и т.д.;
    Хотите в будущем быть frontend - учите какой-нибудь модный js фреймворк по вкусу (react / angular / vue);
    Хотите в бек в модные проекты - учите что-то из списка PHP / Python / Go (но что-то одно) + работу с базой;
    Хотите в бек в энтерпрайз - учите Java + опять же работу с базой;
    Хотите в мобильную разработку - учите swift для ios или kotlin для android (но опять же что-то одно);

    Откройте HH, почитайте вакансии для начинающих, почитайте вакансии для опытных, составьте себе roadmap кем вы хотите быть через пол года, через год, через 3.

    Любой нерелевантный опыт будет полезен только при трудоустройстве в мелкую компанию где вы будете делать первое, второе, третье, а параллельно админить 1с и менять катриджи в принтере.
    В любых крупных IT компаниях действует жесткая специализация.
    Ответ написан
    5 комментариев
  • Для каких задач Node.js является более приоритетным выбором среди других платформ?

    gadfi
    @gadfi
    https://gamega.org
    Знаю js,
    весьма смелое утверждение
    если без юмор то бек на ноде весьма так себе идея если мы говорим не о микро сервисах, но они нужны далеко не всегда, не ищите задача под инструмент, ищите инструмент под задачу

    зы я знаю огромный список успешных проектов на ноде, на пыхе, java, python или с# он не меньше это не аргумент
    зыы видел засраные проекты на любом из вышеперечисленных яп
    Ответ написан
    6 комментариев
  • Как редактировать файл .htaccess через PHP?

    SagePtr
    @SagePtr
    Еда - это святое
    Проблема ещё в том, что апач прожорливый, и если пытаетесь защититься при помощи .htaccess от множества запросов - то скорее всего, эти запросы уже положат апач. А ещё, если адресов в чёрном списке будет много - то это сильно замедлит легитимные запросы, потому что при каждом запросе должен будет читаться и парситься .htaccess, который будет очень сильно расти.
    Потому блокировать нужно явно ещё раньше, к примеру, средствами брандмауэра (если не рассматривать внешние способы защиты, при которой эта задача ложится на хостера или промежуточное звено вроде cloudflare, а до сервера доходят уже отфильтрованные запросы).
    При большом объёме - чёрный список должен быть не линейным, т.к. время O(n) нас явно не устраивает, проверки наличия адреса будут занимать много времени, поможет к примеру ipset, хранящий отмеченные адреса в виде хэш-таблицы.
    Ответ написан
    Комментировать
  • Как передать переменную в SQL запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Кто ж вас редбину-то учит, не давая даже базовый синтаксис?
    Переменную никогда не передают прямо в запрос. Её надо передавать отдельно.
    echo  json_encode(R::getAll('SELECT * FROM `category` WHERE `id_user` = ?', [$id_user]));
    Ответ написан
    9 комментариев
  • Как ускорить отправку письма при заказе?

    @dimuska139
    Backend developer
    Это надо делать через очередь. То есть человек жмет, грубо говоря, кнопку "отправить письмо", на сервере запускается задача отправки письма, отдается обратно ответ, что письмо будет отправлено, а сама отправка выполняется в фоновом режиме.
    Погугли насчет Gearman.
    Ответ написан
    Комментировать
  • DigitalOcean как не платить НДС 20%?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    теперь я должен платить налог +20%
    Не заслужили считаю

    Пишите петицию по поводу отмены НДС, пикеты там одиночные и всё такое. В выборах на разных уровнях тоже полезно участвовать.
    Ответ написан
  • Какой драйвер сокетов в Laravel вы используете?

    pxz
    @pxz
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    Используем socket.io клиент.
    Есть готовый сервер на nodejs. Пакет называется laravel-echo-server.

    Есть возможность работать через Redis pub/sub, то есть, без HTTP посередине, что сильно влияет на скорость и производительность.
    Ответ написан
    Комментировать
  • Объясните отрезок кода php?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    <?php
            /** @var bool */
            public $exit = true;
            /** @var bool */
            public $exitFullUsage = false;
            /** @var bool */
            public $help = true;
            /** @var bool */
            public $optionsFirst = false;
            /** @var ?string */
            public $version;


    это объявлены свойства, которые можно будет получить через $object->{ $name }; (потому как они помечены как публичные)
    для удобства работы в PhpStorm и чтения указаны их типы данных, когда часто работаешь с кодом позволяет не тратить время на то, чтобы долго не вкуривать и не разбираться. Достаточно знать что там лежит.

    <?php
          public function __construct($options=array())
            {
                foreach ($options as $k=>$v) {
                    $this->$k = $v;
                }
            }


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

    Но код косячный потому что пхп позволяет обьявлять свойства динамически. То есть даже если поля нет, его можно передать и оно появится. Надо проверять еще
    <?php
    if (! property_exists($this, $k)) throw new \Exception('Нет свойства');
    Ответ написан
    1 комментарий
  • Почему сайт vuejs.org не SPA?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Как бы кто там ни пытался говорить что поисковики с ним дружат - это не так, совсем не так
    Ответ написан
    5 комментариев
  • Хорошо ли хранить serialize в БД?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Лучше сериализуйте в json https://www.php.net/manual/ru/function.json-encode.php
    https://www.postgresql.org/docs/9.4/datatype-json.html

    Некоторые базы данных (почти все) позволяют хранить json внутри специального типа поля и использовать их при запросах.

    С позиции нормализации данных это конечно не очень хорошо, но если в логике БД эти данные не используются, то это безразлично.
    Ответ написан
    2 комментария