在我的代碼中,我使用curl_exec
向另一個頁面發送請求。我不需要腳本其餘部分的curl_exec
結果,我不希望它在curl_exec
請求完成並收到響應之前阻止。分叉一部分的PHP代碼
任何想法,如果我可以叉腳本的特定部分?
或其他任何設計思路......?
在我的代碼中,我使用curl_exec
向另一個頁面發送請求。我不需要腳本其餘部分的curl_exec
結果,我不希望它在curl_exec
請求完成並收到響應之前阻止。分叉一部分的PHP代碼
任何想法,如果我可以叉腳本的特定部分?
或其他任何設計思路......?
這裏有一些想法:
或者:
看看curl-multi-exec,可能是你需要的東西:
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);
}
來自:T叉子和線程,但你可以通過設置響應超時擺脫響應How to post an asynchronous HTTP request in PHP
隨着CURL documentation,您可以使用CURLOPT_TIMEOUT_MS
自PHP 5.2.3和捲曲7.16 0.2。
您是否需要cURL請求的回覆?
首先,你需要fork的pcntl函數通常是一個壞主意。
一種方法是將cURL代碼放置在一個單獨的腳本和exec()腳本中,以便它在後臺運行。
$command = "php ..../wherever/your/kohana/cli/controller/is.php";
exec('php /path/to/curlscript.php > /dev/null &');
1.4.3到/ dev/null的&允許腳本在後臺繼續運行。
或者,也許更好的解決方案是實現隊列系統,如Gearman或RabbitMQ。
聽起來像是個好主意。我的問題是,當我不使用&時從命令行執行腳本時,腳本工作正常。但是,當添加失敗。有任何想法嗎? – Henrik
'&'告訴終端不要等待迴應。至於爲什麼它不工作......很好的問題。您是否有權訪問終端,以便您可以在PHP之外進行嘗試?此外,如果這是要經常執行的事情,例如由於面向公衆的頁面,在這種情況下實現隊列系統會更好。 – simshaun
是的,我從控制檯做到了,我也遇到了同樣的問題。我用「php test.php> log.txt」實現了一個簡單的腳本,它工作正常。該腳本只做了一個回聲「你好」;。當我添加&我沒有得到任何log.txt。奇怪的indeeed。 – Henrik
這仍然會阻止至少一秒 –