【问题标题】:file_get_contents - also get the picturesfile_get_contents - 也获取图片
【发布时间】:2009-08-08 21:38:56
【问题描述】:

大家好!我最近在使用 PHP 和 file_get_contents 进行编码时遇到了问题。我的问题是,当我加载这样的网站时:

<? echo file_get_contents($_GET['url']); ?>

我加载的网站图片不显示。例如,当我去谷歌时,没有显示图片。这适用于我访问的每个网站。我该如何解决这个问题?

【问题讨论】:

  • 图像标签在源中是相对的吗?如果您尝试通过网络浏览器从主机加载页面,则相关图像将不会显示

标签: php image file-get-contents


【解决方案1】:

您正在显示的 HTML 页面假定您也有可用的图像,而您没有这些图像,因为它们位于原始页面的服务器(例如 Google.com)上。

确保加载 HTML 页面上的所有内容的最快方法是添加 &lt;base href="http://www.google.com/" /&gt;。这告诉浏览器返回到其余内容的原始路径,包括图像、CSS、脚本等。

您需要在您正在显示的 HTML 页面的 &lt;head&gt;&lt;/head&gt; 之间注入它。您可以使用正则表达式或简单的 HTML DOM。

希望有帮助

【讨论】:

  • 对不起,但我完全是个菜鸟。我应该把 代码放在哪里?在我的 php 代码里面?
  • 不,将它添加到您正在回显的 HTML 中。将 file_get_contents($_GET['url']) 的结果放入字符串中,然后您可以在回显之前更改 HTML。
  • 我确实喜欢这个,但是嗯。现在该网站显示了两次。对不起,我缺乏理解。一定很烦人。回声$页面; echo "";
  • print str_replace("", "\n", file_get_contents($_GET['url']) ); ?>
【解决方案2】:

不要这样做。您正在窃取其他网站的内容。正如您所注意到的,它也不能很好地工作,因为所有相对 URL 都已损坏。

您可以改用 iframe 吗?如:

<iframe src="<?php echo htmlspecialchars($_GET['url']) ?>"></iframe>

这更好,因为您没有向最终用户隐藏您代理的网站。

【讨论】:

  • 不使用 iframe 双重窃取?不仅是内容,还有流量? :-)
  • 您使用 file_get_contents 窃取流量。有什么区别?
【解决方案3】:

我认为这是因为图像 url 是相对的 &lt;img src="/img/foo.png"&gt; 意味着它会在您的服务器上查找图像而不是说 googles。解决这个问题需要查看源中的所有 url 并将它们从相对更改为绝对。

【讨论】:

    【解决方案4】:

    file_get_contents() 执行它所说的,获取作为参数提供的文件或 URL 的内容。 HTML 页面内部没有图像,它们不是页面的内容,HTML 页面只有对具有自己内容的外部文件的引用。

    【讨论】:

    • Petruza,您的回答在技术上是正确的。但是,在这种情况下,file_get_contents() 的结果会通过 echo 命令显示回用户的浏览器。据推测,浏览器随后会进行后续调用以检索图像。 Will 的问题是图像的 URL 指向错误的位置——可能是因为它们是相对的,正如其他人所指出的那样。
    猜你喜欢
    • 2012-10-06
    • 2014-03-25
    • 2012-09-16
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多