OpenSencillo  2015.002
cache_main.php File Reference

Go to the source code of this file.

Functions

 quickcache_debug ($s)
 quickcache_key ()
 quickcache_varkey ()
 quickcache_scriptkey ()
 quickcache_check ()
 quickcache_encoding ()
 quickcache_init ()
 quickcache_gc ()
 quickcache_start ()
 quickcache_end ($contents)
 quickcache_flush ($gzdata, $datasize, $datacrc)

Function Documentation

Definition at line 86 of file cache_main.php.

                            {
  if (!$GLOBALS["QUICKCACHE_ON"]) {
    quickcache_debug("Cache has been disabled!");
    return false;
  }

  // We need to set this global, as ob_start only calls the given method
  // with no parameters.
  $GLOBALS["quickcache_key"] = quickcache_key();

  // Can we read the cached data for this key ?
  if (quickcache_restore()) {
    quickcache_debug("Cachedata for ".$GLOBALS["quickcache_key"]." found, data restored");
    return true;
  } else {
    // No cache data (yet) or unable to read
    quickcache_debug("No (valid) cachedata for ".$GLOBALS["quickcache_key"]);
    return false;
  }
}
quickcache_debug ( s)

Definition at line 20 of file cache_main.php.

                              {
  static $quickcache_debugline;

  if ($GLOBALS["QUICKCACHE_DEBUG"]) {
    $quickcache_debugline++;
    header("X-CacheDebug-$quickcache_debugline: $s");
  }
}

Definition at line 111 of file cache_main.php.

                               {
  if (headers_sent() || connection_aborted()) {
    return false;
  }
  if (strpos($_SERVER["HTTP_ACCEPT_ENCODING"],'x-gzip') !== false) {
    return "x-gzip";
  }
  if (strpos($_SERVER["HTTP_ACCEPT_ENCODING"],'gzip') !== false) {
    return "gzip";
  }
  return false;
}
quickcache_end ( contents)

Definition at line 207 of file cache_main.php.

                                   {
  quickcache_debug("Callback happened");

  $datasize = strlen($contents);
  $datacrc = crc32($contents);

  if ($GLOBALS["QUICKCACHE_USE_GZIP"]) {
    $gzdata = gzcompress($contents, $GLOBALS["QUICKCACHE_GZIP_LEVEL"]);
  } else {
    $gzdata = $contents;
  }

  // If the connection was aborted, do not write the cache.
  // We don't know if the data we have is valid, as the user
  // has interupted the generation of the page.
  // Also check if quickcache is not disabled
  if ((!connection_aborted()) &&
       $GLOBALS["QUICKCACHE_ON"] &&
      ($GLOBALS["QUICKCACHE_TIME"] >= 0))
  {
    quickcache_debug("Writing cached data to storage");
    // write the cache with the current data
    quickcache_write($gzdata, $datasize, $datacrc);
  }

  // Handle type-specific additional code if required
  quickcache_do_end();

  // Return flushed data
  return quickcache_flush($gzdata, $datasize, $datacrc);
}
quickcache_flush ( gzdata,
datasize,
datacrc 
)

Definition at line 246 of file cache_main.php.

                                                        {
  // First check if we can send last-modified
  $myETag = "\"qcd-$datacrc.$datasize\"";
  header("ETag: $myETag");
  $foundETag = isset($_SERVER["HTTP_IF_NONE_MATCH"]) ? stripslashes($_SERVER["HTTP_IF_NONE_MATCH"]) : "";
  $ret = NULL;

  if (strstr($foundETag, $myETag)) {
    // Not modified!
    if(stristr($_SERVER["SERVER_SOFTWARE"], "microsoft")) {
      // IIS has already sent a HTTP/1.1 200 by this stage for
      // some strange reason
      header("Status: 304 Not Modified");
    } else {
      if ( $QUICKCACHE_ISCGI ) {
        header('Status: 304 Not Modified');
      } else {
        header('HTTP/1.0 304');
      }
    }
  } else {
    // Are we gzipping ?
    if ($GLOBALS["QUICKCACHE_USE_GZIP"]) {
      $ENCODING = quickcache_encoding();
      if ($ENCODING) {
        // compressed output: set header. Need to modify, as
        // in some versions, the gzipped content is not what
        // your browser expects.
        header("Content-Encoding: $ENCODING");
        $ret =  "\x1f\x8b\x08\x00\x00\x00\x00\x00";
        $ret .= substr($gzdata, 0, strlen($gzdata) - 4);
        $ret .= pack('V',$datacrc);
        $ret .= pack('V',$datasize);
      } else {
        // Darn, we need to uncompress :(
        $ret = gzuncompress($gzdata);
      }
    } else {
      // So content isn't gzipped either
      $ret=$gzdata;
    }
  }
  return $ret;
}

