2011-10-04 117 views
1

我有兩個虛擬系統進行開發。第一個是Windows + xampp(apache,php,mysql),第二個是Linux + apache + php + mysql。我有非常非常簡單的頁面,使用外部鏈接從數據庫加載圖像(是的,圖像不在文件系統中,圖像不在這裏,是正確與否)。外部圖像不顯示在Apache下

第一頁顯示的照片:從數據庫

<img src="photo.php?photo_id=4" height="127" width="127"> 

第二個頁面加載它們:

if (isset($_GET['photo_id'])) { 
    $link = getDBconnection(); 
    $result = getPhoto($link, $_GET['photo_id']); 

    if ($result) { 
     $row = mysql_fetch_assoc($result); 
     header("Content-type: " . $row['MIMEtype']); 
     echo $row['photoImage']; 
    } 

    closeDBconnection($link); 
} 

一切都在Windows機器上,但Linux機器上做工精細,照片只是不」 t出現。我的意思是來自頁面目錄的圖像文件加載並顯示,但不知何故這個外部鏈接停止工作。我放了幾個回聲,並確保腳本執行和photoImage有二進制數據。

我不知道,這只是配置問題(可能,我沒有每天配置apache/php/mysql)。我一直在堅持。有任何想法嗎?

PS。數據庫完全一樣。我剛從Windows導出/導入到Linux的mysql數據庫。從數據庫中成功選擇任何其他數據。這只是照片,不起作用。

已解決
感謝Marc B的編碼小費。我意識到可能的問題,但完全忘了它。通過ftp再次將文件複製到LINUX機器後,再次檢查我沒有更改編碼(通過編輯任何文件)後,照片顯示出來。

+0

當outputtnig從DB的圖像你有沒有設置在photo.php頭爲圖像的正確圖像類型?即jpeg,png等。 – SW4

+0

是的,使用$ row ['MIMEtype']將標題設置爲'image/jpeg'。 MIME類型作爲照片表格中的屬性存儲。 – qlf00n

+0

正在使用同一瀏覽器是測試? – Ryre

回答

1

有些事情要檢查:

  1. 檢查數據庫錯誤 - 你說光象場二進制數據,所以不太可能,但永遠都不要假設一個數據庫調用成功
  2. 檢查早期文本輸出,導致header()調用失敗 - 它應該在某處登錄。無論如何,在開發過程中打開display_errors/error_logging,這樣您就不必在日誌中搜索,找出發生了什麼問題。
  3. 在瀏覽器中手動打開網址,看看會發生什麼。也許有一些字符集翻譯會導致圖像數據被破壞(例如,您使用的是TEXT字段而不是BLOB)。
+0

'if(!mysql_error($ result)){}'足以確保數據庫調用成功?感謝提示錯誤,我設置了額外的'error_reporting(E_ALL);'在腳本的開頭,但沒有出現錯誤。最後,編碼有一些問題。我再次複製了文件,並且檢查了編碼是否相同。現在它可以工作。謝謝! – qlf00n

+0

'if($ result === false){die(mysql_error())}'是最簡單的錯誤檢查。但是,如果此腳本只能通過''標籤加載,那麼錯誤輸出文本將被解釋爲損壞的圖像,您可能想改爲輸出佔位符圖片。 –

+0

是不是'if($ result)'等於'if($ result === false)'? – qlf00n