【问题标题】:Display PHP image by URL通过 URL 显示 PHP 图像
【发布时间】:2012-10-14 23:27:04
【问题描述】:

我有这个 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' /> 调用。

如果在site.tldimage2.jpg 上调用图像,我想显示image1.jpg,否则。

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

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

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

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

【问题讨论】:

  • 你能发布一个'error_log(print_r($_SERVER, true))'吗?
  • 没有错误。问题是代码总是显示 image1.jpg 无论调用代码的域名。
  • 请向我们展示 echo $_SERVER['SERVER_NAME'] 结果并检查 if 条件。
  • 用函数试试吧:imagecreatefromjpeg

标签: php image url


【解决方案1】:

试试这个:

    $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 cmets):

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

在 site.tld 内:

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

外部站点.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);

【讨论】:

  • 来自 PHP 文档:“将用户代理指向当前页面的页面地址(如果有)。这是由用户代理设置的。并非所有用户代理都会设置这个,并且有些提供了将 HTTP_REFERER 修改为一项功能的能力。简而言之,它不能真正被信任。”
  • 是的,类似的东西 :) 但是这个例子有一些错误。有替代方案吗?
  • 不是“物理”错误。我的意思是一些“错误”。例如:从 site2.tld :右键单击 > 查看图像,图像现在显示在 site1.tld 但它保持不变。
  • 对不起,我不太明白。如果您从服务器 site2.tld 或 site1.tld 导航,您显示的图像是 image2.jpg?确保取消注释回显并检查某些数据是否错误
  • 我添加了另一个替代方案,如果你解决了@PWhite,请告诉我
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    那是因为

    $_SERVER['SERVER_NAME']
    

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

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

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

    【讨论】:

    • 大部分时间都是这样,就像$_SERVER['HTTP_REFERER'],但这可以被欺骗。
    • $_SERVER['SERVER_NAME'] 的输出是所有网站中的 site.tld(我的服务器)...正在寻找一种使用图片获取当前 url 的方法。
    【解决方案4】:

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

    【讨论】:

    • $_SERVER['SERVER_NAME'] 的输出是其他网站中的 site.tld(我的服务器)...这是问题所在,因为脚本无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多