CURL hết thời gian chờ PHP

CURL hết thời gian chờ PHP

Nếu muốn đặt thời gian chờ tính bằng mili giây với PHP curl_setopt, bạn phải biên dịch cURL mới và cài đặt lại PHP

http. //php. net/thủ công/vi/chức năng. curl-setopt. php
CURLOPT_CONNECTTIMEOUT_MS
Số mili giây phải đợ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, thì phần kết nối đó sẽ vẫn sử dụng độ phân giải toàn giây cho thời gian chờ với thời gian chờ tối thiểu được phép là một giây
Đã thêm vào cURL 7. 16. 2. Có sẵn kể từ PHP 5. 2. 3
Môi trường. CentOS6 với PHP5. 6

Cài đặt cURL
# cd /var/tmp
# git clone https://github.com/bagder/curl.git
# cd curl
# ./buildconf
# ./configure --enable-threaded-resolver
# make 
# make install
# ./src/curl -V
curl 7.45.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.45.0-DEV OpenSSL/1.0.1e zlib/1.2.3 libidn/1.18
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets
Đặt ldconfig
# echo '/usr/local/lib' > /etc/ld.so.conf.d/custom-libs.conf
# ldconfig
# ldconfig -p | grep curl
 libcurl.so.4 (libc6,x86-64) => /usr/local/lib/libcurl.so.4
 libcurl.so.4 (libc6,x86-64) => /usr/lib64/libcurl.so.4
 libcurl.so (libc6,x86-64) => /usr/local/lib/libcurl.so
 libcurl.so (libc6,x86-64) => /usr/lib64/libcurl.so
Phiên bản PHP
# yum update --skip-broken --disablerepo=base,updates --enablerepo=remi --enablerepo=remi-php56 php
Cài đặt lại php-common
# yum reinstall --skip-broken --disablerepo=base,updates --enablerepo=remi --enablerepo=remi-php56 php-common
# php -i | grep cURL
cURL support => enabled
cURL Information => 7.45.0-DEV
Tạo kịch bản thử nghiệm
# vim curl_test.php
<?php

$url = 'http://www.yahoo.co.jp/';
echo $url . "\n";

$option = array(
    CURLOPT_CONNECTTIMEOUT_MS => 500,
    CURLOPT_TIMEOUT           => 500,
    CURLOPT_HEADER            => FALSE,
    CURLOPT_FAILONERROR       => TRUE,
    CURLOPT_RETURNTRANSFER    => TRUE
);

if (!$ch = curl_init()) {
    error_log('[error] curl_init');
    exit;
}

try {
    if (!curl_setopt_array($ch, $option)) {
        throw new Exception('[error] curl_setopt');
    }

    if (!$result = curl_exec($ch)) {
        throw new Exception('[error] curl_exec');
    }

    curl_close($ch);

    echo $result;
} catch (Exception $e) {
    curl_close($ch);
    error_log($e->getMessage());
}
Chạy tập lệnh thử nghiệm.
# php curl_test.php

Bức ảnh đẹp nhất từ Francisco Gonzalez Snow Curl


Thời gian chờ của cURL kiểm soát số giây hoặc mili giây mà một kết nối sẽ sẵn sàng để truyền dữ liệu. Thời gian chờ mặc định cho cURL là 0, điều đó có nghĩa là cURL sẽ không đóng kết nối trong khi truyền dữ liệu. Ở đây, bạn nên nhớ rằng mặc dù thời gian chờ mặc định là 0 nhưng PHP cũng áp đặt giới hạn thời gian cho việc thực thi tập lệnh, mặc định là 30 giây. Vì vậy, nếu quá trình truyền cURL mất hơn 30 giây, PHP sẽ buộc đóng hoàn toàn quá trình thực thi tập lệnh. Nếu cURL cần thêm thời gian để hoàn thành tác vụ, hãy cân nhắc đặt set_time_limit(0) ở đầu tập lệnh PHP

Hết thời gian cURL PHP

