我有这个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.tld
上调用了图片,我想发送image2.jpg
。
该代码显示image1.jpg
调用代码的域名。
任何解决方案?感谢。
编辑:$_SERVER['SERVER_NAME']
的输出是site.tld
(我的服务器)在任何网站上......
这就是问题,因为脚本无法正常运行。
答案 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)。