Я использую текущий код, чтобы попытаться использовать cURL для асинхронного выполнения двух сценариев. Каждый сценарий размещается в отдельном домене и занимает ~ 30 секунд. Я хочу, чтобы они запускались в фоновом режиме, чтобы страница продолжала загружаться, но зависла до завершения. Я совершенно не прав, думая о том, как работает cURL? Или я просто сделал что-то не так?
UPDATE:
$.ajax({
type : 'POST',
url : 'ajax.php?mode=process',
data : '$url',
complete: function(data)
{
$('#test'+num).append('Operation successful.');
}
});
Num - это идентификатор div. Они генерируются с помощью кода. Все это работает правильно, за исключением того, что cURL блокирует сервер до тех пор, пока он не закончит обработку файлов.
Код, приведенный ниже, теперь находится на другой странице специально для обработки URL-адресов, переданных из вызова jQuery ajax выше.
<code>$cURLs = array(
"script_url?param1=1¶m2=2",
"script_url?param1=5¶m2=6");
$result = array();
$mh = curl_multi_init();
foreach ($data as $id => $d)
{
$cURLs[$id] = curl_init();
$url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
curl_setopt($cURLs[$id], CURLOPT_URL, $url);
curl_setopt($cURLs[$id], CURLOPT_HEADER, 0);
curl_setopt($cURLs[$id], CURLOPT_RETURNTRANSFER, 1);
if (is_array($d))
{
if (!empty($d['post']))
{
curl_setopt($cURLs[$id], CURLOPT_POST, 1);
curl_setopt($cURLs[$id], CURLOPT_POSTFIELDS, $d['post']);
}
}
if (!empty($options))
curl_setopt_array($cURLs[$id], $options);
curl_multi_add_handle($mh, $cURLs[$id]);
}
$running = null;
do
{
curl_multi_exec($mh, $running);
} while($running > 0);
foreach($cURLs as $id => $c)
{
$result[$id] = curl_multi_getcontent($c);
curl_multi_remove_handle($mh, $c);
}
curl_multi_close($mh);
echo "<pre>" . print_r($result, 1) . "
";