在PHP中获取重定向的远程映像
我试图从PHP中的url获取并显示远程图像。大多数图像都可以工作,但有些图像会重定向,例如:在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查看网络级别上发生的
http://thundafunda.com/33/World-tour/download/Grand%20Canal,%20Venice,%20Italy%20pictures.jpg
图像将加载,然后消失。我正在使用一个IMG标记并将该url作为源。有什么想法吗?使用这部分代码,除了显示一个
,它什么都不做;
我得到了与您描述的相同的行为:图像不显示
如果我使用Firebug查看网络级别上发生的情况,我会看到:
(来源:) 基本上:
- 请求加载图像
- 图像加载
- 但答案是:
- a
HTTP状态码302
- 它重定向到响应的
位置
标题中给出的URL,该标题指向一个HTML页面
- a
- 因此,浏览器遵循该重定向
- 并加载一个HTML页面
标记中
如果您执行完全相同的测试,禁用
Referer
(一些Firefox扩展可以做到这一点),您将看到图像正确显示——Firebug说:
(来源:) 请注意,这次从我的浏览器发送的请求中没有Referer头。
考虑到这一点,我敢打赌,托管该图像的网站设置了某种反热链接保护
除了在自己的服务器上托管文件之外,您没有什么可以做的——如果许可证允许您这样做的话。使用这部分代码,除了显示一个
”,什么也做不了;
我得到了与您描述的相同的行为:图像不显示
如果我使用Firebug查看网络级别上发生的情况,我会看到:
(来源:) 基本上:
- 请求加载图像
- 图像加载
- 但答案是:
- a
HTTP状态码302
- 它重定向到响应的
位置
标题中给出的URL,该标题指向一个HTML页面
- a
- 因此,浏览器遵循该重定向
- 并加载一个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;