2011-01-05 55 views
1

我有一个特定的问题,并不能克服它。PHP图像内容类型问题

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

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

的问题是图像不显示虽然浏览器识别它(我可以看到它在网页标题),而不是我得到打印出来的图像URL。

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

我不知道它是内容类型错误还是别的。 在此先感谢。

+0

你想要在浏览器上显示图片或下载图像? – zod 2011-01-05 18:45:58

+0

确保'echo'有效。尝试使用curl或wget获取该页面。并确保在回显之前不存在前面的空白。 – 2011-01-05 18:51:05

+0

我解决了前两个问题,它确实是一个空白和一个代码错误,但我仍然有远程访问问题,所以我不得不使用CURL。你能帮助我,因为我对CURL不太好? – Mirko 2011-01-06 10:27:15

回答

3

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

+2

+1在文件操作中未使用原始'$ _GET'。 – JakeParis 2011-01-05 18:54:44

+0

图像非常小,这只是一个测试脚本。我同意你在使用readfile和其他技巧,但我已经尝试过readfile并且都不工作。 – Mirko 2011-01-05 19:08:22

1

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

如果检查出来,你要确保allow_url_fopen在php.ini中设置为On

0

尝试嵌入检索图像为<img>在HTML的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"> 
+0

我设法得到这里,但以一种奇怪的方式,当我发送图像ID它不起作用,它不显示图像。相反,当我点击图片源时,我收到消息“文档已移动”。 – Mirko 2011-01-05 20:43:44

0

可能您会收到一些错误并且图像不显示。试着关掉象这样的错误第一:

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

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

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

$ r - 在脚本上方进行处理,并进行验证以确保其正常。

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

诚然,如果有人把我的图片URL地址栏,它会重定向和用户将看到真实的URL,但它使我的网页速度更快,我并不太担心这一点。

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); 
    } 
}