"", // blank for auto
"default_chmod" => 0777, // 0777 , 0666, 0644
/*
* Fall back when old driver is not support
*/
"fallback" => "files",
"securityKey" => "auto",
"htaccess" => true,
"path" => "",
"memcache" => array(
array("127.0.0.1",11211,1),
// array("new.host.ip",11211,1),
),
"redis" => array(
"host" => "127.0.0.1",
"port" => "",
"password" => "",
"database" => "",
"timeout" => ""
),
"ssdb" => array(
"host" => "127.0.0.1",
"port" => 8888,
"password" => "",
"timeout" => ""
),
"extensions" => array(),
);
protected static $tmp = array();
var $instance;
function __construct($storage = "", $config = array()) {
if(empty($config)) {
$config = phpFastCache::$config;
}
$config['storage'] = $storage;
$storage = strtolower($storage);
if($storage == "" || $storage == "auto") {
$storage = self::getAutoClass($config);
}
$this->instance = phpFastCache($storage,$config);
}
public function __call($name, $args) {
return call_user_func_array(array($this->instance, $name), $args);
}
/*
* Cores
*/
public static function getAutoClass($config) {
$driver = "files";
$path = self::getPath(false,$config);
if(is_writeable($path)) {
$driver = "files";
}else if(extension_loaded('apc') && ini_get('apc.enabled') && strpos(PHP_SAPI,"CGI") === false) {
$driver = "apc";
}else if(class_exists("memcached")) {
$driver = "memcached";
}elseif(extension_loaded('wincache') && function_exists("wincache_ucache_set")) {
$driver = "wincache";
}elseif(extension_loaded('xcache') && function_exists("xcache_get")) {
$driver = "xcache";
}else if(function_exists("memcache_connect")) {
$driver = "memcache";
}else if(class_exists("Redis")) {
$driver = "redis";
}else {
$driver = "files";
}
return $driver;
}
public static function getPath($skip_create_path = false, $config) {
if ( !isset($config['path']) || $config['path'] == '' )
{
// revision 618
if(self::isPHPModule()) {
$tmp_dir = ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir();
$path = $tmp_dir;
} else {
$path = isset($_SERVER['DOCUMENT_ROOT']) ? rtrim($_SERVER['DOCUMENT_ROOT'],"/")."/../" : rtrim(dirname(__FILE__),"/")."/";
}
if(self::$config['path'] != "") {
$path = $config['path'];
}
} else {
$path = $config['path'];
}
$securityKey = array_key_exists('securityKey',$config) ? $config['securityKey'] : "";
if($securityKey == "" || $securityKey == "auto") {
$securityKey = self::$config['securityKey'];
if($securityKey == "auto" || $securityKey == "") {
$securityKey = isset($_SERVER['HTTP_HOST']) ? preg_replace('/^www./','',strtolower($_SERVER['HTTP_HOST'])) : "default";
}
}
if($securityKey != "") {
$securityKey.= "/";
}
$securityKey = self::cleanFileName($securityKey);
$full_path = $path."/".$securityKey;
$full_pathx = md5($full_path);
if($skip_create_path == false && !isset(self::$tmp[$full_pathx])) {
if(!@file_exists($full_path) || !@is_writable($full_path)) {
if(!@file_exists($full_path)) {
@mkdir($full_path,self::__setChmodAuto($config));
}
if(!@is_writable($full_path)) {
@chmod($full_path,self::__setChmodAuto($config));
}
if(!@file_exists($full_path) || !@is_writable($full_path)) {
throw new Exception("PLEASE CREATE OR CHMOD ".$full_path." - 0777 OR ANY WRITABLE PERMISSION!",92);
}
}
self::$tmp[$full_pathx] = true;
self::htaccessGen($full_path, array_key_exists('htaccess',$config) ? $config['htaccess'] : false);
}
return realpath($full_path);
}
public static function cleanFileName($filename) {
$regex = ['/[\?\[\]\/\\\=\<\>\:\;\,\'\"\&\$\#\*\(\)\|\~\`\!\{\}]/','/\.$/','/^\./'];
$replace = ['-','',''];
return preg_replace($regex,$replace,$filename);
}
public static function __setChmodAuto($config) {
if(!isset($config['default_chmod']) || $config['default_chmod'] == "" || is_null($config['default_chmod'])) {
return 0777;
} else {
return $config['default_chmod'];
}
}
protected static function getOS() {
$os = array(
"os" => PHP_OS,
"php" => PHP_SAPI,
"system" => php_uname(),
"unique" => md5(php_uname().PHP_OS.PHP_SAPI)
);
return $os;
}
public static function isPHPModule() {
if(PHP_SAPI == "apache2handler") {
return true;
} else {
if(strpos(PHP_SAPI,"handler") !== false) {
return true;
}
}
return false;
}
protected static function htaccessGen($path, $create = true) {
if($create == true) {
if(!is_writeable($path)) {
try {
chmod($path,0777);
}
catch(Exception $e) {
throw new Exception("PLEASE CHMOD ".$path." - 0777 OR ANY WRITABLE PERMISSION!",92);
}
}
if(!@file_exists($path."/.htaccess")) {
// echo "write me";
$html = "order deny, allow \r\n
deny from all \r\n
allow from 127.0.0.1";
$f = @fopen($path."/.htaccess","w+");
if(!$f) {
throw new Exception("PLEASE CHMOD ".$path." - 0777 OR ANY WRITABLE PERMISSION!",92);
}
fwrite($f,$html);
fclose($f);
}
}
}
public static function setup($name,$value = "") {
if(is_array($name)) {
self::$config = $name;
} else {
self::$config[$name] = $value;
}
}
public static function debug($something) {
echo "Starting Debugging ...
\r\n ";
if(is_array($something)) {
echo "
"; print_r($something); echo ""; var_dump($something); } else { echo $something; } echo "\r\n