Joomla Platform  13.1
Documentation des API du framework Joomla Platform
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Pages
Référence de la classe JCacheStorageFile
+ Graphe d'héritage de JCacheStorageFile:
+ Graphe de collaboration de JCacheStorageFile:

Liste de tous les membres

Fonctions membres publiques

 __construct ($options=array())
 get ($id, $group, $checkTime=true)
 getAll ()
 store ($id, $group, $data)
 remove ($id, $group)
 clean ($group, $mode=null)
 gc ()
 lock ($id, $group, $locktime)
 unlock ($id, $group=null)

Fonctions membres publiques statiques

static isSupported ()
- Fonctions membres publiques statiques inherited from JCacheStorage
static getInstance ($handler=null, $options=array())
static test ()
static addIncludePath ($path= '')

Fonctions membres protégées

 _checkExpire ($id, $group)
 _getFilePath ($id, $group)
 _deleteFolder ($path)
 _cleanPath ($path, $ds=DIRECTORY_SEPARATOR)
 _filesInFolder ($path, $filter= '.', $recurse=false, $fullpath=false, $exclude=array('.svn', 'CVS', '.DS_Store', '__MACOSX'), $excludefilter=array('^\..*', '.*~'))
 _folders ($path, $filter= '.', $recurse=false, $fullpath=false, $exclude=array('.svn', 'CVS', '.DS_Store', '__MACOSX'), $excludefilter=array('^\..*'))
- Fonctions membres protégées inherited from JCacheStorage
 _getCacheId ($id, $group)

Attributs protégés

 $_root
- Attributs protégés inherited from JCacheStorage
 $rawname

Additional Inherited Members

- Attributs publics inherited from JCacheStorage
 $_now
 $_lifetime
 $_locking
 $_language
 $_application
 $_hash

Description détaillée

Définition à la ligne 19 du fichier file.php.


Documentation des constructeurs et destructeur

JCacheStorageFile::__construct (   $options = array())

Constructor

Paramètres:
array$optionsOptional parameters
Depuis:
11.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 36 du fichier file.php.

{
$this->_root = $options['cachebase'];
}

Documentation des fonctions membres

JCacheStorageFile::_checkExpire (   $id,
  $group 
)
protected

Check to make sure cache is still valid, if not, delete it.

Paramètres:
string$idCache key to expire.
string$groupThe cache data group.
Renvoie:
boolean False if not valid
Depuis:
11.1

Définition à la ligne 346 du fichier file.php.

{
$path = $this->_getFilePath($id, $group);
// Check prune period
if (file_exists($path))
{
$time = @filemtime($path);
if (($time + $this->_lifetime) < $this->_now || empty($time))
{
@unlink($path);
return false;
}
return true;
}
return false;
}
JCacheStorageFile::_cleanPath (   $path,
  $ds = DIRECTORY_SEPARATOR 
)
protected

Function to strip additional / or \ in a path name

Paramètres:
string$pathThe path to clean
string$dsDirectory separator (optional)
Renvoie:
string The cleaned path
Depuis:
11.1

Définition à la ligne 501 du fichier file.php.

{
$path = trim($path);
if (empty($path))
{
$path = $this->_root;
}
else
{
// Remove double slashes and backslahses and convert all slashes and backslashes to DIRECTORY_SEPARATOR
$path = preg_replace('#[/\\\\]+#', $ds, $path);
}
return $path;
}
JCacheStorageFile::_deleteFolder (   $path)
protected

Quickly delete a folder of files

Paramètres:
string$pathThe path to the folder to delete.
Renvoie:
boolean True on success.
Depuis:
11.1

Définition à la ligne 405 du fichier file.php.

Références JText\_(), JLog\add(), JText\sprintf(), et JLog\WARNING.

