php图片防盗链怎么下载
时间 : 2023-03-27 07:55:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

防盗链指的是在其他网站上通过直接链接图片的方式展示图片,而不是将图片下载到自己的服务器上再展示。这种做法会增加被盗图的风险,同时也会增加服务器带宽的负担。因此,许多站长采用防盗链的方法来保护自己的图片资源。

在 PHP 中防盗链的实现方法有很多种。其中,最简单的方法是直接在代码里判断 HTTP 请求头中的 referer 字段,如果不是来自本站则拒绝请求。

下面是一个简单的 PHP 代码示例:

<?php

$ref = $_SERVER['HTTP_REFERER'];

if(!$ref || strpos($ref,'http://www.example.com/')!==0){

header('Content-Type: image/jpeg');

//此处可以加上防盗链的提示图片或者其他处理方式

readfile('default.jpg');

exit;

}

$file = 'image.jpg';//要展示的图片

header('Content-Type: '.mime_content_type($file));//设置mime类型

header('Content-Length: '.filesize($file));//设置图片大小

readfile($file);//输出图片

exit;

?>

以上代码的含义是,在收到 HTTP 请求时,获取 referer 字段,如果 referer 不是以 http://www.example.com/ 开头的,则认为请求不合法,将返回一个指定的默认图片(由于是应用程序输出的内容,所以必须设置正确的 Content-Type 和 Content-Length)。

当然,以上代码仅仅是一种思路,防盗链的方法还有很多,具体还需要结合实际情况进行调整。例如,可以对请求进行加密处理,也可以利用 Session 或者 Token 等方法来进行验证。

图片防盗链是指在网页中嵌入的图片,被第三方网站使用直接链接的方式访问,这样会对图片的原主站点造成流量和资源的浪费和损失。在 PHP 中可以通过一些方法来防止图片被盗链。

1. 通过 HTTP_REFERER 头来判断

HTTP_REFERER 是 HTTP 协议中的一个头部字段,记录了该请求是从哪个 URL 中跳转而来的。可以在网站代码中判断该值是否为当前网站的 URL 来防止图片被盗链。代码如下:

$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

if (strpos($referer, 'yourwebsite.com') === false) {

// 非法请求,返回错误图片或跳转到错误页面

}

2. 自定义 HTTP_REFERER

有些浏览器出于安全或隐私的考虑,不会发送 HTTP_REFERER ,导致上面的方法失效。这时候可以在网站中设置一个自定义的 HTTP_REFERER 值,在图片加载时判断该值是否为网站的 URL。代码如下:

if (isset($_SERVER['HTTP_X_REFERER']) && $_SERVER['HTTP_X_REFERER'] == 'yourwebsite.com') {

// 正确请求,输出图片

} else {

// 非法请求,返回错误图片或跳转到错误页面

}

3. 使用 PHP 检查 HTTP_REFERER 值

如果浏览器不发送 HTTP_REFERER,可以通过 PHP 发送一个请求来检查是否合法。代码如下:

$url = 'http://yourwebsite.com';

$headers = get_headers($url, 1);

if (isset($headers['Referer']) && strpos($headers['Referer'], 'yourwebsite.com') !== false) {

// 正确请求,输出图片

} else {

// 非法请求,返回错误图片或跳转到错误页面

}

4. 使用 .htaccess 文件禁止盗链

在网站根目录下创建 .htaccess 文件,并加入以下代码可以禁止他人盗链,只有站内引用才能访问:

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]

RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

在以上代码中, jpg,jpeg,png 和 gif 是图片的后缀名,你可以修改或添加其他类型的文件。

以上是一些防止图片被盗链的方法。同时也要注意,防盗链不是绝对保障,还应该加强网站的安全性,保证网站的数据和资源不会被非法盗取。