01/10/2018, 17:31

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 ...

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


0