我正在使用動態創建的圖像來顯示信息的網絡應用程序。這些數據目前使用GET查詢字符串發送到圖像,但具有更復雜的圖像和數據,我擔心遇到url字符限制問題。如何將POST請求的結果顯示爲圖像?
我可以簡單地將記錄ID傳遞給圖像,並將此查詢作爲數據庫,但這顯然會增加對服務器的需求。有什麼方法可以將使用POST檢索的圖像添加到HTML文檔中?
我正在使用動態創建的圖像來顯示信息的網絡應用程序。這些數據目前使用GET查詢字符串發送到圖像,但具有更復雜的圖像和數據,我擔心遇到url字符限制問題。如何將POST請求的結果顯示爲圖像?
我可以簡單地將記錄ID傳遞給圖像,並將此查詢作爲數據庫,但這顯然會增加對服務器的需求。有什麼方法可以將使用POST檢索的圖像添加到HTML文檔中?
最後,我認爲查詢數據庫可能會更快。要從數據庫中獲取一個小字符串(比如說多達2000個字符)非常快,並且可能比讓用戶一直髮布更快,特別是當頁面上有多個字符時。
最好的選擇是創建一次圖像並緩存它,如果它沒有改變。當再次請求圖像時,檢查它是否被緩存,並使用readfile()將其發送到瀏覽器。我喜歡將緩存的圖像存儲在doc根目錄之外,因此其他用戶無法訪問它,但這可能不是您正在做什麼(包括緩存和隱私)的因素。
SESSION可能是一個選項,但是當您需要重新生成多個頁面上的圖像並進行輕微更改時,這是最佳選擇,因此您沒有每次查詢db。
不容易 - HTML不包括髮送多個POST請求和渲染結果作爲在線資源的任何內在的支持,因爲它與< IMG/> <腳本/ >和定義一個SRC屬性其他標籤一樣。
即使AJAX解決方法可能也無濟於事。更改圖像的SRC屬性很簡單,但所做的只是讓瀏覽器根據您的配置從緩存或服務器獲取新映像。實際上,將圖像的內容更改爲來自HTTP POST的二進制響應涉及更多 - 儘管您可以查看base64編碼響應流並使用data:URL方案在頁面中顯示生成的圖像。
您可以隨時使用「單擊查看圖像」作爲提交按鈕,當然,您提交表單,服務器以圖像/ jpeg數據作爲響應,並且瀏覽器將其顯示爲獨立圖像。不過,我敢肯定你不能這樣做。
一個選項可能是將此數據存儲在會話變量中。你應該做一些測試,看看哪種方式你的服務器(一個或多個)處理它更好
要擴大歐陽海因的評論:
有了這個,我建議在您從會話中刪除它完成了它。如果它一直在那裏,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;
}
?>
但是之後你還必須有某種程序在一段時間後清除那些緩存的圖像 – Jacob 2008-10-05 17:04:58
如果圖像可以通過ID來標識只是使用它。假設每次使用一些代理來使用標準HTTP緩存支持來提供圖像,相同的id應該產生相同的圖像。
在某些情況下,在某些限制條件下,您可以使用Iframe,在其中希望圖像顯示並使用指向該iframe的目標屬性發布。
所以主頁面有一個iframe。主頁面有一個表單,用於發佈I幀,服務器返回在iframe中顯示的圖像。
有了這個,我建議您在完成後將其從SESSION中刪除。如果它一直在那裏,PHP會在每次頁面調用時加載它,而不僅僅是圖像「頁面」。 – 2008-10-05 16:52:34