按URL显示PHP图像

时间:2012-10-24 20:42:55

标签: php image url

我有这个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.jpgsite.tld上调用了图片,我想发送image2.jpg

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

任何解决方案?感谢。

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

这就是问题,因为脚本无法正常运行。

4 个答案:

答案 0 :(得分:3)

试试这个:

    $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' />

image.php

$imgPath = "image1.jpg";

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

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

答案 1 :(得分:1)

那是因为

$_SERVER['SERVER_NAME']

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

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

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

答案 2 :(得分:0)

首先,检查$_SERVER['SERVER_NAME']输出是否为if条件。 然后使用readfile()代替file_get_contents()

答案 3 :(得分:0)

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