Форкинг части php кода - PullRequest
       5

Форкинг части php кода

1 голос
/ 01 декабря 2011

В своем коде я отправляю запрос на другую страницу, используя curl_exec.Мне не нужен результат curl_exec для остальной части сценария, и я не хочу, чтобы он блокировался до тех пор, пока запрос curl_exec не будет выполнен и не получит ответ.

Любые идеи, если я могу получить ответвлениеконкретная часть сценария?

или любые другие идеи дизайна ...?

Ответы [ 4 ]

2 голосов
/ 01 декабря 2011

Вот несколько идей:

  • Используйте curl_multi и закройте curl в самом конце запроса.Вы могли бы даже сделать это «после выключения»
  • Использовать рабочие сценарии, например, «gearman»

Или:

  • Вы можете открывать сокеты вручнуюи обрабатывать вещи асинхронно, используя расширение libevent
1 голос
/ 01 декабря 2011

Вам нужны ответы на запросы cURL?

Во-первых, функции pcntl, которые вам нужно было бы разветвить, вообще плохая идея.

Один из методов - поместить код cURL в отдельный скрипт и выполнить exec () этого скрипта, чтобы он работал в фоновом режиме.

$command = "php ..../wherever/your/kohana/cli/controller/is.php";
exec('php /path/to/curlscript.php > /dev/null &');

Вывод в / dev / null & позволяет сценарию продолжать работу в фоновом режиме.

В качестве альтернативы и, возможно, более удачного решения, было бы внедрение системы очередей, такой как Gearman или RabbitMQ.

0 голосов
/ 01 декабря 2011

PHP не поддерживает вилки и потоки, но вы можете избавиться от ответа, установив время ожидания ответа:

function curl_post_async($url, $params)
{
  foreach ($params as $key => &$val) {
    if (is_array($val)) $val = implode(',', $val);
      $post_params[] = $key.'='.urlencode($val);
  }
  $post_string = implode('&', $post_params);

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_USERAGENT, 'curl');
  curl_setopt($ch, CURLOPT_TIMEOUT, 1);
  $result = curl_exec($ch);
  curl_close($ch);
}

Получено от: Как отправить асинхронный HTTP-запрос в PHP

В качестве документации CURL вы можете использовать CURLOPT_TIMEOUT_MS начиная с PHP 5.2.3 и CURL 7.16.2.

0 голосов
/ 01 декабря 2011

Взгляните на curl-multi-exec , может быть то, что вам нужно:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...