-1

仅当我使用此代码时,图片才会显示在我的网站中...

<?php
$remoteImage = "https://scontent-frt3-2.cdninstagram.com/v/t51.2885-19/s150x150/67310557_649773548849427_4130659181743046656_n.jpg?tp=1&_nc_ht=scontent-frt3-2.cdninstagram.com&_nc_ohc=M1hegfYF3_AAX9GkTGH&edm=AAuNW_gBAAAA&ccb=7-4&oh=50ba784cd64600a025031f7fc00740c1&oe=60BAEE93&_nc_sid=498da5";
$imginfo = getimagesize($remoteImage);
header("Content-type: {$imginfo['mime']}");
readfile($remoteImage);
?>

但如果使用这个:

<?php 
$link = "https://scontent-frt3-2.cdninstagram.com/v/t51.2885-19/s150x150/67310557_649773548849427_4130659181743046656_n.jpg?tp=1&_nc_ht=scontent-frt3-2.cdninstagram.com&_nc_ohc=M1hegfYF3_AAX9GkTGH&edm=AAuNW_gBAAAA&ccb=7-4&oh=50ba784cd64600a025031f7fc00740c1&oe=60BAEE93&_nc_sid=498da5";
echo "<img src='$link'>"; 
?>

它显示损坏的图像,如下所示:https : //i.imgur.com/ufJHy1n.png 并且它只发生在 instagram 图像中,因为 url 的结尾不像 xxxx.jpg 请帮助!

4

1 回答 1

1

如果您使用浏览器的控制台来实际调试整个事情,您就会得到答案。

关于您的变体:

  1. 正在将实际图像下载到您的服务器并输出二进制内容。
  2. 正在使用img标签嵌入图像,因此客户端将直接从 Instagram 的 CDN 请求图像。

变体 2) 不起作用的原因很简单:

同源

我将在这里引用 Chrome 的开发工具:

要使用来自不同来源的此资源,服务器可以放宽跨域资源策略响应标头: Cross-Origin-Resource-Policy: same-site 如果资源和文档是从同一站点提供的,请选择此选项。 Cross-Origin-Resource-Policy: cross-origin 仅当包含此资源的任意网站不会造成安全风险时才选择此选项。

Instagram 的 CDN 政策设置为cross-origin-resource-policy: same-origin- 拒绝来自其他来源的请求。可以在此处找到有关此的更多信息。

可以在此处找到有关什么是 Origin(即方案 + 主机 + 端口)的示例。

于 2021-05-06T13:02:16.407 回答