[PHP]curlCURLOPT_TIMEOUT_MS小於1秒解決方案
CURLOPT_TIMEOUT 設定cURL允許執行的最長秒數
CURLOPT_TIMEOUT_MS 設定cURL允許執行的最長毫秒數
CURLOPT_CONNECTTIMEOUT 在發起連線前等待的時間,如果設定為0,則無限等待
CURLOPT_CONNECTTIMEOUT_MS 嘗試連線等待的時間,以毫秒為單位。如果設定為0,則無限等待
CURLOPT_TIMEOUT_MS 在cURL 7.16.2中被加入。從PHP 5.2.3起可使用。
所以使用的時候請先檢視libcurl版本 curl –version。
但是這個函式有個bug,如果時間小於1000毫秒也就是1秒的話,會立馬報錯,檢視下面說明
If you want cURL to timeout in less than one second, you can use CURLOPT_TIMEOUT_MS, although there is a bug/"feature" on "Unix-like systems" that causes libcurl to timeout immediately if the value is < 1000 ms with the error "cURL Error (28): Timeout was reached". The explanation for this behavior is:
"If libcurl is built to use the standard system name resolver, that portion of the transfer will still use full-second resolution for timeouts with a minimum timeout allowed of one second."
What this means to PHP developers is "You can use this function without testing it first, because you can`t tell if libcurl is using the standard system name resolver (but you can be pretty sure it is)"
The problem is that on (Li|U)nix, when libcurl uses the standard name resolver, a SIGALRM is raised during name resolution which libcurl thinks is the timeout alarm.
The solution is to disable signals using CURLOPT_NOSIGNAL. Here`s an example script that requests itself causing a 10-second delay so you can test timeouts:
增加 curl_setopt($ch, CURLOPT_NOSIGNAL, 1) 可以解決此問題:
if (!isset($_GET[`foo`])) {
// Client
$ch = curl_init(`http://localhost/timeout.php?foo=bar`);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);
$data = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
curl_close($ch);
if ($curl_errno > 0) {
echo "cURL Error ($curl_errno): $curl_error
";
} else {
echo "Data received: $data
";
}
} else {
// Server
sleep(10);
echo "Done.";
}
相關文章
- 基於mpvue的小程式markdown適配解決方案Vue
- 小程式中富文字解決方案
- 智慧小程式開發解決方案
- 小紅點解決方案思路分析
- mac php環境終極解決方案MacPHP
- 關於xml編碼問題在VB,PHP,JAVA下的解決方案XMLPHPJava
- 微信小程式元件化的解決方案微信小程式元件化
- megalo — 網易考拉小程式解決方案
- megalo -- 網易考拉小程式解決方案
- 朱展:騰訊雲小程式解決方案
- 一個小問題的解決方案
- 微信小程式 unionid 登入解決方案微信小程式
- PHP 併發場景的幾種解決方案PHP
- PHP高併發和大流量的解決方案PHP
- [開源] Min – 小程式自定義元件解決方案元件
- 微信小程式登入方式的修改解決方案微信小程式
- 小程式跨平臺開發解決方案探索
- vue小程式專案 pdf下載解決方案Vue
- [開源] Min - 小程式自定義元件解決方案元件
- AI智慧學生體測小程式解決方案AI
- 基於Vue & SVG 的 icon 解決方案VueSVG
- 基於hudson分散式測試解決方案分散式
- 基於webpack搭建前端工程解決方案探索Web前端
- PHP中關於date("Y-m-d H:i:s")慢8小時的解決PHP
- 關於Allowed memory size of (PHP記憶體溢位)錯誤的可能原因及解決方案PHP記憶體溢位
- 小程式中 icon 顏色自定義解決方案
- 線上藥店小程式開發技術解決方案
- junit測試出現的小問題解決方案
- 解決方案| anyRTC金融音視訊解決方案
- PHP高併發商品秒殺問題的解決方案PHP
- [PHP高可用後端]②③--資料安全解決方案開篇PHP後端
- PHP中GBK和UTF8亂碼解決方案PHP
- 基於RocketMq的分散式事務解決方案MQ分散式
- 關於內外網資料同步解決方案
- 關於不同的MySQL複製解決方案概述MySql
- 關於Support for password authentication 報錯的解決方案
- 關於AppDelegate瘦身的多種解決方案APP
- 關於Mac GitHub訪問不了的解決方案MacGithub