如何将POST请求的结果显示为图像?
我正在使用动态创建的图像来显示信息的网络应用程序。这些数据目前使用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