Hiện nay, việc các website link tới các file ảnh của site khác & do đó làm tốn bandwidth của những site có ảnh bị link tới đó là khá phổ biến. Nếu website của bạn có nhiều ảnh đẹp, rất có thể chúng đã bị link tới từ các website khác, và trang của bạn sẽ tự dưng bị mất bandwidth một cách vô ích trong khi làm lợi cho các site khác.
Làm sao biết được các file ảnh của bạn đang bị link tới như vậy? Đơn giản nhất là bạn hãy kiểm tra các log trên host của bạn để xem những referer tới các file ảnh của bạn.
Ok, vậy làm sao bạn bảo vệ những file ảnh của bạn không cho link tới từ các site khác?
Nếu trang web của bạn đang chạy trên Apache server trên hệ điều hành Unix, cách đơn giản và hiệu quả nhất là sử dụng một file .htaccess để bảo vệ ảnh của bạn (đã giới thiệu trong diễn đàn trong một topic khác). Nhưng nếu host bạn chạy IIS server trên windows hoặc bạn vẫn thích php hơn thì no problem. Let's get started!
Các bạn hãy tạo một file protectimage.php với nội dung như sau:
CODE
<?
/*--------- Chỉnh sửa phần này------------------*/
// Đường dẫn tới thư mục chứa các file ảnh của bạn:
$imagedir = "/put/your/full/image/directory/path/here/";
//Trang web được quyền sử dụng các file ảnh này. Nếu trang web của bạn có vào được với cả domain mysite.com & www.mysite.com
// thì hãy cho cả hai vào đây, nhớ là không có dấu "/" ở cuối. Và hãy làm theo ví dụ dưới đây - chú ý tới dấu phẩy giữa các domain:
$validprefixes = array (
"thesitewizard.com",
"www.thesitewizard.com"
);
//Nếu ai đó muốn vào file php bằng trình duyệt này thì bạn muốn redirect họ tới trang nào?
$homepage = "http://www.mysite.com/";
// Email của bạn để nhận thông báo nếu có người sử dụng những hình ảnh của bạn trên site của họ. Hãy xóa dấu "//" ở trước $email & thay email bên dưới bằng email của bạn:
//$email = "
[email protected]";
// ------------ Hết phần cần chỉnh sửa ------------
// --- Không được chỉnh sửa phần còn lại ---
function isreferrerokay ( $referrer, $validprefixes )
{
$validreferrer = 0;
$authreferrer = current( $validprefixes );
while ($authreferrer) {
if (eregi( "^https?://$authreferrer/", $referrer )) {
$validreferrer = 1;
break;
}
$authreferrer = next( $validprefixes );
}
return $validreferrer;
}
//----------------------- Chương trình chính -----------------------
$image = $_GET['image'];
$referrer = getenv( "HTTP_REFERER" );
if (isset($_GET['image'])) {
if (empty($referrer) ||
isreferrerokay( $referrer, $validprefixes )) {
$imagepath = $imagedir . $image;
$imageinfo = getimagesize( $imagepath );
if ($imageinfo[2] == 1) {
$imagetype = "gif";
}
elseif ($imageinfo[2] == 2) {
$imagetype = "jpeg";
}
elseif ($imageinfo[2] == 3) {
$imagetype = "png";
}
else {
header( "HTTP/1.0 404 Not Found" );
exit;
}
header( "Content-type: image/$imagetype" );
@readfile( $imagepath );
}
else {
if (isset($email)) {
mail( $email, "Bandwidth Theft Alert",
"WARNING:\n\n$referrer\ntried to access\n$image\n",
"From: CHImageGuard <$email>" );
}
header( "HTTP/1.0 404 Not Found" );
}
}
else {
header( "Location: $homepage" );
}
?>
Để sử dụng script trên, trong code HTML của bạn, những phần sử dụng ảnh hãy trỏ tới file php này. Chẳng hạn thay vì link tới myimage.gif trong tag IMG, bạn hãy làm như sau:
<im src="protectimage.php?image=myimage.gif">
Bạn có thể bảo vệ ảnh có định dạng gif, jpg và png.
Điều gì sẽ xảy ra nếu site khác link tới ảnh của bạn? Đơn giản là sẽ xuất hiện một hình ảnh broken image link.
Còn nếu bạn nào muốn thay hình ảnh broken image link bằng một lời cảnh báo trên site định ăn cắp bandwidth của bạn (chẳng hạn thành: "trang web này đang sử dụng một hình ảnh ăn cắp từ mysite.com - hãy đến với
http://mysite.com để xem những hình ảnh tuyệt vời" :) thì chỉ cần modify đoạn code trên một chút là được thôi (nếu ai thích thì mình chỉ cho)