我正在使用當前代碼嘗試使用cURL異步執行兩個腳本。每個腳本都託管在不同的域上,需要大約30秒才能完成。我希望這些在後臺運行,以便頁面可以繼續加載,但它會一直掛起直到完成。我在考慮cURL的工作原理時完全錯了嗎?或者我做錯了什麼?cURL導致頁面掛起
UPDATE:
$.ajax({
type : 'POST',
url : 'ajax.php?mode=process',
data : '$url',
complete: function(data)
{
$('#test'+num).append('Operation successful.');
}
});
貨號是div的ID。它們是通過代碼生成的。所有這些都正常工作,除了cURL鎖定服務器,直到完成處理文件。
下面的代碼現在在另一個頁面上,專門用於處理從上面的jQuery ajax調用傳入的URL。
$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) . "</pre>";
調用捲曲就像調用任何其它功能 - 腳本塊,直到函數返回。大多數功能幾乎是瞬時的,所以你不會注意到。 curl完全依賴於遠程資源的作用(以及它自己的超時參數)。 – 2011-06-14 16:29:59