我正在开发一个Web应用程序,其中动态创建的图像用于显示信息。此数据当前使用GET查询字符串发送到图像,但是更复杂的图像和数据我担心会遇到网址字符限制的问题。
我可以简单地将记录ID传递给图像,并将此查询存储到数据库中,但这显然会增加对服务器的需求。有什么方法可以将使用POST检索到的图像添加到HTML文档中吗?
答案 0 :(得分:5)
最后,我认为查询数据库可能会更快。从数据库中获取一个小字符串(例如最多2000个字符)非常快,并且可能比用户一直发布它更快,特别是如果页面上有超过1个字符串。
最好的选择是创建一次图像,如果不改变则缓存它。再次请求图像时,检查它是否已缓存,只需使用readfile()将其发送到浏览器。我喜欢将缓存的图像存储在doc root之外,因此其他人无法访问它,但这可能不是您正在做的事情(缓存和隐私)的一个因素。
SESSION可能是一个选项,但是当您需要在稍微更改的情况下在多个页面上重新生成图像时,这是最佳选项,因此您不必每次都查询数据库。
答案 1 :(得分:1)
不容易 - HTML不包含任何内部支持,用于发送多个POST请求并将结果呈现为内联资源,就像使用< img />一样。 < script />以及定义SRC属性的其他标记。
即使是AJAX解决方法也许对您没有帮助。更改图像的SRC属性很简单,但所有这一切都会导致浏览器获取新图像(来自缓存或服务器,具体取决于您的配置)。实际上,将图像的内容更改为来自HTTP POST的二进制响应更为复杂 - 尽管您可以查看base64编码响应流并使用data:URL方案来显示生成的图像在你的页面。
您可以随时使用“点击查看图像”作为提交按钮的表单 - 当然 - 您提交表单,服务器使用image / jpeg数据进行响应,并且您的浏览器将其显示为独立图像。不过,我很确定你不能内联。
答案 2 :(得分:0)
一个选项可能是将此数据存储在会话变量中。你应该做一些测试,看看你的服务器处理它的方式更好
答案 3 :(得分:0)
扩展Darryl Hein的评论:
有了这个,我建议你完成后从SESSION中删除它。如果它一直在那里,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;
}
?>
答案 4 :(得分:0)
如果图像可以通过id识别,请使用它。假设每次使用标准HTTP缓存支持时,只需使用一些代理服务图像,相同的id应生成相同的图像。
答案 5 :(得分:0)
在某些情况下,在某些限制条件下,您可以使用iframe,您希望图片显示在apear上,并使用指向该iframe的目标属性进行发布。
所以主页面有一个iframe。主页面有一个发布I帧的表单,服务器返回iframe中显示的图像。