Задать вопрос
Ответы пользователя по тегу PHP
  • Стоит ли переносить с крона в очереди?

    stanislav-belichenko
    @stanislav-belichenko
    Backend PHP Developer
    Про нагрузку:

    Нет, ничего критического не произойдет, если только вы не работаете с серверами из 80-х. Конкретно кролик держит огромные нагрузки отлично.

    Про целесообразность:

    Во-первых, выше верно пишут, пока работает - не трогай.
    Во-вторых, опять же выше верно пишут, что на такое количество задач затея сомнительна.
    В-третьих, очереди - это обычно нечто событийное. К тебе пришел клиент на сайт, загрузил свое фото, ты родил сообщение в очередь на бекенде сайта, что фото должно быть проверено саппортами, это событие получила CRM-система саппортов и они выполнили какие-то действия. А в описанной в вопросе модели кто будет рождать такие события? Некий таймер? Он же опять скорее всего на кроне будет, смысл городить огород тогда с кроликом? Если не на таймере, а на каком-то событии, возникающим в приложении в нужный момент времени - ну ок. Но скорее всего, будет все-таки иначе.
    Ответ написан
    3 комментария
  • Selenium: Как узнать, не открыто ли уже окно браузера в конкретном профиле кем-то другим?

    stanislav-belichenko
    @stanislav-belichenko Автор вопроса
    Backend PHP Developer
    По факту, никак. Решилось все балансировкой запросов, когда мы не посылаем новый запрос, пока не уверены (почти, за счет избыточного таймаута), что предыдущий не отработал и окно не закрылось, как и процесс не завершился.

    При этом тут стоит понимать, что если мы посылаем к Селениуму запрос например для перехода на некий url (webdriver->get(url)), то Селениум ждет, когда это реально случится, и потом только нам возвращается управление (конечно, можно и асинхронно это попытаться сделать, но php-либа от ФБ это делает именно так). А вот когда мы посылаем запрос драйверу на закрытие (не помню как точно уже звучит, типа close() или quit(), наверное), то никакого ожидания мы не получаем, запрос улетает к вебдрайверу, и тот посылает запрос на закрытие браузеру, и соответственно при большой нагрузке на машину у нас этот запрос уже якобы отработал, но в реальности еще только закрывается окно браузера, а потом и тушатся его процесс(ы). И этот временной лаг может достигать десятков секунд.
    Ответ написан
    Комментировать
  • Php - то отправляет почту, то нет. Почему так?

    stanislav-belichenko
    @stanislav-belichenko
    Backend PHP Developer
    Скорее всего, если вы получаете его на ящик на Gmail.com, там его режут спам-фильтры, считающие такие письма спамом. Выхода есть два:

    1. Прикрутить авторизацию к отправке почты (используйте библиотеку PHPMailer - там все предельно просто.
    2. Прикрутить к домену запись spf, чтобы отправленная с него (с его ip адреса) почта определялась не как спам.

    Второй вариант менее надежный, все-таки лучше всего подойдет авторизация. Ну и для начала можете проверить, отправляются ли подобные письма на ящики, созданные на каком-либо домене напрямую, без использования сторонних email-серверов. Но это если у вас есть такая возможность.
    Ответ написан
    Комментировать
  • Как подключить файл в PHP?

    stanislav-belichenko
    @stanislav-belichenko
    Backend PHP Developer
    Есть несколько моментов, которые нужно учесть при подключении файлов.

    • В целом есть два варианта их подключения, через require и через include. Оба сделают одно и то же, но второй вариант выдаст warning при отсутствии файла, а первый - fatal error.
    • Оба варианта имеют свои подварианты, а именно require_once и include_once - в случае использования такой записи файлы включаются в код единожды, и если вы где-то два раза попытаетесь подключить их, подключение произойдет только один раз.
    • Путь, который по умолчанию используется в обоих вариантах, зависит от настроек среды, в каких-то случаях он может быть не задан, и тогда путь считается от файла, в котором вы подключаете другие файлы, а в каком-то будет установлена переменная конфигурации include_path и вся ваша логика нарушится. В связи с этим настоятельно рекомендуют подключать файлы с помощью такой конструкции: include __DIR__ . '/dir/file';, где __DIR__ - "магическая" переменная, содержащая абсолютный путь до папки вашего срипта.
    • Слеши в пути отличаются в разных системах, получить нужный вам можно через предопределенную константу DIRECTORY_SEPARATOR.
    • Если вы подключаете конкретно конфиг вашей системы, вы можете сделать вот так в скрипте: $config = include __DIR__ . '/config.php';, а в конфиге сделать что-то вроде return = ['pass'=>'...', login=>'...'], после чего в основном скрипте получать переменные через что-то вроде config['pass'] - в целом, работать все будет и без этого, но зато так повысится читаемость вашего кода.
    Ответ написан
    Комментировать