[PHP] Hướng dẫn lưu ảnh từ đường dẫn URL trong PHP
Nhiều lúc bạn rất muốn tải hình ảnh từ bất kỳ đường dẫn của Website nào, một cách rất đơn giản đó là click chuột phải và ấn lưu hình ảnh. Nhưng trong lập trình bạn muốn tải ảnh từ url thì bạn phải viết chương trình để máy tính có thể hiểu được để tải ảnh cho bạn. Vì vậy trong bài viết này vncoder.vn sẽ hướng dẫn cách lưu ảnh từ đường dẫn URL trong PHP.
Có 2 cách để bạn có thể lấy ảnh từ website khác:
- Sử dụng cách xử lý tập tin cơ bản.
- Sử dụng một thư viện HTTP gọi là cURL.
Cả 2 cách để lưu ảnh trong php này đều có ưu điểm và nhược điểm riêng, giờ chúng ta đi vào từng cách dùng cụ thể nhé.
1. Sử dụng cách Xử lý tệp cơ bản
Đây là cách cơ bản và dễ nhất để hoàn thành nhiệm vụ. Cũng giống như bất kỳ tập tin nào khác, hãy bắt đầu với việc tạo một tập tin trống và mở nó trong chế độ ghi (write). Sau đó, tìm lấy nội dung từ URL nguồn và dán nó vào tệp này. Chỉ đơn giản vậy thôi.
Từ kịch bản trên ta có các bước cụ thể như sau:
- Khai báo hai biến có tên là $url và $img , tương ứng với URL nguồn và tệp đích.
- Sử dụng hàm file_put_contents() để viết một chuỗi vào một tệp có hai đối số. Một là tên tệp (hoặc đường dẫn) và hai là nội dung của tệp đó.
- Sử dụng hàm file_get_contents() để đọc tệp thành một chuỗi.
Ví dụ:
<?php
$url =
'https://vzn.vn/wp-content/uploads/2019/04/hinhnendangnhap-2.png';
$imgpath = '/path/to/save/images/new_name.png';
// Function to write image into file
file_put_contents($imgpath, file_get_contents($url));
echo "Lưu ảnh thành công!"
?>
Lưu ý: Code trên lưu hình ảnh vào máy chủ với tên new_name.png đã đặt ở trên.
Nhược điểm: Bây giờ vấn đề duy nhất với phương thức này là nó yêu cầu cấu hình allow_url_fopen được bật và được đặt thành 1 theo mặc định. Nhưng đôi khi, các yêu cầu của dự án không cho phép có tùy chọn này. Điều này có thể là do một số biện pháp phòng ngừa an ninh hoặc chỉ là một nguyên tắc thiết kế. Trong những trường hợp như vậy chúng ta có một phương pháp khác để lưu hình ảnh.
2. Sử dụng thư viện HTTP, cURL
Nói đúng ra, cURL không chỉ là thư viện HTTP. Nó cũng có một số giao thức truyền dữ liệu khác. Vì hình ảnh của chúng ta nằm trên máy chủ HTTP, chúng ta sẽ giới hạn bản nghiên cứu một phần nhỏ của thư viện này.
cURL cho phép thực hiện các yêu cầu HTTP trong PHP. Bắt đầu bằng cách khởi tạo một thể hiện của nó và thiết lập một số tùy chọn cần thiết cho yêu cầu, bao gồm cả URL. Sau đó thực hiện truy vấn này trả về nội dung của tệp. Sau đó, phần còn lại của thủ tục là như nhau. Ngay sau khi chúng ta nhận được dữ liệu, hãy đặt nó vào một tệp và lưu nó. (Giống cách bên trên).
Các bước cụ thể
- Trong tập lệnh này, chúng ta sẽ viết một hàm file_get_contents_curl để sao chép hành vi của file_get_contents từ kỹ thuật được đề cập trước đó.
- Bên trong hàm này, chúng ta sẽ khởi tạo một thể hiện của cURL bằng cách sử dụng hàm curl_init để sử dụng nó trong việc tìm nạp dữ liệu.
- Sau đó, một số tùy chọn cần được đặt bằng curl_setopt để ví dụ cụ thể này có thể hoạt động. Hàm này có ba đối số
- Một ví dụ của cURL
- Tùy chọn tương ứng cần được đặt
- Và giá trị mà tùy chọn được đặt
- Trong ví dụ này, các tùy chọn sau được đặt:
- CURLOPT_HEADER, nghĩa là đảm bảo bạn có cần nhận các tiêu đề hay không;
- CURLOPT_RETURNTRANSFER chuyển dữ liệu dưới dạng giá trị trả về của hàm curl_exec thay vì xuất trực tiếp.
- Đây là một tùy chọn khác CURLOPT_URL đặt URL cho yêu cầu.
- Sau đó, chúng tôi lấy dữ liệu từ curl_exec và trả về từ hàm cha.
- Dữ liệu này sau đó được ghi vào tệp trên máy của bạn bằng file_put_contents .
Ví dụ cụ thể:
<?php
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$data = file_get_contents_curl(
'https://vzn.vn/wp-content/uploads/2019/04/hinhnendangnhap-2.png');
$fp = '/path/to/save/images/new_name.png';
file_put_contents( $fp, $data );
// Function to write image into file
file_put_contents( $fp, $data );
echo "Lưu ảnh thành công!"
?>
Phương pháp này cung cấp một chút linh hoạt trong khi tìm nạp nội dung từ internet. Như đã đề cập trước đó, nó không chỉ giới hạn ở HTTP mà còn có thể được sử dụng trong nhiều trường hợp khác. Nó cho phép cấu hình chuyển đổi theo bất cứ cách nào bạn muốn. Ví dụ: file_get_contents chỉ sử dụng một yêu cầu GET đơn giản để tìm nạp dữ liệu, nhưng với cURL, có thể sử dụng GET, POST, PUT và các phương thức khác.
3. Kết luận
Trên đây là 2 cách lưu ảnh từ đường dẫn URL trong PHP mà vncoder.vn đã hướng dẫn rất chi tiết cho các bạn. Hy vọng với bài viết này sẽ giúp ích cho các bạn. Chúc bạn thành công!.
4. Xem thêm
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!