file_get_contents错误地显示图像

时间:2013-01-10 04:15:24

标签: php file-get-contents

我正在尝试将通用网站和网址显示为我自己网站的一部分。这是我正在使用的相对简单代码的一部分:

browse.php

<?   
$enteredurl = $_GET["url"];
$page = file_get_contents($enteredurl);
echo $page;
?>

如果URls是相对的而不是绝对的,忽略一些链接/图像无效的事实,这很好用。使用$ _GET访问页面,类似于

browse.php?URL = http://itracki.com

网页将按预期显示。然而,当我想要获得其他东西时,比如图像,我会得到类似这样的东西,我认为它是二元的东西?

browse.php?URL = http://images.itracki.com/2011/06/favicon.png

‰PNG  IHDRóÿa%IDAT8Ëc8sæÌJ0M ```ã3`xaÔ€aa]r#f.–ÄíNIEND®B`‚

我一直在网上寻找并尝试修改页面标题,例如

<? header('Content-type: image/png;'); ?>

但我仍然得到同样混乱的结果。有没有人知道如果我只是通过在地址栏中键入“http://images.itracki.com/2011/06/favicon.png”来访问它,我是如何看到图像的呢?

谢谢!

3 个答案:

答案 0 :(得分:8)

试试这个:

<?php
  $img = 'http://images.itracki.com/2011/06/favicon.png';
  $info = getimagesize($img);
  header('Content-type: ' . $info['mime']);
  readfile($img);
?>

在这种情况下,您应该使用readfile()而不是file_get_contents(),因为readfile()会将文件内容直接发送到浏览器,而不是将其存储在内存中供以后检索,这就是file_get_contents()确实如此。

另请注意,content-type是动态检索的,因此您无需担心在标题中错误地指定它。

某些图片的扩展程序可能与其content-typemime-type不符,因此可以更正这些类型的问题。

答案 1 :(得分:3)

尝试这个

$image = 'http://images.itracki.com/2011/06/favicon.png';
// Read image path, convert to base64 encoding
$imageData = base64_encode(file_get_contents($image));

// Format the image SRC:  data:{mime};base64,{data};
$src = 'data: '.mime_content_type($image).';base64,'.$imageData;

// Echo out a sample image
echo '<img src="',$src,'">';

答案 2 :(得分:-2)

echo 'data:;base64,'.base64_encode(file_get_contents('http://images.itracki.com/2011/06/favicon.png'));