//set_time_limit(0); //If cURL requried more that 30 seconds, 0 mean no Timeout Limit. Limit is set in seconds.
$ch= curl_init();
curl_setopt($ch, CURLOPT_URL,"https://www.tutorialjinni.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);// TIMEOUT IN SECONDS
//curl_setopt($ch, CURLOPT_TIMEOUT_MS, 30);// TIMEOUT IN MILLISECONDS
$data=curl_exec($ch);
curl_close($ch);
echo $data

Ví dụ về thời gian chờ cURL Shell

curl --connect-timeout 20 "https://www.tutorialjinni.com"

Tôi sẽ đề nghị cố gắng cô lập vấn đề. Ví dụ: giả sử rằng máy chủ bạn đang cố truy cập nằm trên GCE và ứng dụng PHP của bạn nằm ngoài GCP, Bạn có thể chạy song song ứng dụng trên GCE và so sánh kết quả. Bằng cách đó, bạn loại bỏ các phần tử mạng bên ngoài Google

Bạn cũng có thể muốn kiểm tra để đảm bảo rằng bạn không dùng hết tài nguyên trong máy nơi ứng dụng PHP đang chạy  hoặc máy đang phục vụ các yêu cầu

Cuối cùng, để loại bỏ rằng đó không phải là vấn đề liên quan đến cấu hình PHP của bạn, bạn cũng có thể thử đăng nhập và cuộn qua tập lệnh Linux. Sau đó, bạn có thể so sánh kết quả. Nhân tiện, bạn có thể tìm thấy ở đây một cuộc thảo luận về thời gian chờ cuộn tròn PHP

Đây là một hướng dẫn ngắn về cách sử dụng các tùy chọn thời gian chờ cURL trong PHP. Trong một số trường hợp nhất định, bạn có thể muốn chỉ định thời gian chờ để ngăn yêu cầu HTTP của mình mất quá nhiều thời gian

Có hai tùy chọn thời gian chờ cURL mà bạn cần biết. Các tùy chọn này hơi khác nhau, vì vậy tôi sẽ giải thích chúng ngay bây giờ

  • CURLOPT_CONNECTTIMEOUT. Số giây tối đa mà cURL sẽ dành để cố gắng kết nối với một URL nhất định
  • CURLOPT_TIMEOUT. Số giây tối đa cần thiết để thực hiện tất cả các thao tác cURL. tôi. e. Lượng thời gian tối đa mà yêu cầu sẽ mất

Hãy xem đoạn mã sau

________số 8_______

Trong đoạn mã trên, tôi đặt CURLOPT_CONNECTTIMEOUT thành 10 giây và tôi đặt CURLOPT_TIMEOUT thành 30 giây. Điều này có nghĩa là

  • cURL chỉ nên dành 10 giây để cố gắng kết nối với URL đã cho. Nếu nó không thể kết nối sau 10 giây, thời gian chờ sẽ xảy ra
  • Nếu nó kết nối thành công, nó chỉ nên dành tối đa 30 giây để thực hiện yêu cầu. Nói cách khác, nếu chúng tôi kết nối, nhưng máy chủ mất quá nhiều thời gian để phản hồi đầy đủ, thì cURL sẽ gọi nó là một ngày và ngừng chờ đợi

Kiểm tra thời gian chờ của cURL

Để kiểm tra điều này, tôi đã thêm một số xử lý lỗi cURL cơ bản vào cuối tập lệnh của mình để mọi lỗi cURL sẽ dẫn đến một ngoại lệ bị ném. URL cục bộ mà tôi đang gửi yêu cầu HTTP để sử dụng chức năng ngủ của PHP để tạo độ trễ 40 giây (cao hơn giới hạn 30 giây mà chúng tôi đã đặt với CURLOPT_TIMEOUT). Kết quả là, ngoại lệ sau đã được đưa ra

Ngoại lệ chưa được phát hiện 'Ngoại lệ' với thông báo 'Thao tác đã hết thời gian chờ sau 30015 mili giây với 0 byte nhận được'

Làm cách nào để đặt thời gian chờ trong PHP cURL?

Để đặt thời gian chờ cho lệnh Curl, bạn có thể sử dụng tham số --connect-timeout để đặt thời gian tối đa tính bằng giây mà bạn cho phép Curl kết nối với máy chủ hoặc tham số --max-time (hoặc -m) cho

Làm cách nào để tăng thời gian thực hiện cURL trong PHP?

Để tăng Thời gian chờ của cURL, chúng tôi khuyên bạn nên thay đổi giá trị default_socket_timeout của bạn trong php. ini thành “60” trở lên . Nếu bạn không quen thuộc với vị trí của php của bạn. ini hoặc không thoải mái với việc tự chỉnh sửa tệp, hầu hết các công ty lưu trữ sẽ thực hiện thay đổi này cho bạn.

Curl_setopt trong PHP là gì?

Hàm curl_setopt() sẽ đặt tùy chọn cho phiên CURL được xác định bởi tham số ch . Tham số tùy chọn là tùy chọn bạn muốn đặt và giá trị là giá trị của tùy chọn được cung cấp bởi tùy chọn. Giá trị phải dài đối với các tùy chọn sau (được chỉ định trong tham số tùy chọn).

Làm cách nào để đặt thời gian chờ trong lệnh cURL?

Đặt thời gian chờ cho yêu cầu cuộn tròn. Bạn có thể đặt thời gian chờ kết nối với máy chủ bằng tùy chọn dòng lệnh --connect-timeout và thời gian chờ cho tổng thời gian yêu cầu bằng - . Thời gian chờ được chỉ định bằng giây.