如何显示图像隐藏其在PHP中的直接链接?

时间:2014-06-16 10:36:42

标签: php hotlinking

如何创建一个PHP代码,例如处理ID并返回相应的图像,而不为客户提供实际的图像热链接。

如下面的链接所示,图片显示在html页面中,但热门链接对客户端隐藏。即使在新窗口中打开图像,也会显示相同的链接,而不是图像的原始链接。

这绝对没有在.htaccess文件中实现,因为每个图像网址都会显示id对应的图像,而不是重定向到单个页面。

http://www.imagesup.net/?di=15140291437113

3 个答案:

答案 0 :(得分:3)

基本方式可能是这样的

<?php

    // query to database mabye?
    $myPath = getImagePath($_GET['id']);

    // what kind of image file is that?
    $contentType = getContentType($myPath);

    // read file content
    $img = file_get_contents($myPath);

    // here you tell the browser what kind of image is that e.g. jpeg,png,gif...
    header("Content-Type: $contentType");

    echo $img;

?>

您需要根据需要定义getImagePathgetContentType功能。

答案 1 :(得分:1)

每当冲浪者进入我的某个网站时,我总是给他分配一个会话。会话中包含几个信息,例如:代理,IP,语言,日期......等,并通过cookie或GET(作为我的每个页面的参数)传递。

由于我处理了大量图像内容,因此我开始对数据集进行数据处理。这基本上意味着,为了管理和群集的目的,我将所有图像保存到多宿主的SQL数据库,并在多个服务器上传播。有人可能会说,如果这是明智之举,但我们可以在另一天和另一篇文章中争辩说。

我写了一个在我的网站上使用的小脚本:

<img src="http://example.com/display.php?id=34" border="0" alt="" />

当然,ID会不断变化。这是在数据库中引用我的图像的部分。 以下是我用来从数据库中检索图像的脚本代码:

<?php
$connection=@mysql_connect(...);

@mysql_select_db(...);

$query="SELECT mime, file FROM images 

WHERE id=".$_GET["id"];

$rawdb=@mysql_query ($query,$connection);

if($rawdb AND @mysql_num_rows($rawd-->0){

  $array=@ mysql_fetch_array($result);

  if (!empty($array["fileContents"])){

    // Output the MIME header

    header("Content-Type: ".$array["mime"]}");

    // Output the image

    echo $array["file"];

  }else{

    // something else...

  }

  @mysql_free_result($rawdb);

}else{

  // something else...

}

@mysql_close($connection);

?>

由于我已经为每个访问我网站的用户设置了会话,因此我添加了以下内容:

<img src="http://example.com/display.php?id=34&sid=383829" border="0" alt="" />

在脚本本身中实现一个小会话检查:

<!--
session_start();

if($_SESSION["is_known"]){

  // do database calls

}else{

  header("Location:http://mydomain.tld/dontsteal.html");

}

-->

我的方法的主要优点是,会话完全是服务器端。用户无法摆脱它,或伪造信息。由于我有一个超时并保存所有必要的信息(IP!)来验证,它看起来非常完美,适合我的需要。

这里的一个挫折是资源和性能。但既然我没有强迫你,你可以测试和评估。希望有所帮助!

答案 2 :(得分:0)

创建一个php脚本,在img标记中用作src。

在该脚本中,使用file_get_contents从图像中获取数据。然后使用正确的mime类型发送标头。例如header('Content-type: image/jpeg');然后输出数据。