{
// Sanity check
if (!$path || !is_dir($path) || empty($this->_root))
{
// Bad programmer! Bad Bad programmer!
JLog::add('JCacheStorageFile::_deleteFolder ' . JText::_('JLIB_FILESYSTEM_ERROR_DELETE_BASE_DIRECTORY'), JLog::WARNING, 'jerror');
return false;
}
$path = $this->_cleanPath($path);
// Check to make sure path is inside cache folder, we do not want to delete Joomla root!
$pos = strpos($path, $this->_cleanPath($this->_root));
if ($pos === false || $pos > 0)
{
JLog::add('JCacheStorageFile::_deleteFolder' . JText::sprintf('JLIB_FILESYSTEM_ERROR_PATH_IS_NOT_A_FOLDER', $path), JLog::WARNING, 'jerror');
return false;
}
// Remove all the files in folder if they exist; disable all filtering
$files = $this->_filesInFolder($path, '.', false, true, array(), array());
if (!empty($files) && !is_array($files))
{
if (@unlink($files) !== true)
{
return false;
}
}
elseif (!empty($files) && is_array($files))
{
foreach ($files as $file)
{
$file = $this->_cleanPath($file);
// In case of restricted permissions we zap it one way or the other
// as long as the owner is either the webserver or the ftp
if (@unlink($file))
{
// Do nothing
}
else
{
$filename = basename($file);
JLog::add('JCacheStorageFile::_deleteFolder' . JText::sprintf('JLIB_FILESYSTEM_DELETE_FAILED', $filename), JLog::WARNING, 'jerror');
return false;
}
}
}
// Remove sub-folders of folder; disable all filtering
$folders = $this->_folders($path, '.', false, true, array(), array());
foreach ($folders as $folder)
{
if (is_link($folder))
{
// Don't descend into linked directories, just delete the link.
if (@unlink($folder) !== true)
{
return false;
}
}
elseif ($this->_deleteFolder($folder) !== true)
{
return false;
}
}
// In case of restricted permissions we zap it one way or the other
// as long as the owner is either the webserver or the ftp
if (@rmdir($path))
{
$ret = true;
}
else
{
JLog::add('JCacheStorageFile::_deleteFolder' . JText::sprintf('JLIB_FILESYSTEM_ERROR_FOLDER_DELETE', $path), JLog::WARNING, 'jerror');
$ret = false;
}
return $ret;
}

+ Voici le graphe d'appel pour cette fonction :

JCacheStorageFile::_filesInFolder (   $path,
  $filter = '.',
  $recurse = false,
  $fullpath = false,
  $exclude = array('.svn', 'CVS', '.DS_Store', '__MACOSX'),
  $excludefilter = array('^\..*', '.*~') 
)
protected

Utility function to quickly read the files in a folder.

Paramètres:
string$pathThe path of the folder to read.
string$filterA filter for file names.
mixed$recurseTrue to recursively search into sub-folders, or an integer to specify the maximum depth.
boolean$fullpathTrue to return the full path to the file.
array$excludeArray with names of files which should not be shown in the result.
array$excludefilterArray of folder names to exclude
Renvoie:
array Files in the given folder.
Depuis:
11.1

Définition à la ligne 534 du fichier file.php.

Références JLog\add(), JText\sprintf(), et JLog\WARNING.

{
$arr = array();
// Check to make sure the path valid and clean
$path = $this->_cleanPath($path);
// Is the path a folder?
if (!is_dir($path))
{
JLog::add('JCacheStorageFile::_filesInFolder' . JText::sprintf('JLIB_FILESYSTEM_ERROR_PATH_IS_NOT_A_FOLDER', $path), JLog::WARNING, 'jerror');
return false;
}
// Read the source directory.
if (!($handle = @opendir($path)))
{
return $arr;
}
if (count($excludefilter))
{
$excludefilter = '/(' . implode('|', $excludefilter) . ')/';
}
else
{
$excludefilter = '';
}
while (($file = readdir($handle)) !== false)
{
if (($file != '.') && ($file != '..') && (!in_array($file, $exclude)) && (!$excludefilter || !preg_match($excludefilter, $file)))
{
$dir = $path . '/' . $file;
$isDir = is_dir($dir);
if ($isDir)
{
if ($recurse)
{
if (is_int($recurse))
{
$arr2 = $this->_filesInFolder($dir, $filter, $recurse - 1, $fullpath);
}
else
{
$arr2 = $this->_filesInFolder($dir, $filter, $recurse, $fullpath);
}
$arr = array_merge($arr, $arr2);
}
}
else
{
if (preg_match("/$filter/", $file))
{
if ($fullpath)
{
$arr[] = $path . '/' . $file;
}
else
{
$arr[] = $file;
}
}
}
}
}
closedir($handle);
return $arr;
}

+ Voici le graphe d'appel pour cette fonction :

JCacheStorageFile::_folders (   $path,
  $filter = '.',
  $recurse = false,
  $fullpath = false,
  $exclude = array('.svn', 'CVS', '.DS_Store', '__MACOSX'),
  $excludefilter = array('^\..*') 
)
protected

Utility function to read the folders in a folder.