Definition at line 157 of file cache_main.php.

                         {
  // Should we garbage collect ?
  if ($GLOBALS["QUICKCACHE_GC"]>0) {
    mt_srand(time(NULL));
    $precision=100000;
    // Garbagecollection probability
    if (((mt_rand()%$precision)/$precision) <=
        ($GLOBALS["QUICKCACHE_GC"]/100))
    {
      quickcache_debug("GarbageCollection hit!");
      quickcache_do_gc();
    }
  }
}

Definition at line 127 of file cache_main.php.

                           {
  // Override default QUICKCACHE_TIME ?
  if (isset($GLOBALS["cachetimeout"])) {
    $GLOBALS["QUICKCACHE_TIME"]=$GLOBALS["cachetimeout"];
  }

  // Force gzip off if gzcompress does not exist
  if (!function_exists('gzcompress')) {
    $GLOBALS["QUICKCACHE_USE_GZIP"]  = 0;
  }

  // Force cache off when POST occured when you don't want it cached
  if (!$GLOBALS["QUICKCACHE_POST"] && (count($_POST) > 0)) {
    $GLOBALS["QUICKCACHE_ON"] = 0;
    $GLOBALS["QUICKCACHE_TIME"] = -1;
  }

  // A cachetimeout of -1 disables writing, only ETag and content encoding
  if ($GLOBALS["QUICKCACHE_TIME"] == -1) {
    $GLOBALS["QUICKCACHE_ON"] = 0;
  }

  // Output header to recognize version
  header("X-Cache: QuickCache v".$GLOBALS["QUICKCACHE_VERSION"].
          " - ".$GLOBALS["QUICKCACHE_TYPE"]);
}

Definition at line 33 of file cache_main.php.

                          {
  if ($GLOBALS["QUICKCACHE_CLEANKEYS"]) {
    $key = eregi_replace("[^A-Z,0-9,=]", "_", quickcache_scriptkey());
    $key .= ".".eregi_replace("[^A-Z,0-9,=]", "_", quickcache_varkey());
    if (strlen($key) > 255) {
      // Too large, fallback to md5!
      $key = md5(quickcache_scriptkey().quickcache_varkey());
    }
  } else {
      $key = md5(quickcache_scriptkey().quickcache_varkey());
  }
  quickcache_debug("Cachekey is set to $key");
  return $key;
}

Definition at line 66 of file cache_main.php.

                                {
  // These should be available, unless running commandline
  if ($GLOBALS["QUICKCACHE_IGNORE_DOMAIN"]) {
    $name=$_SERVER["PHP_SELF"];
  } else {
    $name=$_SERVER["SCRIPT_URI"];
  }

  // Commandline mode will also fail this one, I'm afraid, as there is no
  // way to determine the scriptname
  if ($name=="") {
    $name="http://".$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"];
  }

  quickcache_debug("Cache scriptkey is set to $name");
  return $name;
}

Definition at line 175 of file cache_main.php.

                            {
  // Initialize cache
  quickcache_init();

  // Handle type-specific additional code if required
  quickcache_do_start();

  // Check cache
  if (quickcache_check()) {
    // Cache is valid and restored: flush it!
    print quickcache_flush($GLOBALS["quickcachedata_gzdata"],
                        $GLOBALS["quickcachedata_datasize"],
                        $GLOBALS["quickcachedata_datacrc"]);
    // Handle type-specific additional code if required
    quickcache_do_end();
    exit;
  } else {
    // if we came here, cache is invalid: go generate page
    // and wait for quickcache_end() which will be called automagically

    // Check garbagecollection
    quickcache_gc();

    // Go generate page and wait for callback
    ob_start("quickcache_end");
    ob_implicit_flush(0);
  }
}

Definition at line 53 of file cache_main.php.

                             {
  $varkey = "";
  if ($GLOBALS["QUICKCACHE_POST"]) {
    $varkey = "POST=".serialize($_POST);
  }
  $varkey .= "GET=".serialize($_GET);
  quickcache_debug("Cache varkey is set to $varkey");
  return $varkey;
}
 All Data Structures Files Functions Variables