/libraries/domit/php_text_cache.php
https://github.com/MaBelleEcole/Main · PHP · 192 lines · 94 code · 25 blank · 73 comment · 25 complexity · 884f68b13a4a31208efd59f684453704 MD5 · raw file
- <?php
- /**
- * PHP Text Cache is a simple caching class for for saving/retrieving local copies of url data
- * @package php_text_cache
- * @version 0.3-pre
- * @copyright (C) 2004 John Heinstein. All rights reserved
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License
- * @author John Heinstein <johnkarl@nbnet.nb.ca>
- * @link http://www.engageinteractive.com/php_text_cache/ PHP Text Cache Home Page
- * PHP Text Cache is Free Software
- **/
- if (!defined('PHP_TEXT_CACHE_INCLUDE_PATH')) {
- define('PHP_TEXT_CACHE_INCLUDE_PATH', (dirname(__FILE__) . "/"));
- }
- require_once(PHP_TEXT_CACHE_INCLUDE_PATH . 'php_http_connector.php');
- /**
- * A simple caching class for saving/retrieving local copies of url data
- *
- * @package php_text_cache
- * @author John Heinstein <johnkarl@nbnet.nb.ca>
- */
- class php_text_cache extends php_http_connector {
- /** @var string The directory in which cached files are stored */
- var $cacheDir;
- /** @var int The amount time of time to wait before a cached file should be updated */
- var $cacheTime;
- /** @var boolean True if an HTTP client should be used to establish the connection */
- var $doUseHTTPClient;
- /** @var int Time in seconds to disconnect after attempting an http connection */
- var $httpTimeout;
- /**
- * Constructor
- * @param string Directory in which to store the cache files
- * @param int Expiry time for cache file (-1 signifies no expiry limit)
- * @param int Time in seconds to disconnect after attempting an http connection
- */
- function php_text_cache($cacheDir = './', $cacheTime = -1, $timeout = 0) {
- $this->cacheDir = $cacheDir;
- $this->cacheTime = $cacheTime;
- $this->timeout = $timeout;
- } //php_text_cache
- /**
- * Specifies the default timeout value for connecting to a host
- * @param int The number of seconds to timeout when attempting to connect to a server
- */
- function setTimeout($timeout) {
- $this->timeout = $timeout;
- } //setTimeout
- /**
- * Gets data from an url, or its cache file
- *
- * @param string The url of the data
- * @return string The data at the specified url
- */
- function getData($url) {
- $cacheFile = $this->getCacheFileName($url);
- if (is_file($cacheFile)) {
- $fileStats = stat($cacheFile);
- $lastChangeTime = $fileStats[9]; //mtime
- $currTime = time();
- if (($this->cacheTime != -1) && ($currTime - $lastChangeTime) > $this->cacheTime) { //get data from url
- return $this->fromURL($url, $cacheFile);
- }
- else { //get data from file
- return $this->fromCache($cacheFile);
- }
- }
- else {
- return $this->fromURL($url, $cacheFile);
- }
- } //getData
- /**
- * Given an url, returns the path to the cache file
- *
- * Uses an md5 hash of the url. This can be
- * overridden if a different approach is required
- *
- * @param string The url of the data
- * @return string The cache file name
- */
- function getCacheFileName($url) {
- return ($this->cacheDir . md5($url));
- } //getCacheFileName
- /**
- * Establishes a connection, given an url
- * @param string The url of the data
- */
- function establishConnection($url) {
- require_once(PHP_TEXT_CACHE_INCLUDE_PATH . 'php_http_client_generic.php');
- $host = php_http_connection::formatHost($url);
- $host = substr($host, 0, strpos($host, '/'));
- $this->setConnection($host, '/', 80, $this->timeout);
- } //establishConnection
- /**
- * Specifies whether an HTTP client should be used to establish a connection
- * @param boolean True if an HTTP client is to be used to establish the connection
- */
- function useHTTPClient($truthVal) {
- // fixes bug identified here: sarahk.pcpropertymanager.com/blog/using-domit-rss/225/
- //$this->doUseHTTPClient = truthVal;
- $this->doUseHTTPClient = $truthVal;
- } //useHTTPClient
- /**
- * Gets data from an url and caches a copy of the data
- * @param string The url for the data
- * @param string The cache file path
- * @return string The contents of the url
- */
- function fromURL($url, $cacheFile) {
- $fileContents = '';
- if ($this->httpConnection != null) {
- $response =& $this->httpConnection->get($url);
- if ($response != null) {
- $fileContents = $response->getResponse();
- }
- }
- else if ($this->doUseHTTPClient) {
- $this->establishConnection($url);
- $response =& $this->httpConnection->get($url);
- if ($response != null) {
- $fileContents = $response->getResponse();
- }
- }
- else {
- $fileContents = $this->fromFile($url);
- }
- //if file is empty, might need to establish an
- //http connection to get the data
- if (($fileContents == '') && !$this->doUseHTTPClient) {
- $this->establishConnection($url);
- $response =& $this->httpConnection->get($url);
- if ($response != null) {
- $fileContents = $response->getResponse();
- }
- }
- if ($fileContents != '') {
- require_once(PHP_TEXT_CACHE_INCLUDE_PATH . 'php_file_utilities.php');
- php_file_utilities::putDataToFile($cacheFile, $fileContents, 'w');
- }
- return $fileContents;
- } //fromURL
- /**
- * Get text from cache file
- * @param string The file path
- * @return string The text contained in the file, or an empty string
- */
- function fromCache($cacheFile) {
- return $this->fromFile($cacheFile);
- } //fromCache
- /**
- * Get text from an url or file
- * @param string The url or file path
- * @return string The text contained in the url or file, or an empty string
- */
- function fromFile($filename) {
- if (function_exists('file_get_contents')) {
- return @file_get_contents($filename);
- }
- else {
- require_once(PHP_TEXT_CACHE_INCLUDE_PATH . 'php_file_utilities.php');
- $fileContents =& php_file_utilities::getDataFromFile($filename, 'r');
- return $fileContents;
- }
- return '';
- } //fromFile
- } //php_text_cache
- ?>