X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Flibs%2Fcache_functions.php;h=1394c129b3e4ddd1c81da5cb87086fc49ab5be9e;hp=19cebed629c50390f3bbee96c4aa2f29786fad86;hb=0369c36aaab5af6ed44da1e13a53baef285f79b4;hpb=4d6226782aa4ba157dca8c3891412ba50159481f diff --git a/inc/libs/cache_functions.php b/inc/libs/cache_functions.php index 19cebed629..1394c129b3 100644 --- a/inc/libs/cache_functions.php +++ b/inc/libs/cache_functions.php @@ -34,332 +34,326 @@ // Some security stuff... if (ereg(basename(__FILE__), $_SERVER['PHP_SELF'])) { - $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php"; - require($INC); + $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php"; + require($INC); } // Caching class class mxchange_cache { - // Define variables - var $update_interval = 0; - var $ret = "init"; - var $cache_path = ""; - var $cache_inc = ""; - var $cache_ctime = 0; - var $cache_pointer = false; - - // Constructor - function mxchange_cache($interval, $path, $tested) { - // Remember interval in class - $this->update_interval=$interval; - - // Remeber path - $this->cache_path=$path; - - // Check if path exists - if ((file_exists($path)) && (is_dir($path)) && (!$tested)) - { - // Check if we can create a file inside the path - @touch($path."dummy.tmp", 'w'); - if (file_exists($path."dummy.tmp")) - { - // Yes, we can do. So let's remove it - unlink($path."dummy.tmp"); - - // Is there a .htaccess file? - if (file_exists($path.".htaccess")) - { - // Update database that we have tested it - $result = SQL_QUERY("UPDATE "._MYSQL_PREFIX."_config SET cache_tested='1' WHERE config='0' LIMIT 1", __FILE__, __LINE__); - $this->ret="done"; - - // All done! - return "done"; - } - else - { - // Stop! Set a .htaccess file first - $this->ret="htaccess"; - return "htaccess"; - } - } - } - elseif ($tested) - { - // System already tested - $this->ret="done"; - return "done"; - } - - // Something goes wrong here! - $this->ret="failed"; - return "failed"; - } - - function cache_file($file, $ignore_ctime=false) - { - global $INC; - // Construct FQFN (full qualified file name) - $inc = $this->cache_path.$file.".cache"; - - // Rember it + filename in class - $this->cache_inc = $inc; - - // Check if file exists - $status = (file_exists($inc) && (is_readable($inc)) && (is_writeable($inc))); - if ($status) - { - // Yes, it does. So let's get it's last changed date/time - $ctime = filectime($inc); - } - else - { - // No, it doesn't. Zero date/time - $ctime = "0"; - } - - // Remember change date/time in class - $this->cache_ctime = $ctime; - - // Is the cache file outdated? - if (((time() - $ctime) >= $this->update_interval) && (!$ignore_ctime)) - { - // Ok, we need an update! - $status = false; - } - return $status; - } - - function cache_init($array) - { - // This will destory an existing cache file! - if ($this->ret == "done") - { - // Create file - if (file_exists($this->cache_inc)) @chmod($this->cache_inc, 0666); - $fp = @fopen($this->cache_inc, 'w') or mxchange_die("Cannot write to cache ".$this->cache_inc." !"); - - // Begin of cache file - fwrite($fp, "\$ARRAY = \"".$array."\";\n\n"); - - // Remember file pointer - $this->cache_pointer = $fp; - } - else - { - // Cannot create file - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } - - function add_row($data) - { - if ($this->cache_pointer) - { - // Write every array element to cache file - foreach ($data as $k=>$v) - { - @fwrite($this->cache_pointer, "\$CACHE['".$k."'][] = \"".$v."\";\n"); - } - } - else - { - // Cannot create file - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } - - function cache_close() - { - // Quit function when no pointer is set - if (empty($this->cache_pointer)) return; - if ($this->cache_pointer) - { - // Close file add destroy handler - @fclose($this->cache_pointer); - - // Set rights - if (file_exists($this->cache_inc)) @chmod($this->cache_inc, 0666); - - // Remove pointer - unset($this->cache_pointer); - } - else - { - // Cannot create file - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } - - function cache_load() - { - if ((file_exists($this->cache_inc)) && (is_readable($this->cache_inc))) - { - // Prepare temporay array - $CACHE = array(); - // Load cache file - $cache = implode("", file($this->cache_inc)); - // Execute cache file - eval($cache); - if (is_array($CACHE)) - { - return $CACHE; - } - else - { - // Cache problem detected! - $this->cache_destroy(); - } - } - else - { - // Cache file not found or not readable - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_LOAD_1.$this->cache_inc.CACHE_CANNOT_LOAD_2); - } - } - - function cache_destroy() - { - if (file_exists($this->cache_inc)) - { - // Remove cache file from system - @unlink($this->cache_inc); - if (!file_exists($this->cache_inc)) - { - // Close cache automatically (we don't need it anymore!) - $this->cache_close(); - } - else - { - // Not removed! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_UNLINK_1.$this->cache_inc.CACHE_CANNOT_UNLINK_2); - } - } - else - { - // Does not exist! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_UNLINK_1.$this->cache_inc.CACHE_CANNOT_UNLINK_2); - } - } - - function cache_remove($search, $data, $array) - { - global $ARRAY; - if ((file_exists($this->cache_inc)) && (is_writeable($this->cache_inc))) - { - // Load cache into dummy array - $DUMMY = $this->cache_load(); - - // Search for key in array - $key = array_search($data, $DUMMY[$search]); - if (!empty($key)) - { - // Key (hopefully) found? - foreach ($array as $a) - { - // So we can remove all elements as requested - unset($DUMMY[$a][$key]); - } - - // Flush array to cache file - $fp = fopen($this->cache_inc, 'w'); - fwrite($fp, "\$ARRAY = \"".$ARRAY."\";\n"); - foreach ($DUMMY as $k=>$v) - { - if (is_array($v)) - { - // Multi line(s) found - $LINE = ""; - foreach($v as $k2=>$v2) - { - // Put every array element in a row... - $LINE .= "\$CACHE['".$k."'][] = \"".$v2."\";\n"; - } - } - else - { - // Single line found - $LINE = "\$CACHE['".$k."'] = \"".$v."\";\n"; - } - - // Write line(s) - fwrite($fp, $LINE); - } - - // Close cache file - fclose($fp); - } - } - else - { - // Cannot write to cache! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } - - function cache_replace($search, $replace, $search_key, $array) - { - global $ARRAY; - if ((file_exists($this->cache_inc)) && (is_writeable($this->cache_inc))) - { - // Load cache into dummy array - $DUMMY = $this->cache_load(); - - // Check if $DUMMY is valid (prevents some errors) - if ((is_array($DUMMY)) && (is_array($DUMMY[$search]))) - { - // Search for key in array - $key_found = array_key_exists($search_key, $DUMMY[$search]); - if ($key_found == true) - { - $key = $search_key; - // Key (hopefully) found? - foreach ($DUMMY as $a=>$v) - { - // So we can update all entries - if ($a == $search) - { - // Update now... - $DUMMY[$a][$search_key] = $replace; - } - } - - // Flush array to cache file - $fp = fopen($this->cache_inc, 'w'); - fwrite($fp, "\$DUMMY = \"".$ARRAY."\";\n"); - foreach ($DUMMY as $k=>$v) - { - if (is_array($v)) - { - // Multi line(s) found - $LINE = ""; - foreach($v as $k2=>$v2) - { - // Put every array element in a row... - $LINE .= "\$CACHE['".$k."'][] = \"".$v2."\";\n"; - } - } - else - { - // Single line found - $LINE = "\$CACHE['".$k."'] = \"".$v."\";\n"; - } - - // Write line(s) - fwrite($fp, $LINE); - } - - // Close cache file - fclose($fp); - } - } - } - else - { - // Cannot write to cache! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } + // Define variables + var $update_interval = 0; + var $ret = "init"; + var $cache_path = ""; + var $cache_inc = ""; + var $cache_ctime = 0; + var $cache_pointer = false; + + // Constructor + function mxchange_cache($interval, $path, $tested) { + // Remember interval in class + $this->update_interval=$interval; + + // Remeber path + $this->cache_path=$path; + + // Check if path exists + if ((is_dir($path)) && (!$tested)) { + // Check if we can create a file inside the path + @touch($path."dummy.tmp", 'w'); + if (FILE_READABLE($path."dummy.tmp")) { + // Yes, we can do. So let's remove it + @unlink($path."dummy.tmp"); + + // Is there a .htaccess file? + if (FILE_READABLE($path.".htaccess")) { + // Update database that we have tested it + UPDATE_CONFIG("cache_tested", 1); + + // All done! + return "done"; + } else { + // Stop! Set a .htaccess file first + $this->ret="htaccess"; + return "htaccess"; + } + } + } elseif ($tested) { + // System already tested + $this->ret="done"; + return "done"; + } + + // Something goes wrong here! + $this->ret="failed"; + return "failed"; + } + + function cache_file($file, $ignore_ctime=false) { + global $INC; + // Construct FQFN (full qualified file name) + $inc = $this->cache_path.$file.".cache"; + + // Rember it + filename in class + $this->cache_inc = $inc; + + // Check if file exists + $status = (FILE_READABLE($inc) && (is_writeable($inc))); + if ($status) { + // Yes, it does. So let's get it's last changed date/time + $ctime = filectime($inc); + } else { + // No, it doesn't. Zero date/time + $ctime = 0; + } + + // Remember change date/time in class + $this->cache_ctime = $ctime; + + // Is the cache file outdated? + if (((time() - $ctime) >= $this->update_interval) && (!$ignore_ctime)) { + // Ok, we need an update! + $status = false; + } + + // Return status + return $status; + } + + function cache_init($array) { + // This will destory an existing cache file! + if ($this->ret == "done") { + // Create file + if (FILE_READABLE($this->cache_inc)) @chmod($this->cache_inc, 0666); + $fp = @fopen($this->cache_inc, 'w') or mxchange_die("Cannot write to cache ".$this->cache_inc." !"); + + // Begin of cache file + fwrite($fp, "\$ARRAY = \"".$array."\";\n\n"); + + // Remember file pointer + $this->cache_pointer = $fp; + } else { + // Cannot create file + ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + } + } + + function add_row ($data) { + global $cacheArray; + + if (is_resource($this->cache_pointer)) { + // Write every array element to cache file + foreach ($data as $k => $v) { + // Write global cache array for immediate access + if ((substr($k, 0, 4) == "ext_") && (isset($data['ext_name'])) && (isset($data['ext_id']))) { + if ($k != "ext_name") { + $cacheArray['extensions'][$k][$data['ext_name']] = $v; + } else { + $cacheArray['extensions'][$k][$data['ext_id']] = $v; + } + if (($k == "ext_keep") && ($v == "Y")) { + $cacheArray['active_extensions'][$data['ext_name']] = $v; + } // END - if + } // END - if + + // Write cache line to file + @fwrite($this->cache_pointer, "\$data['".$k."'][] = \"".$v."\";\n"); + } + } else { + // Cannot create file + ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + } + } + + function cache_close() + { + // Quit function when no pointer is set + if (empty($this->cache_pointer)) return; + if ($this->cache_pointer) + { + // Close file add destroy handler + @fclose($this->cache_pointer); + + // Set rights + if (FILE_READABLE($this->cache_inc)) @chmod($this->cache_inc, 0666); + + // Remove pointer + unset($this->cache_pointer); + } + else + { + // Cannot create file + ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + } + } + + function cache_load() + { + if (FILE_READABLE($this->cache_inc)) { + // Prepare temporary array + $data = array(); + + // Load cache file + $cache = implode("", file($this->cache_inc)); + + // Execute cache file + eval($cache); + if (is_array($data)) { + // Return cache + return $data; + } else { + // Cache problem detected! + $this->cache_destroy(); + } + } + else + { + // Cache file not found or not readable + ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_LOAD_1.$this->cache_inc.CACHE_CANNOT_LOAD_2); + } + } + + function cache_destroy() + { + if (FILE_READABLE($this->cache_inc)) + { + // Remove cache file from system + @unlink($this->cache_inc); + if (!FILE_READABLE($this->cache_inc)) + { + // Close cache automatically (we don't need it anymore!) + $this->cache_close(); + } + else + { + // Not removed! + ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_UNLINK_1.$this->cache_inc.CACHE_CANNOT_UNLINK_2); + } + } + else + { + // Does not exist! + ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_UNLINK_1.$this->cache_inc.CACHE_CANNOT_UNLINK_2); + } + } + + function cache_remove($search, $data, $array) + { + global $ARRAY; + if ((FILE_READABLE($this->cache_inc)) && (is_writeable($this->cache_inc))) + { + // Load cache into dummy array + $dummy = $this->cache_load(); + + // Search for key in array + $key = array_search($data, $dummy[$search]); + if (!empty($key)) + { + // Key (hopefully) found? + foreach ($array as $a) + { + // So we can remove all elements as requested + unset($dummy[$a][$key]); + } + + // Flush array to cache file + $fp = fopen($this->cache_inc, 'w'); + fwrite($fp, "\$ARRAY = \"".$ARRAY."\";\n"); + foreach ($dummy as $k => $v) + { + if (is_array($v)) + { + // Multi line(s) found + $LINE = ""; + foreach($v as $k2 => $v2) + { + // Put every array element in a row... + $LINE .= "\$data['".$k."'][] = \"".$v2."\";\n"; + } + } + else + { + // Single line found + $LINE = "\$data['".$k."'] = \"".$v."\";\n"; + } + + // Write line(s) + fwrite($fp, $LINE); + } + + // Close cache file + fclose($fp); + } + } + else + { + // Cannot write to cache! + ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + } + } + + function cache_replace($search, $replace, $search_key, $array) + { + global $ARRAY; + if ((FILE_READABLE($this->cache_inc)) && (is_writeable($this->cache_inc))) + { + // Load cache into dummy array + $dummy = $this->cache_load(); + + // Check if $dummy is valid (prevents some errors) + if ((is_array($dummy)) && (isset($dummy[$search])) && (is_array($dummy[$search]))) + { + // Search for key in array + $key_found = array_key_exists($search_key, $dummy[$search]); + if ($key_found == true) + { + $key = $search_key; + // Key (hopefully) found? + foreach ($dummy as $a => $v) + { + // So we can update all entries + if ($a == $search) + { + // Update now... + $dummy[$a][$search_key] = $replace; + } + } + + // Flush array to cache file + $fp = fopen($this->cache_inc, 'w'); + fwrite($fp, "\$dummy = \"".$ARRAY."\";\n"); + foreach ($dummy as $k => $v) + { + if (is_array($v)) + { + // Multi line(s) found + $LINE = ""; + foreach($v as $k2 => $v2) + { + // Put every array element in a row... + $LINE .= "\$data['".$k."'][] = \"".$v2."\";\n"; + } + } + else + { + // Single line found + $LINE = "\$data['".$k."'] = \"".$v."\";\n"; + } + + // Write line(s) + fwrite($fp, $LINE); + } + + // Close cache file + fclose($fp); + } + } + } + else + { + // Cannot write to cache! + ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + } + } } // ?>