21 static $quickcache_debugline;
23 if ($GLOBALS[
"QUICKCACHE_DEBUG"]) {
24 $quickcache_debugline++;
25 header(
"X-CacheDebug-$quickcache_debugline: $s");
34 if ($GLOBALS[
"QUICKCACHE_CLEANKEYS"]) {
37 if (strlen($key) > 255) {
55 if ($GLOBALS[
"QUICKCACHE_POST"]) {
56 $varkey =
"POST=".serialize($_POST);
58 $varkey .=
"GET=".serialize($_GET);
68 if ($GLOBALS[
"QUICKCACHE_IGNORE_DOMAIN"]) {
69 $name=$_SERVER[
"PHP_SELF"];
71 $name=$_SERVER[
"SCRIPT_URI"];
77 $name=
"http://".$_SERVER[
"SERVER_NAME"].$_SERVER[
"SCRIPT_NAME"];
87 if (!$GLOBALS[
"QUICKCACHE_ON"]) {
98 quickcache_debug(
"Cachedata for ".$GLOBALS[
"quickcache_key"].
" found, data restored");
112 if (headers_sent() || connection_aborted()) {
115 if (strpos($_SERVER[
"HTTP_ACCEPT_ENCODING"],
'x-gzip') !==
false) {
118 if (strpos($_SERVER[
"HTTP_ACCEPT_ENCODING"],
'gzip') !==
false) {
129 if (isset($GLOBALS[
"cachetimeout"])) {
130 $GLOBALS[
"QUICKCACHE_TIME"]=$GLOBALS[
"cachetimeout"];
134 if (!function_exists(
'gzcompress')) {
135 $GLOBALS[
"QUICKCACHE_USE_GZIP"] = 0;
139 if (!$GLOBALS[
"QUICKCACHE_POST"] && (count($_POST) > 0)) {
140 $GLOBALS[
"QUICKCACHE_ON"] = 0;
141 $GLOBALS[
"QUICKCACHE_TIME"] = -1;
145 if ($GLOBALS[
"QUICKCACHE_TIME"] == -1) {
146 $GLOBALS[
"QUICKCACHE_ON"] = 0;
150 header(
"X-Cache: QuickCache v".$GLOBALS[
"QUICKCACHE_VERSION"].
151 " - ".$GLOBALS[
"QUICKCACHE_TYPE"]);
159 if ($GLOBALS[
"QUICKCACHE_GC"]>0) {
160 mt_srand(time(NULL));
163 if (((mt_rand()%$precision)/$precision) <=
164 ($GLOBALS[
"QUICKCACHE_GC"]/100))
186 $GLOBALS[
"quickcachedata_datasize"],
187 $GLOBALS[
"quickcachedata_datacrc"]);
199 ob_start(
"quickcache_end");
200 ob_implicit_flush(0);
210 $datasize = strlen($contents);
211 $datacrc = crc32($contents);
213 if ($GLOBALS[
"QUICKCACHE_USE_GZIP"]) {
214 $gzdata = gzcompress($contents, $GLOBALS[
"QUICKCACHE_GZIP_LEVEL"]);
223 if ((!connection_aborted()) &&
224 $GLOBALS[
"QUICKCACHE_ON"] &&
225 ($GLOBALS[
"QUICKCACHE_TIME"] >= 0))
248 $myETag =
"\"qcd-$datacrc.$datasize\"";
249 header(
"ETag: $myETag");
250 $foundETag = isset($_SERVER[
"HTTP_IF_NONE_MATCH"]) ? stripslashes($_SERVER[
"HTTP_IF_NONE_MATCH"]) :
"";
253 if (strstr($foundETag, $myETag)) {
255 if(stristr($_SERVER[
"SERVER_SOFTWARE"],
"microsoft")) {
258 header(
"Status: 304 Not Modified");
260 if ( $QUICKCACHE_ISCGI ) {
261 header(
'Status: 304 Not Modified');
263 header(
'HTTP/1.0 304');
268 if ($GLOBALS[
"QUICKCACHE_USE_GZIP"]) {
274 header(
"Content-Encoding: $ENCODING");
275 $ret =
"\x1f\x8b\x08\x00\x00\x00\x00\x00";
276 $ret .= substr($gzdata, 0, strlen($gzdata) - 4);
277 $ret .= pack(
'V',$datacrc);
278 $ret .= pack(
'V',$datasize);
281 $ret = gzuncompress($gzdata);
quickcache_flush($gzdata, $datasize, $datacrc)
quickcache_write($gzdata, $datasize, $datacrc)
quickcache_end($contents)