ch09s04.html
9.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Using the cache with Client Side Image Maps (CSIM)</title><link rel="stylesheet" type="text/css" href="manual.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.0"><link rel="home" href="index.html" title="JpGraph Manual"><link rel="up" href="ch09.html" title="Chapter 9. Using the JpGraph cache system"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using the cache with Client Side Image Maps (CSIM)</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center">Chapter 9. Using the JpGraph cache system</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="sect1" title="Using the cache with Client Side Image Maps (CSIM)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sect1.cache-csim"></a>Using the cache with Client Side Image Maps (CSIM)</h2></div></div></div>
<p>(See <a class="xref" href="ch10.html" title="Chapter 10. Using CSIM (Client side image maps)">Chapter 10. <i>Using CSIM (Client side image maps)</i></a> for a full description on the usage of CSIM
together with the library)</p>
<p>You can also use the cache system for images that uses image maps (CSIM) as well.
The cache system interface is slightly different in this case since the cache needs
to store both the cached image and the cached image-map. It also needs to change due
to the added complexity with CSIM scripts not sending back an image but rather a
pre-formatted HTML page. The two major differences from the non-CSIM cache
is:</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>The cached version will <span class="bold"><strong>not</strong></span> be stored in the previous defined cache
directory. It uses a different cache directory.</p>
</li><li class="listitem">
<p>The script that want to make use of the cache system together with
CSIM must call an extra method, <code class="code">CheckCSIMCache()</code>, to check
the cache.</p>
</li></ol></div><p>
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>Please remember that when using CSIM you must end your script with a call
to <code class="code">Graph::StrokeCSIM()</code> method instead of the
<code class="code">Graph::Stroke()</code> used for non-CSIM. </p>
</div><p>
</p>
<p>To use the cache with CSIM you have to call the
<code class="code">Graph::CheckCSIMCache()</code>. As with the caching for non-CSIM you have
to supply a name to be used for the cached version (it can be manually or automatic)
as well as an optional timeout value. The default timeout value if nothing else is
specified is 60 minutes.</p>
<p>The name argument requires some more explanations. The file name must be specified
as a relative name. </p>
<p>For example "<code class="filename">myimage</code>" or perhaps
"<code class="filename">firstpage/image3</code>". </p>
<p>The reason for his is that a script that uses CSIM does not send back an image.
Instad it sends back a HTML page which includes the image map coordinates and has an
included "<span class="markup"><img href=" ... "></span>" tag which references the image
script recursively in normal cases but if the image is found in the cache this
reference will be to a static image instead.</p>
<p>Depending on the installation of the library this will now end up in the directory
specified in the <code class="code">CSIMCACHE_DIR</code> define. This must also be a directory
accessible by the normal HTTP/PHP process. By default, if nothing else is specified,
a directory called "<code class="filename">csimcache</code>" will be created in the same
directory as the image script itself.</p>
<p>The default value has the drawback that the directory from where the script is
executed must also be writable by the process running PHP. Best practice here is to
keep the number of writable directory for PHP down to a minimum and re-use the same
directory as is used for the standard cache. </p>
<p>This however, requires that the PHP and HTTP setup is such that the cache
directory is also accessible by the HTTP server from the htdocs root.</p>
<p>The <code class="code">CheckCSIMCache()</code> method checks the cache for an existing cached
version and if found it returns it and halts execution of the script. So, this call
should be the first call after the creation of the core graph instance, i.e.
<code class="code">$graph = Graph($width,$height)</code> and before any heavy work is done to
create the image so that no unnecessary work is done in case a cached image + image
map is found.</p>
<p>The general structure of a script that uses CSIM and cache should follow the
template shown in </p>
<p>
</p><div class="example"><a name="id2535468"></a><p class="title"><b>Example 9.2. General structure for a CSIM script that uses CSIM</b></p><div class="example-contents">
<div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-reserved">require_once</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">jpgraph.php</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> ... any necessary includes</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$width</span><span class="hl-code"> = ...
</span><span class="hl-var">$height</span><span class="hl-code"> = ...
</span><span class="hl-var">$graph</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Graph</span><span class="hl-brackets">(</span><span class="hl-var">$width</span><span class="hl-code">,</span><span class="hl-var">$height</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Check cache and use a 10 min timeout</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">CheckCSIMCache</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">csim_image1</span><span class="hl-quotes">'</span><span class="hl-code">,</span><span class="hl-number">10</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> If a cached version exists, execution halts here</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> and the cached HTML image map is sent back</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> ... construct and format the graph</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> ... finally send back the image map HTML script</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">StrokeCSIM</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div>
</div></div><p><br class="example-break">
</p>
<p>Please note that it is not necessary to pass any argument to the final call of
StrokeCSIM()</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>The CSIM caching works by storing two files in the cache directory. One
file being the image and the other file being the corresponding image map as
a pure HTML file. The HTML file will reference the static image.</p>
</div><p>
</p>
</div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"><a accesskey="u" href="ch09.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>