2011-11-02 38 views
8

Mã này luôn thất bại (ví dụ, $result là Boolean false):thời gian chờ curl dưới 1000ms luôn thất bại?

 $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $path); 
    curl_setopt($ch, CURLOPT_HEADER, TRUE); 
    curl_setopt($ch, CURLOPT_NOBODY, TRUE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $curl_version = curl_version(); 

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 999); 

    $result = curl_exec($ch); 
    curl_close($ch); 

Mã này luôn thành công (ví dụ, $result là một chuỗi chứa tiêu đề):

 $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $path); 
    curl_setopt($ch, CURLOPT_HEADER, TRUE); 
    curl_setopt($ch, CURLOPT_NOBODY, TRUE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $curl_version = curl_version(); 

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000); 

    $result = curl_exec($ch); 
    curl_close($ch); 

Sự khác biệt duy nhất là Tôi đã thay đổi thời gian chờ từ 999ms thành 1000ms.

Điều này phải là một lỗi trong curl hoặc một số loại tối thiểu trong tài liệu về thời gian chờ kết nối mà tôi đã bỏ lỡ. Đó là nó? Tiền của tôi là sau này.

Trả lời

12

từ: http://www.php.net/manual/en/function.curl-setopt.php

Số mili giây để chờ đợi trong khi cố gắng kết nối. Sử dụng 0 để chờ vô thời hạn. Nếu libcurl được xây dựng để sử dụng trình phân giải tên hệ thống tiêu chuẩn, phần đó của kết nối sẽ vẫn sử dụng độ phân giải full-second cho timeout với thời gian chờ tối thiểu cho phép một giây.

+0

Chà, sao tôi lại nhớ điều đó ?! – Trott

+0

Ok, tôi thấy điều này trong tài liệu nhưng tôi thực sự không hiểu ý nghĩa của nó và cách tôi có thể làm việc này với giá trị nhỏ hơn 1000. Bất kỳ trợ giúp nào bạn có thể cho tôi sẽ được đánh giá cao, cảm ơn! –

+0

Bạn phải biên dịch libcurl cho chính mình, bằng cách sử dụng '--enable-threaded-resolver' và sau đó biên dịch phần mở rộng curl cho php dựa vào nó. –

Các vấn đề liên quan