PHP CURL 若 TIMEOUT 掉, 就直接回傳空, 程式繼續往下跑, 但是要特別追蹤 Timeout 的狀況, 於是要於 Timeout 時, 紀錄當下的資料, 要如何偵測是 CURL Timeout 呢?
PHP 如何抓 CURL TIMEOUT 的狀態值
PHP 要抓 CURL Timeout 可以於 error message 取得, 詳見: PHP: curl_errno
由 CURL 的狀態清單: libcurl - Error Codes 可以得知, 28 是 Timeout 得回傳值.(下述摘錄自 CURL Error Codes)
CURLE_OPERATION_TIMEDOUT (28)
Operation timeout. The specified time-out period was reached according to the conditions.
範例
- <?php
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_TIMEOUT, 1); // CURLOPT_TIMEOUT_MS
- $response = curl_exec($ch);
- if (curl_errno($ch) == 28) {
- // Log CURL Timeout message
- }
- curl_close($ch);
- ?>
CURL 在 PHP 裡 timeout,怎麼告知遠端 API Server 結束這段 tcp handshake。好像沒機制做的到喔?
應該是沒辦法,這是遠端 API Server 要自己解決的~ 🙂