2008-10-05 38 views
0

我正在使用動態創建的圖像來顯示信息的網絡應用程序。這些數據目前使用GET查詢字符串發送到圖像,但具有更復雜的圖像和數據,我擔心遇到url字符限制問題。如何將POST請求的結果顯示爲圖像?

我可以簡單地將記錄ID傳遞給圖像,並將此查詢作爲數據庫,但這顯然會增加對服務器的需求。有什麼方法可以將使用POST檢索的圖像添加到HTML文檔中?

回答

5

最後,我認爲查詢數據庫可能會更快。要從數據庫中獲取一個小字符串(比如說多達2000個字符)非常快,並且可能比讓用戶一直髮布更快,特別是當頁面上有多個字符時。

最好的選擇是創建一次圖像並緩存它,如果它沒有改變。當再次請求圖像時,檢查它是否被緩存,並使用readfile()將其發送到瀏覽器。我喜歡將緩存的圖像存儲在doc根目錄之外,因此其他用戶無法訪問它,但這可能不是您正在做什麼(包括緩存和隱私)的因素。

SESSION可能是一個選項,但是當您需要重新生成多個頁面上的圖像並進行輕微更改時,這是最佳選擇,因此您沒有每次查詢db。

0

不容易 - HTML不包括髮送多個POST請求和渲染結果作爲在線資源的任何內在的支持,因爲它與< IMG/> <腳本/ >和定義一個SRC屬性其他標籤一樣。

即使AJAX解決方法可能也無濟於事。更改圖像的SRC屬性很簡單,但所做的只是讓瀏覽器根據您的配置從緩存或服務器獲取新映像。實際上,將圖像的內容更改爲來自HTTP POST的二進制響應涉及更多 - 儘管您可以查看base64編碼響應流並使用data:URL方案在頁面中顯示生成的圖像。

您可以隨時使用「單擊查看圖像」作爲提交按鈕,當然,您提交表單,服務器以圖像/ jpeg數據作爲響應,並且瀏覽器將其顯示爲獨立圖像。不過,我敢肯定你不能這樣做。

0

一個選項可能是將此數據存儲在會話變量中。你應該做一些測試,看看哪種方式你的服務器(一個或多個)處理它更好

+0

有了這個,我建議您在完成後將其從SESSION中刪除。如果它一直在那裏,PHP會在每次頁面調用時加載它,而不僅僅是圖像「頁面」。 – 2008-10-05 16:52:34

0

要擴大歐陽海因的評論:

有了這個,我建議在您從會話中刪除它完成了它。如果它一直在那裏,PHP會在每次頁面調用時加載它,而不僅僅是圖像「頁面」。 - 歐陽海因

是啊,我想了一下,同意,你不想與不必要的會話數據,但什麼堵塞管道,如果你不知道什麼時候刪除的數據?創建圖像後,您不能僅刪除會話數據,如果圖像要顯示兩次,該怎麼辦?除非圖像本身被緩存一段時間。

像這樣的事情

請求頁面

<? //index.php 
    $_SESSION['imagedata']['header'] = array('name'=>'Simon','backgroundcolor'=>'red'); 
    echo '<img src="image.php?image=header">'; 
    // more stuff 
    echo '<img src="image.php?image=header">'; // same image 
?>  

圖片腳本

<? //image.php 
    switch($_GET['image']){ 
     case 'header': 
      if(isSet($_SESSION['imagedata']['header'])){ 
       // create image using $_SESSION['imagedata']['header'] data 
       // create cached image 
       unset($_SESSION['imagedata']['header']); 
      else if(cache_file_exists()){ 
       // display cached file 
      }else{ 
       // no data, use plan B 
      } 
     break; 
    } 
?> 
+0

但是之後你還必須有某種程序在一段時間後清除那些緩存的圖像 – Jacob 2008-10-05 17:04:58

0

如果圖像可以通過ID來標識只是使用它。假設每次使用一些代理來使用標準HTTP緩存支持來提供圖像,相同的id應該產生相同的圖像。

0

在某些情況下,在某些限制條件下,您可以使用Iframe,在其中希望圖像顯示並使用指向該iframe的目標屬性發布。

所以主頁面有一個iframe。主頁面有一個表單,用於發佈I幀,服務器返回在iframe中顯示的圖像。

相關問題