Nếu bạn đang muốn tự tạo một Proxy cho hình ảnh vì một số mục đích như xem ảnh bị chặn, ảnh có SSL cho máy chủ không có SSL, tiết kiệm băng thông… bài viết này sẽ hướng dẫn bạn tự tạo một Proxy đơn giản với PHP.
Để thực hành bài viết này, các bạn cần:
- Cài đặt localhost với XAMPP.
- Kiến thức PHP căn bản.
Đầu tiên, bạn tạo thư mục proxy
trong thư mục htdocs
.
proxy/
├── view.php
Tại tập tin view.php
.
<?php
$url = isset($_GET['url']) ? $_GET['url'] : null;
if (!$url) {
die('Please, inform URL');
}
$imgInfo = getimagesize($url);
if (stripos($imgInfo['mime'], 'image/') === false) {
die('Invalid image file');
}
header('Pragma: public');
header('Cache-Control: max-age=2628000');
header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 2628000));
header("Content-type: " . $imgInfo['mime']);
readfile($url);
?>
Hoặc sử dụng PHP cURL.
<?php
$url = isset($_GET['url']) ? $_GET['url'] : null;
if (!$url) {
die('Please, inform URL');
}
$imgInfo = getimagesize($url);
if (stripos($imgInfo['mime'], 'image/') === false) {
die('Invalid image file');
}
//The cURL stuff...
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$picture = curl_exec($ch);
curl_close($ch);
//Display the image in the browser
header('Pragma: public');
header('Cache-Control: max-age=2628000');
header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 2628000));
header("Content-type: " . $imgInfo['mime']);
echo $picture;
?>
Proxy sẽ tự lấy hình ảnh, tạo cache 30 ngày trên trình duyệt người dùng như một hình ảnh bình thường. Để sử dụng, bạn cần truyền đường dẫn của hình ảnh vào sau localhost/proxy/view.php?url=
, ví dụ: http://localhost/proxy/view.php?url=https://i.imgur.com/waLFYwo.jpg
.
Để dùng cho website, bạn có thể tải thư mục vừa tạo lên máy chủ của bạn, sử dụng tương tự như ví dụ. Để tăng tốc độ tải ảnh và tiết kiệm băng thông hơn, các bạn có thể sử dụng tính năng Page Rules của Cloudflare.
Chúc các bạn thành công!
Không có bình luận.