0

我正在开发一个使用动态创建的图像来显示信息的网络应用程序。此数据当前使用 GET 查询字符串发送到图像,但对于更复杂的图像和数据,我担心会遇到 url 字符限制问题。

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

4

6 回答 6

5

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

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

SESSION 可能是一个选项,但是当您需要在多个页面上重新生成图像并进行细微更改时,这是最佳选择,因此您不必每次都查询数据库。

于 2008-10-05T16:27:06.027 回答
1

不容易 - HTML 不包含任何对发送多个 POST 请求并将结果呈现为内联资源的内在支持,就像 <img /> <script /> 和其他定义 SRC 属性的标签一样。

即使是 AJAX 变通方法也可能对您没有帮助。更改图像的 SRC 属性很容易,但所做的只是使浏览器获取新图像(从缓存或服务器,取决于您的配置)。实际上,将图像的内容从 HTTP POST 更改为二进制响应要复杂得多——尽管您可以查看对响应流进行 base64 编码并使用 data: URL 方案在页面中显示结果图像。

当然,您始终可以将“单击以查看图像”作为提交按钮的表单 - 您提交表单,服务器以图像/jpeg 数据响应,您的浏览器将其显示为独立图像。不过,我很确定你不能内联。

于 2008-10-05T16:38:34.973 回答
0

一种选择是将此数据存储在会话变量中。您应该做一些测试,看看您的服务器以哪种方式更好地处理它

于 2008-10-05T16:38:48.747 回答
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;
    }
?>
于 2008-10-05T17:03:54.687 回答
0

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

于 2008-10-05T18:09:02.810 回答
0

在某些情况下并在某些限制下,您可以使用 iframe,您希望您的图像出现并使用指向该 iframe 的目标属性发布。

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

于 2008-10-06T08:35:38.130 回答