一、

要隐藏 PHP 图片的真实地址,可以通过以下方法实现:

  1. 使用 PHP 读取图片文件内容并通过 HTTP 响应输出。这样,用户将无法直接访问图片的真实路径。例如:
<?php
$image_path = 'path/to/your/image.jpg'; // 图片实际路径
$image_type = pathinfo($image_path, PATHINFO_EXTENSION); // 获取图片类型

header('Content-Type: image/' . $image_type); // 设置响应头为图片类型
header('Content-Disposition: inline; filename="image.' . $image_type . '"'); // 设置响应头为内联显示和设置文件名

$image_data = file_get_contents($image_path); // 读取图片文件内容
echo $image_data; // 通过 HTTP 响应输出图片内容
?>
  1. 将图片存储在数据库中(如 MySQL),通过 PHP 从数据库读取图片数据并输出。这样,图片的真实位置将更难被找到。例如:

首先,创建一个包含图片数据的 MySQL 数据表:

CREATE TABLE images (
    id INT AUTO_INCREMENT PRIMARY KEY,
    image_data LONGBLOB NOT NULL
);

然后,使用 PHP 将图片插入到数据库中:

<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

$image_path = 'path/to/your/image.jpg';
$image_data = file_get_contents($image_path);

$stmt = $mysqli->prepare("INSERT INTO images (image_data) VALUES (?)");
$stmt->bind_param('b', $image_data);
$stmt->send_long_data(0, $image_data);

$stmt->execute();
$stmt->close();
$mysqli->close();
?>

最后,从数据库读取图片数据并通过 HTTP 响应输出:

<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

$id = 1; // 图片在数据库中的 ID

$stmt = $mysqli->prepare("SELECT image_data FROM images WHERE id = ?");
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->bind_result($image_data);
$stmt->fetch();

header('Content-Type: image/jpeg'); // 设置响应头为图片类型
echo $image_data; // 通过 HTTP 响应输出图片内容

$stmt->close();
$mysqli->close();
?>
  1. 使用 CDN 服务(如腾讯云对象存储)来存储和分发图片。CDN 可以有效地保护图片源地址不被直接访问,同时提高图片加载速度。要使用腾讯云对象存储服务,请参考官方文档:https://cloud.tencent.com/document/product/436

通过以上方法,您可以有效地隐藏 PHP 图片的真实地址。

二、

PHP可以使用base64编码来隐藏图片真实地址哦,隐藏后会显示data:QUFodHRwOi8vd3d3LmJhaWR1这种格式的图片地址,向某宝这类网站目前都是使用这种方式,并且可以提高加载速度,具体的PHP代码可以如下:

<?php
header(‘Content-type: text/html; charset=utf-8’);
if (strtolower($_SERVER[‘REQUEST_METHOD’]) == ‘post’) {
if (!isset($_FILES[‘file’])) exit(‘请上传图片’);
$file = $_FILES[‘file’];
$dataType = array(‘png’, ‘jpg’, ‘jpeg’, ‘gif’);
$ext = strtolower(substr(strrchr($file[‘name’], ‘.’), 1));
if (!isset($file[‘tmp_name’]) || $file[‘error’] > 0) exit(‘上传失败’);
if (!in_array($ext, $dataType)) exit(‘图片格式错误’);
$file = file_get_contents($file[‘tmp_name’]);
$data = base64_encode($file);
echo ‘data:image/’.$ext.’;base64,’.$data;
} else {
?>
<html>
<head><title>图片base64编码</title></head>
<body>
<form method=”post”>
<input type=”file”>
<input type=”submit” value=”提交”>
</form>
</body>
</html>
<?php
}
?>

三、

<?php
/** 
 *  @modular 这个脚本将会隐藏图片的真实地址
 *  @param  name string 图片名称
* @example <img src=" http://www.xxx.com/getImg.php?name=demo.jpg" />
* 等同于 <img src=" http://www.xxx.com/images/demo.jpg" />
 */
