3

我有这个 php 代码(image.php):

if($_SERVER['SERVER_NAME'] == 'site.tld') {

    header('Content-type: image/jpeg');
    echo file_get_contents("image1.jpg");

} else {

    header('Content-type: image/jpeg');
    echo file_get_contents("image2.jpg");

}

*此页面 ( image.php) 托管在site.tld;

现在...此代码将由 调用<img src='http://site.tld/image.php' />

image1.jpg如果图像被调用,我想显示site.tldimage2.jpg如果没有。

该代码显示image1.jpg调用代码的任何域名。

有什么解决办法吗?谢谢。

编辑:任何网站上的输出$_SERVER['SERVER_NAME']都是site.tld(我的服务器)......

这就是问题所在,因为脚本无法正常工作。

4

4 回答 4

4

尝试这个:

    $imgPath = "image1.jpg";

    if(stripos($_SERVER["HTTP_REFERER"], 'http://site.tld/')=== false){

       $imgPath = "image2.jpg";

    }

    //echo $_SERVER["HTTP_REFERER"]."<br/>";
    //echo $imgPath."<br/>";

    header('Content-type: image/jpeg');
    echo file_get_contents($imgPath);

其他选项(基于 PWhite 评论):

您从http://site.tld/进行的所有调用都添加了一个查询字符串键,然后也评估此数据。

内部 site.tld :

<img src='http://site.tld/image.php?myfookey=secret' />

外部 site.tld :

<img src='http://site.tld/image.php' />

图像.php

$imgPath = "image1.jpg";

if (!(isset($_REQUEST["myfookey"]) &&  $_REQUEST["myfookey"] == 'secret')){
    $imgPath = "image2.jpg";
} 

header('Content-type: image/jpeg');
echo file_get_contents($imgPath);
于 2012-10-24T21:02:19.693 回答
1

那是因为

$_SERVER['SERVER_NAME']

显示您的服务器的名称(即执行 PHP 的服务器)。

您想要的是包含页面的 URL,<img src='http://site.tld/image.php' />我不确定客户端的浏览器会将此类信息发送到您的服务器。

/edit:如果您试图阻止第三方网站显示您的图片,您希望在服务器配置级别执行此操作,例如http://www.davidairey.com/stop-image-theft-hotlinking-htaccess/

于 2012-10-24T20:50:53.470 回答
0

首先,检查$_SERVER['SERVER_NAME']if 条件的输出。然后使用readfile()而不是file_get_contents().

于 2012-10-24T20:50:13.303 回答
0

如果您使用的是 Apache,请尝试UseCanonicalName Off在您的虚拟主机配置中进行设置(可能需要重新加载/重新启动 Apache)。

于 2012-10-24T20:56:56.830 回答