如何卷曲和显示url中文件类型未知的图像


How to curl and display image where file type is unknown from url

背景

  • 我正在为oscobo建立一个图像搜索,一个隐私搜索引擎
  • 我们使用Bing URL获取缩略图,以便在图像搜索结果页面上显示给用户。例如:https://oscobo.com/image.php?q=london.
  • 我们不想将客户端直接连接到Bing(如上例所示),而是打算使用反向代理脚本,该脚本使用cURL获取图像,然后将其发送回浏览器
  • 当我们知道文件类型(例如jpg)时,脚本运行良好,并且在将图像回显到浏览器之前,我们可以相应地为页眉选择正确的内容类型
  • 我们的问题是Bing的URL不包含文件类型,它看起来像http://tse3.mm.bing.net/th?id=OIP.M1a65dd11fb2b159f4fe44eba7dcfa0a6H0&pid=15.1&H=90&W=160

问题

我们如何修改此脚本以使用不显示文件类型的URL?

非常感谢任何想法或意见。

页面上的PHP

$html = '';
$images = $results->bossresponse->images->results;
foreach ($images as $image) {
                    $theurl = "{$image->thumbnailurl}";
                    $theurl = base64_encode($theurl);
                    $reverseurl = "reverseproxy.php?url=$theurl";
                    $html .= "<a href='"{$image->clickurl}'"> <img class=border src='"$reverseurl'" height='"140px'"></a>";
                    }
echo $html;

反向脚本reversepoxy.php

<?php
$file = base64_decode(@$_GET['url']);
$aFile = end(explode('.' , $file));
if($aFile == 'jpg' or $aFile == 'jpeg'){
header('Content-Type: image/jpeg');
}elseif($aFile == 'png'){
header('Content-Type: image/png');
}elseif($aFile == 'gif'){
header('Content-Type: image/gif');
}else{
die('not supported');
}
if($file != ''){
        $cache_expire = 60*60*24*365;
        header("Pragma: public");
        header("Cache-Control: maxage=". $cache_expire);
        header('Expires: ' . gmdate('D, d M Y H:i:s', time() +         $cache_expire).' GMT');
//The cURL stuff...
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$file");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$picture = curl_exec($ch);
curl_close($ch);
//Display the image in the browser
echo $picture;
    }
    exit;      
    ?>

控制台中的快速测试显示,可以从响应标头中获取图像类型信息:curl -D headers.txt http://tse3.mm.bing.net/th?id=OIP.M1a65dd11fb2b159f4fe44eba7dcfa0a6H0&pid=15.1&H=90&W=160因此,您可以考虑HTTP响应标头。这个答案展示了如何在PHP中使用cURL:PHP cURL可以在单个请求中检索响应头和正文吗?

希望这能有所帮助,祝你好运!