2011-11-22 61 views
68

Tôi đã viết tác phẩm này mã đơn giản:curl_exec() luôn trả về false

$ch = curl_init(); 

//Set options 
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$website_content = curl_exec ($ch); 

Trong trường hợp của tôi $website_content đến như false. Có ai có thể đề xuất/tư vấn điều gì đó có thể xảy ra không?

+3

Tham khảo ý kiến ​​['curl_error()'] (http://php.net/manual/en/function.curl-error.php) để biết chi tiết lỗi và đăng tại đây, vui lòng. –

+0

@LinusKleen Nếu bạn đăng curl_error() làm câu trả lời tôi sẽ upvote nó vì nó cho phép tôi để xem vấn đề của tôi là gì. –

+0

Chính xác thì vấn đề là gì? Lỗi 'curl_error()' tiết lộ lỗi gì? – showdev

Trả lời

167

Kiểm tra và xử lý lỗi là người bạn của người lập trình. Kiểm tra giá trị trả về của các hàm cURL khởi tạo và thực hiện. curl_error()curl_errno() sẽ chứa thêm thông tin trong trường hợp thất bại:

try { 
    $ch = curl_init(); 

    if (FALSE === $ch) 
     throw new Exception('failed to initialize'); 

    curl_setopt($ch, CURLOPT_URL, 'http://example.com/'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt(/* ... */); 

    $content = curl_exec($ch); 

    if (FALSE === $content) 
     throw new Exception(curl_error($ch), curl_errno($ch)); 

    // ...process $content now 
} catch(Exception $e) { 

    trigger_error(sprintf(
     'Curl failed with error #%d: %s', 
     $e->getCode(), $e->getMessage()), 
     E_USER_ERROR); 

} 
+7

+1: Chụp ảnh đơn giản và thẳng cho phép quay vòng trong PHP khi trả về 'curl_exec' FALSE. - [Chế độ Verlse Curl trong ví dụ PHP] (http://stackoverflow.com/a/9571305/367456) – hakre

+0

vâng. Đã thực sự tìm ra điều này trong thời gian dài trở lại. Cảm ơn câu trả lời mặc dù :) – Adithya

+6

Không sao cả. Có một huy hiệu Revival cho nó :-) Cảm ơn bạn đã chấp nhận. –

0

này xảy ra với tôi ngày hôm qua và trong trường hợp của tôi được vì tôi đang theo một hướng dẫn PDF để phát triển một số mô-đun để giao tiếp với một API và trong khi sao chép liên kết trực tiếp từ hướng dẫn sử dụng, vì một số lý do lẻ, số hyphen từ liên kết được sao chép có mã hóa khác và do đó curl_exec() luôn trả về false vì không thể kết nối với máy chủ.

Nó đã cho tôi một vài giờ để cuối cùng hiểu được diference trong những nhân vật dưới đây:

https://www.e‐example.com/api 
https://www.e-example.com/api 

Mỗi lần tôi cố gắng truy cập vào liên kết trực tiếp từ trình duyệt nó chuyển thành một cái gì đó giống như https://www.xn--eexample-0m3d.com/api.

Nó có thể có vẻ để bạn biết rằng họ đều bình đẳng nhưng nếu bạn kiểm tra mã hóa của hyphenshere bạn sẽ thấy rằng hyphen đầu tiên là một ký tự unicode U+2010 và người kia là một U+002D.

Hy vọng điều này sẽ giúp ai đó.

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