Paramètres:
string$pathThe path of the folder to read.
string$filterA filter for folder names.
mixed$recurseTrue to recursively search into sub-folders, or an integer to specify the maximum depth.
boolean$fullpathTrue to return the full path to the folders.
array$excludeArray with names of folders which should not be shown in the result.
array$excludefilterArray with regular expressions matching folders which should not be shown in the result.
Renvoie:
array Folders in the given folder.
Depuis:
11.1

Définition à la ligne 620 du fichier file.php.

Références JLog\add(), JText\sprintf(), et JLog\WARNING.

{
$arr = array();
// Check to make sure the path valid and clean
$path = $this->_cleanPath($path);
// Is the path a folder?
if (!is_dir($path))
{
JLog::add('JCacheStorageFile::_folders' . JText::sprintf('JLIB_FILESYSTEM_ERROR_PATH_IS_NOT_A_FOLDER', $path), JLog::WARNING, 'jerror');
return false;
}
// Read the source directory
if (!($handle = @opendir($path)))
{
return $arr;
}
if (count($excludefilter))
{
$excludefilter_string = '/(' . implode('|', $excludefilter) . ')/';
}
else
{
$excludefilter_string = '';
}
while (($file = readdir($handle)) !== false)
{
if (($file != '.') && ($file != '..')
&& (!in_array($file, $exclude))
&& (empty($excludefilter_string) || !preg_match($excludefilter_string, $file)))
{
$dir = $path . '/' . $file;
$isDir = is_dir($dir);
if ($isDir)
{
// Removes filtered directories
if (preg_match("/$filter/", $file))
{
if ($fullpath)
{
$arr[] = $dir;
}
else
{
$arr[] = $file;
}
}
if ($recurse)
{
if (is_int($recurse))
{
$arr2 = $this->_folders($dir, $filter, $recurse - 1, $fullpath, $exclude, $excludefilter);
}
else
{
$arr2 = $this->_folders($dir, $filter, $recurse, $fullpath, $exclude, $excludefilter);
}
$arr = array_merge($arr, $arr2);
}
}
}
}
closedir($handle);
return $arr;
}

+ Voici le graphe d'appel pour cette fonction :

JCacheStorageFile::_getFilePath (   $id,
  $group 
)
protected

Get a cache file path from an id/group pair

Paramètres:
string$idThe cache data id
string$groupThe cache data group
Renvoie:
string The cache file path
Depuis:
11.1

Définition à la ligne 374 du fichier file.php.

{
$name = $this->_getCacheId($id, $group);
$dir = $this->_root . '/' . $group;
// If the folder doesn't exist try to create it
if (!is_dir($dir))
{
// Make sure the index file is there
$indexFile = $dir . '/index.html';
@ mkdir($dir) && file_put_contents($indexFile, '<!DOCTYPE html><title></title>');
}
// Make sure the folder exists
if (!is_dir($dir))
{
return false;
}
return $dir . '/' . $name . '.php';
}
JCacheStorageFile::clean (   $group,
  $mode = null 
)

Clean cache for a group given a mode.

Paramètres:
string$groupThe cache data group
string$modeThe mode for cleaning cache [group|notgroup] group mode : cleans all cache in the group notgroup mode : cleans all cache not in the group
Renvoie:
boolean True on success, false otherwise
Depuis:
11.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 183 du fichier file.php.

{
$return = true;
$folder = $group;
if (trim($folder) == '')
{
$mode = 'notgroup';
}
switch ($mode)
{
case 'notgroup':
$folders = $this->_folders($this->_root);
for ($i = 0, $n = count($folders); $i < $n; $i++)
{
if ($folders[$i] != $folder)
{
$return |= $this->_deleteFolder($this->_root . '/' . $folders[$i]);
}
}
break;
case 'group':
default:
if (is_dir($this->_root . '/' . $folder))
{
$return = $this->_deleteFolder($this->_root . '/' . $folder);
}
break;
}
return $return;
}
JCacheStorageFile::gc ( )

Garbage collect expired cache data

Renvoie:
boolean True on success, false otherwise.
Depuis:
11.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 223 du fichier file.php.