//设置图片真实地址所在的文件夹,您所帖的代码当中少了一个分号.程序会报错
$image_path="images/";
//从URL当中得到文件名.比方说本程序的名字为getImg.php,传入参数name=demo.jpg
//即URL地址为getImg.php?name=demo.jpg,
$image_file=$image_path.$_GET['name'];
//以只读模式打开文件
$sTmpVar = fread(fopen($image_file, 'r'), filesize($image_path));
//设置文件头显示为图片.
header("Content-type: image/* ");
//输出数据流
echo $sTmpVar;
?>
上面代码保存为pic.php
然后 <img src="pic.php?name=图片文件名" alt="图片说明"/>
四、

整个过程为异步处里 php function hideAvatar(){ ob_clean(); $file=file_get_contents(url); 这里的url是你图片的真实路径 echo $file; } html img id=img/img js LoadImage(img); function LoadImage(ElementID) { //id 请求的图片ID var url = http://xxx

整个过程为异步处里

php

function hideavatar(){

ob_clean();

$file=file_get_contents(url);   这里的url是你图片的真实路径

echo $file;

}

html

load-1-1-1-1

js

LoadImage(“img”);

function LoadImage(ElementID)
{
//id 请求的图片ID
var url = “http://xxx.xxx.xxx/hidehideAvatar?t=”+Math.random(); /
var xhrObject = new XMLHttpRequest();

xhrObject.onreadystatechange = function event()
{
if (xhrObject.readyState == 4)
{
if (xhrObject.status == 200)
{
document.getElementById(ElementID).src = url;
alert(url);
}
}
}
xhrObject.open(“get”, url);
xhrObject.send(null);
}

五、

用header实现图片地址的隐藏

<?php
$path=$_GET[“path”];
$cacheimgname=str_replace(“/”,”_”,$path);
$localimg=”upimg/”.$cacheimgname;
if ((file_exists($localimg)))
{
$httpurl=$localimg;
}
else
{
$httpurl=”http://www.imageserver.com/”.$path;
@copy($httpurl,$localimg);//缓存图片!
}
header(“Locationhttpurl”);
exit;
?>

<img src=”img.php?path=x/x/xtest.gif”>

六、

利用PHP搭建一个属于自己的随机图片API方便调用,同时可隐藏真实图片地址,注意:图片必须存储在PHP服务器上。

示例

https://tvv.tw/xjj/meinv/ct.html //该网页用的下面的API。

https://cf.cdn.xiazai.de/api/images //直接访问API无法显示图片。

特性

  • 完全隐藏图片文件的真实地址
  • 支持调用域名白名单
  • 支持多文件夹分类目录
  • 前端调用支持使用随机数载入

部署

https://github.com/galnetwen/Random-Image

  1. 下载代码,解压至你域名文件夹根目录或者子目录
  2. 开启 Apache 或者 Nginx 的伪静态功能
  3. 访问:你的域名/images
  4. 大功告成

配置

打开 images.php 文件,添加域名白名单与默认文件夹即可。 照葫芦画瓢,不用多说了吧。

代码语言:javascript
复制
<?php
error_reporting(E_ERROR);
require_once 'imgdata.php';
$karnc = new imgdata();

/**
 * 遍历获取目录下的指定类型的文件
 * @param $path
 * @param array $files
 * @return array
 */
function getfiles($path, $allowFiles, &$files = array()) {
    if (!is_dir($path)) return null;
    if (substr($path, strlen($path) - 1) != '/') $path .= '/';
    $handle = opendir($path);
    while (false !== ($file = readdir($handle))) {
        if ($file != '.' && $file != '..') {
            $path2 = $path . $file;
            if (is_dir($path2)) {
                getfiles($path2, $allowFiles, $files);
            } else {
                if (preg_match("/.(" . $allowFiles . ")$/i", $file)) {
                    $files[] = substr($path2, strlen($_SERVER['DOCUMENT_ROOT']));
                }
            }
        }
    }
    return $files;
}

/**
 * 域名白名单校验函数
 * @param $domain_list
 * @return true/false
 *在下面修改为你的网站域名,在下面列表中的网站才能调用API
 */
function checkReferer($domain_list = array(
    'haremu.com',
    'acg.sx'
)) {
    $status = false;
    $refer = $_SERVER['HTTP_REFERER']; //前一URL
    if ($refer) {
        $referhost = parse_url($refer);
        /**来源地址主域名**/
        $host = strtolower($referhost['host']);
        if ($host == $_SERVER['HTTP_HOST'] || in_array($host, $domain_list)) {
            $status = true;
        }
    }
    return $status;
}

//列出指定目录下的图片
$CONFIG = array();
$CONFIG['imageManagerAllowFiles'] = array(".png", ".jpg", ".jpeg", ".gif", ".bmp");

$base_Path = '/picture/'; //图片默认主目录
$category = 'a'; //图片默认分类目录

if ($_GET['folder']) {
    $folder = trim($_GET['folder']);
    $CONFIG['imageManagerListPath'] = $base_Path . $folder . '/';  //有GET访问的分类目录
} else {
    $CONFIG['imageManagerListPath'] = $base_Path . $category . '/'; //无GET访问的默认目录
}

$allowFiles = $CONFIG['imageManagerAllowFiles'];
$path = $CONFIG['imageManagerListPath'];

$allowFiles = substr(str_replace(".", "|", join("", $allowFiles)), 1);

//获取文件列表
$path = $_SERVER['DOCUMENT_ROOT'] . (substr($path, 0, 1) == "/" ? "" : "/") . $path;
$files = getfiles($path, $allowFiles);
if (!count($path)) {
    return "抱歉,没有找到匹配的文件!";
}

//获取指定范围的列表
$len = count($files);
for ($i = 0, $list = array(); $i < $len; $i++) {
    $list[] = $files[$i];
}

$rand = array_rand($list, 1);
$img = $list[$rand];
$imgFile = $_SERVER['DOCUMENT_ROOT'] . (substr($list[$rand], 0, 1) == "/" ? "" : "/") . $img;
$imgNot = $_SERVER['DOCUMENT_ROOT'] . '/' . 'nico.gif'; //无授权域名图片
$refer = $_SERVER['HTTP_REFERER']; //前一URL

//存在前一URL
if ($refer) {
    if (!checkReferer()) {
        $karnc->getdir($imgNot);
        $karnc->img2data();
        $karnc->data2img();
        die;
    } else {
        $karnc->getdir($imgFile);
        $karnc->img2data();
        $karnc->data2img();
        die;
    }
} else {
    //直接访问API地址
    $imgWeb = file_get_contents('imgweb.html');
    echo $imgWeb;
    die;
}
?>

多文件夹说明: 第二个文件夹无需配置,直接使用 URL 传递参数即可。

比如: 默认文件夹的分类,调用的域名是:“ 你的域名/images ” 其它文件夹的分类,调用是域名是:“ 你的域名/images/文件夹名 ”

注意! 若要使用随机数调用,必须启用 Apache 或者 Nginx 的伪静态功能,否则空白输出。 Nginx 用户需要手动添加 nginx.conf 文件里面的伪静态规则到你的域名配置中去……

代码语言:javascript
复制
rewrite ^/images$ /images.php last;
rewrite ^/images/(.*?)$ /images.php?folder=$1 last;
#下面是子目录例子:
rewrite ^/api/images$ /api/images.php last;
rewrite ^/api/images/(.*?)$ /api/images.php?folder=$1 last;

Apache伪静态

代码语言:javascript
复制
<IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteRule ^images$ images.php [L,QSA]
    RewriteRule ^images/(.*?)$ images.php?folder=$1 [L]

</IfModule>

使用随机数载入的情况通常在一个页面多次调用随机图的时候,比如首页文章列表,否则图片都是一样的。

随机数载入方式:“ 你的域名/images?随机数 ” ,就是原有 URL 上添加一个英文问号和任意随机数。

示例:

代码语言:javascript
复制
<img src="https://cf.cdn.xiazai.de/api/images">
<img src="https://cf.cdn.xiazai.de/api/images/acg">
<img src="https://cf.cdn.xiazai.de/api/images?d8c196951e5bbf3edd158de4">
<img src="https://cf.cdn.xiazai.de/api/images/acg?9f0d34f8ee6f96b56d8902d1">

网上收集了这么多... ...