Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Programming » PHP » Script Download file sử dụng cURL PHP

Script Download file sử dụng cURL PHP

Thứ Bảy, 27/09/2014 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Tải dữ liệu động là một tính năng hay một thư viện được tích hợp vào hầu hết các ngôn ngữ lập trình. Ví dụ Trong lập trình website bạn có thể tải dữ liệu binary file và file chứa nội dung văn bản mà không cần load trang với jquery ajax hay sử dụng thư viện CURL cho ngôn ngữ lập trình web động PHP, và các ngôn ngữ khác.

CURL có khá nhiều tính năng không chỉ giúp chúng ta lấy nội dung của mọi website, không sợ vấn đề cross-domain như javascript XHR. ví dụ về ứng dụng đơn giản của CURL là lấy thông tin của website khác đưa về làm nội dung trên website của bạn, xem đoạn code mẫu hướng dẫn chèn tỷ giá vào website.

Bạn có thể làm mọi thứ với CURL, chỉ bằng cách thiết lập tham số thích hợp để thực hiện các công việc với mục đích sử dụng khác nhau. Và bài hôm nay mình sẽ trình bầy cách download file thông qua CURL PHP.
Có 2 tham số CURL quan trọng CURLOPT_BUFFERSIZE và CURLOPT_FILE, thuộc tính này khai báo kích thước của file cần lấy nội dung và nguồn file.

$ch = curl_init();
$url="http://upload.wikimedia.org/wikipedia/commons/c/cf/Frog_on_river_4000x3000_26-09-2010_11-01am_2mb.jpg";
$filename = 'file1.jpg'; 
$file = fopen($filename,'w');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_BUFFERSIZE,64000);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);	//not cache
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FILE, $file);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progress1');
curl_setopt($ch, CURLOPT_NOPROGRESS, false); // needed to make progress function work
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$html = curl_exec($ch);
curl_close($ch);

Ở phiên bản php 5.3 trở đi hỗ trợ sự kiện progress để thông báo quá trình tải dữ liệu file, số bytes đã tải xong và tổng dung lượng file do đó bạn dễ dàng tính ra phần trăm còn lại là bao nhiêu. Khai báo hàm liên kết vào tham số CURLOPT_PROGRESSFUNCTION có nội dung như sau.

function progress1($download_size, $downloaded, $upload_size, $uploaded)
{
    if($download_size > 0){
		$percent = intval($downloaded / $download_size  * 100)."%";
        echo '<script>document.getElementById("progress").innerHTML="<div style=\"width:'.$percent.';background-color:#ddd;\">&nbsp;'.$percent.'</div>";</script>';
     }
    ob_flush();
    flush();
    // sleep(3); // just to see effect
}

Thêm chuỗi hiển thị thông báo vào đầu file trước khi sử lý URL trên trình duyệt, những dòng chữ bạn thêm vào file sẽ hiển thị bằng cách flush vào sau nội dung chuỗi.

echo "<pre>";
echo "Loading ...";
ob_flush();
flush();

......thêm các đoạn code ở trên vào đây-----

ob_flush();
flush();

Mình đã chạy thử và kết quả hoạt động đúng như mong muốn. Chú ý: thuộc tính CURLOPT_BUFFERSIZE là dung lượng tối đa có thể tải file, nếu CURL không hoạt động bạn nên điều chỉnh lại giá trị thuộc tính này cho phù hợp với file đã thiết lập bởi CURLOPT_URL.
Demo:
curl-progressbar

Download source code.

Hãy cho mình biết suy nghĩ của bạn trong phần bình luận bên dưới bài viết này. Hãy theo dõi kênh chia sẻ kiến thức WordPress của Hoangweb trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: PHP Tìm kiếm: curl

Comments

  1. Caillou says

    Thứ Ba, 24/07/2018 at 1:22 chiều

    Bạn ơi có thể share lại file này không? Mình tải không được 🙂

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.