{
$result = true;
// Files older than lifeTime get deleted from cache
$files = $this->_filesInFolder($this->_root, '', true, true, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html'));
foreach ($files as $file)
{
$time = @filemtime($file);
if (($time + $this->_lifetime) < $this->_now || empty($time))
{
$result |= @unlink($file);
}
}
return $result;
}
JCacheStorageFile::get (   $id,
  $group,
  $checkTime = true 
)

Get cached data from a file by id and group

Paramètres:
string$idThe cache data id
string$groupThe cache data group
boolean$checkTimeTrue to verify cache time expiration threshold
Renvoie:
mixed Boolean false on failure or a cached data string
Depuis:
11.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 55 du fichier file.php.

{
$data = false;
$path = $this->_getFilePath($id, $group);
if ($checkTime == false || ($checkTime == true && $this->_checkExpire($id, $group) === true))
{
if (file_exists($path))
{
$data = file_get_contents($path);
if ($data)
{
// Remove the initial die() statement
$data = str_replace('<?php die("Access Denied"); ?>#x#', '', $data);
}
}
return $data;
}
else
{
return false;
}
}
JCacheStorageFile::getAll ( )

Get all cached data

Renvoie:
array The cached data
Depuis:
11.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 88 du fichier file.php.

{
$path = $this->_root;
$folders = $this->_folders($path);
$data = array();
foreach ($folders as $folder)
{
$files = $this->_filesInFolder($path . '/' . $folder);
$item = new JCacheStorageHelper($folder);
foreach ($files as $file)
{
$item->updateSize(filesize($path . '/' . $folder . '/' . $file) / 1024);
}
$data[$folder] = $item;
}
return $data;
}
static JCacheStorageFile::isSupported ( )
static

Test to see if the cache storage is available.

Renvoie:
boolean True on success, false otherwise.
Depuis:
12.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 247 du fichier file.php.

Références JFactory\getConfig().

{
return is_writable($conf->get('cache_path', JPATH_CACHE));
}

+ Voici le graphe d'appel pour cette fonction :

JCacheStorageFile::lock (   $id,
  $group,
  $locktime 
)

Lock cached item

Paramètres:
string$idThe cache data id
string$groupThe cache data group
integer$locktimeCached item max lock time
Renvoie:
boolean True on success, false otherwise.
Depuis:
11.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 264 du fichier file.php.

{
$returning = new stdClass;
$returning->locklooped = false;
$looptime = $locktime * 10;
$path = $this->_getFilePath($id, $group);
$_fileopen = @fopen($path, "r+b");
if ($_fileopen)
{
$data_lock = @flock($_fileopen, LOCK_EX);
}
else
{
$data_lock = false;
}
if ($data_lock === false)
{
$lock_counter = 0;
// Loop until you find that the lock has been released.
// That implies that data get from other thread has finished
while ($data_lock === false)
{
if ($lock_counter > $looptime)
{
$returning->locked = false;
$returning->locklooped = true;
break;
}
usleep(100);
$data_lock = @flock($_fileopen, LOCK_EX);
$lock_counter++;
}
}
$returning->locked = $data_lock;
return $returning;
}
JCacheStorageFile::remove (   $id,
  $group 
)

Remove a cached data file by id and group

Paramètres:
string$idThe cache data id
string$groupThe cache data group
Renvoie:
boolean True on success, false otherwise
Depuis:
11.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 161 du fichier file.php.

{
$path = $this->_getFilePath($id, $group);
if (!@unlink($path))
{
return false;
}
return true;
}
JCacheStorageFile::store (   $id,
  $group,
  $data 
)

Store the data to a file by id and group

Paramètres:
string$idThe cache data id
string$groupThe cache data group
string$dataThe data to store in cache
Renvoie:
boolean True on success, false otherwise
Depuis:
11.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 122 du fichier file.php.

{
$written = false;
$path = $this->_getFilePath($id, $group);
$die = '<?php die("Access Denied"); ?>#x#';
// Prepend a die string
$data = $die . $data;
$_fileopen = @fopen($path, "wb");
if ($_fileopen)
{
$len = strlen($data);
@fwrite($_fileopen, $data, $len);
$written = true;
}
// Data integrity check
if ($written && ($data == file_get_contents($path)))
{
return true;
}
else
{
return false;
}
}
JCacheStorageFile::unlock (   $id,
  $group = null 
)

Unlock cached item

Paramètres:
string$idThe cache data id
string$groupThe cache data group
Renvoie:
boolean True on success, false otherwise.
Depuis:
11.1

Réimplémentée à partir de JCacheStorage.

Définition à la ligne 321 du fichier file.php.

{
$path = $this->_getFilePath($id, $group);
$_fileopen = @fopen($path, "r+b");
if ($_fileopen)
{
$ret = @flock($_fileopen, LOCK_UN);
@fclose($_fileopen);
}
return $ret;
}

Documentation des données membres

JCacheStorageFile::$_root
protected

Définition à la ligne 27 du fichier file.php.


La documentation de cette classe a été générée à partir du fichier suivant :