Sử dụng curl download hình ảnh từ remote server và hiển thị ngay trên site của mình

Mình giả sử các bạn muốn lấy 1 tấm hình tại site của Góc Kinh Nghiệm (ví dụ tấm này http://gockinhnghiem.com/wp-content/uploads/global-cofiguration.gif) để hiển thị lên site các bạn. Dĩ nhiên các bạn có thể dùng trực tiếp link trên nhưng ở đây mình muốn mô tả cách dùng CURL để đạt cùng một mục đích.

1. Dùng CURL để lấy hình từ remote server

$url = 'http://gockinhnghiem.com/wp-content/uploads/global-cofiguration.gif';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$str_binary = curl_exec($ch);
echo $str_binary;

Ok! Dữ liệu chúng ta lấy về được cất vào biến $str_binary. Đến đây bạn đã có được một đóng bùi nhùi dữ liệu được in ra màn hình như hình bên dưới:

2. Đẩy dữ liệu về client
Sau khi chúng ta có đống bùi nhùi dữ liệu, chúng ta cần tiến hành đẩy đống dữ liệu này về cho client như sau:

 $url = 'http://gockinhnghiem.com/wp-content/uploads/global-cofiguration.gif';
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HTTPGET, 1);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
 $str_binary = curl_exec($ch);
 $info_arr = curl_getinfo($ch);

 header("Pragma: public"); // required
 header("Expires: 0");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Cache-Control: private",false); // required for certain browsers
 header("Content-Description: File Transfer");
 header('Content-Type:'.$info_arr ['content_type']);
 header('Content-Disposition: attachment; filename="abc.gif"');
 header("Content-Transfer-Encoding: binary");
 header("Content-Length:".$info_arr['download_content_length']);
 ob_clean();
 flush();
 echo $str_binary;

Chúng ta có dòng lệnh thứ 9 $info_arr = curl_getinfo($ch). Dòng lệnh này dùng để lấy về thông tin mà remote server trả về cho chúng ta như là: content type, download content length, url… Và chúng ta cũng cần những thông tin hữu ích này để giúp cho chúng ta đẩy file về phía client

Ok! đến đây chúng ta đã hoàn tất việc lấy hình ảnh từ remote server. Chúng ta lưu đoạn code này vào file php. Góc Kinh Nghiệm sẽ lưu vào file layhinhanh.php

3. Tạo một trang web đơn giản hiển thị hình ảnh lấy được từ CURL
Bây giờ chúng ta tạo một trang php có nội dung như sau:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
       <img src="layhinhanh.php" />
    </body>
</html>

Các bạn chú ý, thuộc tính src của tag img trỏ đến trang layhinhanh.php mà chúng ta đã tạo ở trên. Sau khi chạy trang web các bạn sẽ thấy hình sẽ được hiện lên

Chúc code vui :D


5 comments

      1. À quên! hình như url của cái hình không tồn tại. Nên ở bước đọc sang nhị phân nó trống lóc à. Còn dùng thẻ thử thì cũng không có hình đó. GKN kiểm tra lại xem sao!

        1. Hình có tồn tại. Copy & paste đường dẫn hình lên address bar của trình duyệt sẽ thấy

          Kiểm tra có set đúng giá trị cho CURLOPT_RETURNTRANSFER và CLOPT_BINARYTRANSFER

          1. Uhm! vậy ko biết có phải tại mạng không, vì ví dụ trên thay địa chỉ url của hình khác vào thì chạy ù ù. Còn cái hình có thì chết ngắt. :D

Leave a Reply

Your email address will not be published. Required fields are marked *