Задать вопрос
@AlexandrMa

Как вызвать curl и не ждать ответ?

//Скрипт запуска 1.php
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_URL,  '2.php');
//curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_exec($ch);
curl_close($ch);
echo '1-ok';

Скрипт вызываемый 2.php
sleep(10);
echo '2-ok';

Вызываемый скрипт 2.php может выполняться долго, а мне надо просто отправить запрос и сразу получить ответ 1-ok Но я скрипт 1 все равно выполняется 10 секунд.
  • Вопрос задан
  • 172 просмотра
Подписаться 1 Простой 7 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Stepik
    Язык программирования PHP
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 2
toxa82
@toxa82
Зачем вам curl, если вы хотите вызвать скрипт рядом, попробуйте через exec('/usr/bin/php 2.php > /dev/null 2>&1 &');
, так запускает скрипт и уходит в фон.
Ответ написан
@Vitsliputsli
Типичное решение, как уже описал Adamos, это запуск отдельных процессов через cron (или демоном, если работы много или нужна быстрая реакция), которые разбирают очередь.
Почему не через exec, потому что это структуризация кода, разделение и контроль отдельных процессов, да еще и хороший контроль нагрузки.
Есть еще варианты со своими особенностями:
1) если ответ не нужен (но, только если это действительно так!), то используйте UDP;
2) если это fpm, то отправляйте сперва ответ пользователю через fpm, а потом уже шлите запрос (здесь можно будет проконтролировать ответ и сообщить об ошибке в лог). Т.е. пользователь получит ответ, а ваш запрос отработает после в фоне. Но тогда, вместо отдельных воркеров мы все скидываем на воркеры fpm, так что это тоже надо учитывать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы