[英]How do I run cURL request in the background in PHP?
我正在嘗試使用PHP和cURL擴展構建某種基於Web的下載管理器,但我遇到了一個問題,我怎么能用cURL下載和保存文件而不必讓用戶等待,這意味着他會做請求,它將在后台處理。
現在我不能使用系統調用(exec,system ...等),因為我使用的大多數主機都禁用了這些功能,而另一個問題是PHP腳本的最大執行時間,但我想這個可以更改在.htaccess或使用ini_set或不是嗎?
我已經讀過將connect_timeout設置為1的地方,但是不會終止連接嗎?
一個解決方案是使用cronjobs,在用戶提交他想要下載的文件后,cronjob將檢查數據庫,如果隊列中有文件,它將開始下載它,但我想我想避免使用cron作業,如果可能。
那么回到主要問題,有沒有辦法告訴php腳本在后台運行某些特定功能並將響應傳遞給用戶,而不管該功能的結果如何
謝謝
我認為已經有其他帖子在探索這些選項。 鑒於您的限制,我看到另外兩種方法:
從下面的php或使用javascript調用ajax進行簡單的curl請求
$curl = curl_init('http://mutant-tech.com/execjob.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($curl); echo $result; // should get - Closing Curl Request
在啟動時使用頭關閉http連接,稍后編寫php代碼執行
// File - execjob.php START ob_end_clean(); header("Connection: close"); ignore_user_abort(); ob_start(); echo ('Closing Curl Request'); $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); // BELOW YOUR BACKGROUND JOB/CODE
如果您需要更多的執行時間/內存,請相應地使用功能
我的經驗是正確包裝你的命令。
$time = microtime(true);
$command = '/usr/bin/curl -H \'Content-Type: application/json\' -d \'' . $curlPost . '\' --url \'' . $wholeUrl . '\' >> /dev/shm/request.log 2> /dev/null &';
exec($command);
echo (microtime(true) - $time) * 1000 . ' ms';
以上對我來說效果很好,只需要3ms,但是下面不起作用,需要1500ms。
$time = microtime(true);
$command = '/usr/bin/curl -H \'Content-Type: application/json\' -d \'' . $curlPost . '\' --url ' . $wholeUrl;
exec($command . ' >> /dev/shm/request.log 2> /dev/null &');
echo (microtime(true) - $time) * 1000 . ' ms';
總的來說,在命令末尾添加“&> / dev / null&”可以使它在后台運行,並且不會掛起php和apache進程,只需記住正確地執行命令即可。
function background_curl_request($url, $method, $post_parameters){
if (is_array($post_parameters)){
$params = "";
foreach ($post_parameters as $key=>$value){
$params .= $key."=".urlencode($value).'&';
}
$params = rtrim($params, "&");
} else {
$params = $post_parameters;
}
$command = "/usr/bin/curl -X '".$method."' -d '".$params."' --url '".$url."' >> /dev/shm/request.log 2> /dev/null &";
exec($command);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.