2011-01-05 98 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); 
    } 
}