2016-01-05 28 views
0

背景如何捲曲和顯示圖像,其中文件類型是從URL

  • 我建立了oscobo,隱私搜索引擎的圖片搜索未知。
  • 我們使用Bing URL來獲取縮略圖,以便在圖像搜索結果頁面上顯示給用戶。例如:https://oscobo.com/image.php?q=london
  • 我們不想直接將客戶端連接到Bing(如上例所示),但打算使用反向代理腳本,該腳本使用cURL來獲取圖像,然後將其發送回瀏覽器。
  • 當我們知道文件類型是什麼(例如jpg)時,我們可以在將圖像回顯給瀏覽器之前相應地爲Header選擇正確的內容類型。
  • 我們的問題是,URL到Bing中不包含的文件類型,它沿着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; 

反向腳本reverseproxy.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;  

    ?> 
+0

你看了CURLOPT_HEADERFUNCTION讀取HTTP頭文件下載? http://stackoverflow.com/questions/6482068/curl-setoptch-curlopt-headerfunction-arraythis-readheader-not-working – RCrowt

回答

1

在控制檯中的快速測試表明,可以從獲得的圖像類型信息響應頭:curl -D headers.txt http://tse3.mm.bing.net/th?id=OIP.M1a65dd11fb2b159f4fe44eba7dcfa0a6H0&pid=15.1&H=90&W=160 所以你可以考慮HTTP響應頭。這個答案顯示瞭如何用cURL在PHP中完成:Can PHP cURL retrieve response headers AND body in a single request?

希望這會有所幫助,祝你好運!