Apache + php gd,缓存图像范例

时间:2010-12-08 21:30:46

标签: php apache caching text gd

请仔细阅读,希望你能帮助我完成我的范例;)

基本版,像薄荷一样 - - -

我有一个php + gd脚本,可以生成给定文本的图像,如下所示:

[img src =“renderImage.php?text = John Doe”alt =“Jonn Doe”/]

输出是在其上显示预先格式化文字的图像。我们说12px arial#000000

然后我将apache mod_rewrite添加到等式中,以便服务器尝试访问缓存的图像,以及它是否不存在,通过php脚本生成它以生成它(并保存为¨John.png ¨):

[img src =“/ images / cached / John Doe 2”alt =“John Doe 2”/] < - 这可以虚拟地转换为 - > [img src =“renderImage.php?text = John Doe”alt =“Jonn Doe”/]

现在,高级版本 - - -

问题有两个:

1.-使用更加可自定义的api修改php脚本:

[img src =“renderImage.php?text = John Doe& size = 36& font = verdana& color = FFFFFF”alt =“Jonn Doe”/]

2.-由于我们使用'text'占位符的摘录保存图像(例如renderImage.php?text = John Doe as John.png),当我们获得具有类似'text'占位符的图像时,我们可以获得类似的文件名,例如:

[img src =“renderImage.php?text = John Doe& size = 36& font = verdana& color = FFFFFF”alt =“Jonn Doe”/]

[img src =“renderImage.php?text = John Doe在这里!size = 24& font = tahoma& color = 333333”alt =“Jonn Doe”/]

两者都将保存为John.png!

* 最后,范例 - - - *

我该如何解决这个问题?我已经找到了一个解决方案:将图像保存在php中,使用特定的加密类名称,如下所示:

Pepe pecas | 31/12/2010 | 9:57 | 72 / arial / FFFFFF.png

Pepe pecas | 31122010 | 9:57 | 72arialFFFFFF.png

然后在标记中访问它们:

* [img src =“/ images / cached / JohnDoe_24arial333333.png”alt =“John Doe”/] *

将使用mod_rewrite正则表达式将apache转换为:

[img src =“renderImage.php?text = John Doe& size = 24& font = arial& color = 333333”alt =“Jonn Doe”/]

你在想什么?

3 个答案:

答案 0 :(得分:2)

为什么不对整个查询字符串执行MD5哈希并将图像命名为。这将是一种相当简单的方法来查看该组合是否存在。

答案 1 :(得分:0)

如果您允许完全任意组合,那么您将浪费大量磁盘空间缓存图像。什么是阻止恶意用户循环遍历所有40亿个可能的颜色代码,字体大小1-200,以及多少字体?这个“一个”图像最终将在您的驱动器上拥有800多亿个图像。

特别是如果这是一个面向公众的页面。写一个蜘蛛来击中所有可能的组合是微不足道的。在用户带宽成本最低的情况下,它们会耗尽您的磁盘空间并使您的CPU挂起,从而产生无用的图像。

答案 2 :(得分:-1)

@Marc B,我打算用它来生成标题[h1] [/ h1]

@niggles,这可以工作,我还会将文本属性添加到哈希计算中,以使文本更加独特。

那么从用户的直接执行中隐藏脚本呢?