如何将POST请求的结果显示为图像?

如何将POST请求的结果显示为图像?

问题描述:

我正在使用动态创建的图像来显示信息的网络应用程序。这些数据目前使用GET查询字符串发送到图像,但具有更复杂的图像和数据,我担心遇到url字符限制问题。如何将POST请求的结果显示为图像?

我可以简单地将记录ID传递给图像,并将此查询作为数据库,但这显然会增加对服务器的需求。有什么方法可以将使用POST检索的图像添加到HTML文档中?

最后,我认为查询数据库可能会更快。要从数据库中获取一个小字符串(比如说多达2000个字符)非常快,并且可能比让用户一直发布更快,特别是当页面上有多个字符时。

最好的选择是创建一次图像并缓存它,如果它没有改变。当再次请求图像时,检查它是否被缓存,并使用readfile()将其发送到浏览器。我喜欢将缓存的图像存储在doc根目录之外,因此其他用户无法访问它,但这可能不是您正在做什么(包括缓存和隐私)的因素。

SESSION可能是一个选项,但是当您需要重新生成多个页面上的图像并进行轻微更改时,这是最佳选择,因此您没有每次查询db。

不容易 - HTML不包括发送多个POST请求和渲染结果作为在线资源的任何内在的支持,因为它与< IMG/> <脚本/ >和定义一个SRC属性其他标签一样。

即使AJAX解决方法可能也无济于事。更改图像的SRC属性很简单,但所做的只是让浏览器根据您的配置从缓存或服务器获取新映像。实际上,将图像的内容更改为来自HTTP POST的二进制响应涉及更多 - 尽管您可以查看base64编码响应流并使用data:URL方案在页面中显示生成的图像。

您可以随时使用“单击查看图像”作为提交按钮,当然,您提交表单,服务器以图像/ jpeg数据作为响应,并且浏览器将其显示为独立图像。不过,我敢肯定你不能这样做。

一个选项可能是将此数据存储在会话变量中。你应该做一些测试,看看哪种方式你的服务器(一个或多个)处理它更好

+0

有了这个,我建议您在完成后将其从SESSION中删除。如果它一直在那里,PHP会在每次页面调用时加载它,而不仅仅是图像“页面”。 – 2008-10-05 16:52:34

要扩大欧阳海因的评论:

有了这个,我建议在您从会话中删除它完成了它。如果它一直在那里,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

如果图像可以通过ID来标识只是使用它。假设每次使用一些代理来使用标准HTTP缓存支持来提供图像,相同的id应该产生相同的图像。

在某些情况下,在某些限制条件下,您可以使用Iframe,在其中希望图像显示并使用指向该iframe的目标属性发布。

所以主页面有一个iframe。主页面有一个表单,用于发布I帧,服务器返回在iframe中显示的图像。