PHP图像内容类型问题

时间:2011-01-05 18:43:50

标签: php header content-type

我有一个特定的问题,无法克服它。

对于我的最新项目,我需要一个简单的PHP脚本,根据通过URL发送的ID显示图像。这是代码:

header("Content-type: image/jpeg");
$img = $_GET["img"];
echo  file_get_contents("http://www.somesite.hr/images/$img");

问题是虽然浏览器识别出图像但我没有显示(我可以在页面标题中看到它),而是打印出图像URL。

它既不能在允许远程访问的服务器上工作,也不能在没有远程访问的服务器上工作。 此外,在标题之前不会打印或回显任何内容。

我想知道它是否是内容类型错误或其他内容。 提前谢谢。

6 个答案:

答案 0 :(得分:3)

图像可能不适合内存。或者您的PHP安装没有权限进行外部HTTP调用。无论如何,我建议你永远不要使用echo file_get_contents(),而是使用readfile。 此外,您永远不应该使用$ _GET或$ _POST中的原始字符串进行文件操作。始终从用户提供的文件名中删除空字节,斜杠和双点,或者更好的是,只允许使用字母数字字符。

答案 1 :(得分:2)

我最近做了类似的事情,但发现这是一种缓慢的方法(我在页面上做了15+)。这很慢,因为首先您的服务器必须下载映像,然后将其发送到客户端。这意味着每个图像都会下载两次。

我想出了一个替代方案 - 重定向。这允许客户端计算机直接访问其他站点,同时隐藏HTML源代码中的真实URL。

$ r - 在脚本上方处理,并经过验证以确保它没问题。

$webFile = 'http://www.somesite.com/'.$r['type'].'/'.$r['productid'].'.jpg';
header('Location: '.$webFile);
exit();

如果有人将我的图片网址放在地址栏中,它会重定向,用户会看到真正的网址,但这会让我的网页更快,我也不会太担心。

答案 2 :(得分:1)

您需要确保脚本不输出任何空白区域。在打开/关闭PHP标签之前和之后检查。

如果检查出来,您需要确保{php}中的allow_url_fopen设置为On

答案 3 :(得分:0)

尝试在html

中嵌入用于检索图像为<img>的php文件

getImage.php

header("Content-type: image/jpeg");
$img = $_GET["img"];
echo  file_get_contents("http://www.somesite.hr/images/$img");
你的html文件中的

<img src="getImage.php?img=IMAGEID">

答案 4 :(得分:0)

可能会出现一些错误,但不会显示图像。首先尝试关闭这样的错误:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'Off');

答案 5 :(得分:0)

检查查询字符串中是否存在该变量,并使用正则表达式确保它不包含除字母数字字符或句点之外的任何内容。然后使用readfile()将输出流式传输到浏览器。

// make sure the variable exists
if (isset($_GET['image'])) {
    $image = $_GET['image'];
    // make sure it contains only letters, numbers, the underscore, and a period
if (preg_match('/^[\w.]+$/', $image)) {
    $file = "http://www.example.com/images/$image";
    // send the correct header
    header('Content-type: image/jpeg');
    // stream the output
    readfile($file);
    }
}