在PHP中获取重定向的远程映像

在PHP中获取重定向的远程映像,php,javascript,image,http,redirect,Php,Javascript,Image,Http,Redirect,我试图从PHP中的url获取并显示远程图像。大多数图像都可以工作,但有些图像会重定向,例如: http://thundafunda.com/33/World-tour/download/Grand%20Canal,%20Venice,%20Italy%20pictures.jpg 图像将加载,然后消失。我正在使用一个IMG标记并将该url作为源。有什么想法吗?使用这部分代码,除了显示一个,它什么都不做; 我得到了与您描述的相同的行为:图像不显示 如果我使用Firebug查看网络级别上发生的

我试图从PHP中的url获取并显示远程图像。大多数图像都可以工作,但有些图像会重定向,例如:

http://thundafunda.com/33/World-tour/download/Grand%20Canal,%20Venice,%20Italy%20pictures.jpg

图像将加载,然后消失。我正在使用一个IMG标记并将该url作为源。有什么想法吗?

使用这部分代码,除了显示一个
,它什么都不做;
我得到了与您描述的相同的行为:图像不显示


如果我使用Firebug查看网络级别上发生的情况,我会看到:


(来源:)

基本上:

  • 请求加载图像
  • 图像加载
  • 但答案是:
    • a
      302
      HTTP状态码
    • 它重定向到响应的
      位置
      标题中给出的URL,该标题指向一个HTML页面
  • 因此,浏览器遵循该重定向
  • 并加载一个HTML页面
当然,它不能显示在
标记中



如果您执行完全相同的测试,禁用
Referer
(一些Firefox扩展可以做到这一点),您将看到图像正确显示——Firebug说:


(来源:)

请注意,这次从我的浏览器发送的请求中没有Referer头。


考虑到这一点,我敢打赌,托管该图像的网站设置了某种反热链接保护


除了在自己的服务器上托管文件之外,您没有什么可以做的——如果许可证允许您这样做的话。

使用这部分代码,除了显示一个
”,什么也做不了;
我得到了与您描述的相同的行为:图像不显示


如果我使用Firebug查看网络级别上发生的情况,我会看到:


(来源:)

基本上:

  • 请求加载图像
  • 图像加载
  • 但答案是:
    • a
      302
      HTTP状态码
    • 它重定向到响应的
      位置
      标题中给出的URL,该标题指向一个HTML页面
  • 因此,浏览器遵循该重定向
  • 并加载一个HTML页面
当然,它不能显示在
标记中



如果您执行完全相同的测试,禁用
Referer
(一些Firefox扩展可以做到这一点),您将看到图像正确显示——Firebug说:


(来源:)

请注意,这次从我的浏览器发送的请求中没有Referer头。


考虑到这一点,我敢打赌,托管该图像的网站设置了某种反热链接保护


如果许可证允许的话,除了在自己的服务器上托管文件之外,您没有什么可以做的。

服务器会阻止图像的热链接,可能是基于引用者。有几种解决方法,例如使用curl(如果安装在服务器上):

免责声明:


他们可能不喜欢图像的热链接,否则他们就不会首先集成他们的解决方案。最好向他们请求使用其图像的权限,否则可能会侵犯他们的版权

服务器会阻止图像的热链接,可能是基于引用者。有几种解决方法,例如使用curl(如果安装在服务器上):

免责声明:


他们可能不喜欢图像的热链接,否则他们就不会首先集成他们的解决方案。最好向他们申请使用其图像的权限,否则可能会侵犯他们的版权

谢谢您的详细解释。谢谢您的详细解释。
$url = 'http://thundafunda.com/33/World-tour/download/Grand%20Canal,%20Venice,%20Italy%20pictures.jpg';
echo '<img src="' . $url . '" alt="" />';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://thundafunda.com/33/World-tour/download/Grand%20Canal,%20Venice,%20Italy%20pictures.jpg');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, 'http://thundafunda.com/');
$imageData = curl_exec($ch);

header("Pragma: public"); // required 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/jpg"); 
header("Content-Transfer-Encoding: binary"); 
echo $imageData;