Blame | Last modification | View Log | RSS feed
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');/*** CodeIgniter** An open source application development framework for PHP 4.3.2 or newer** @package CodeIgniter* @author ExpressionEngine Dev Team* @copyright Copyright (c) 2008, EllisLab, Inc.* @license http://codeigniter.com/user_guide/license.html* @link http://codeigniter.com* @since Version 1.0* @filesource*/// ------------------------------------------------------------------------/*** Common Functions** Loads the base classes and executes the request.** @package CodeIgniter* @subpackage codeigniter* @category Common Functions* @author ExpressionEngine Dev Team* @link http://codeigniter.com/user_guide/*/// ------------------------------------------------------------------------/*** Tests for file writability** is_writable() returns TRUE on Windows servers when you really can't write to* the file, based on the read-only attribute. is_writable() is also unreliable* on Unix servers if safe_mode is on.** @access private* @return void*/function is_really_writable($file){// If we're on a Unix server with safe_mode off we call is_writableif (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE){return is_writable($file);}// For windows servers and safe_mode "on" installations we'll actually// write a file then read it. Bah...if (is_dir($file)){$file = rtrim($file, '/').'/'.md5(rand(1,100));if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE){return FALSE;}fclose($fp);@chmod($file, DIR_WRITE_MODE);@unlink($file);return TRUE;}elseif (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE){return FALSE;}fclose($fp);return TRUE;}// ------------------------------------------------------------------------/*** Class registry** This function acts as a singleton. If the requested class does not* exist it is instantiated and set to a static variable. If it has* previously been instantiated the variable is returned.** @access public* @param string the class name being requested* @param bool optional flag that lets classes get loaded but not instantiated* @return object*/function &load_class($class, $instantiate = TRUE){static $objects = array();// Does the class exist? If so, we're done...if (isset($objects[$class])){return $objects[$class];}// If the requested class does not exist in the application/libraries// folder we'll load the native class from the system/libraries folder.if (file_exists(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT)){require(BASEPATH.'libraries/'.$class.EXT);require(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT);$is_subclass = TRUE;}else{if (file_exists(APPPATH.'libraries/'.$class.EXT)){require(APPPATH.'libraries/'.$class.EXT);$is_subclass = FALSE;}else{require(BASEPATH.'libraries/'.$class.EXT);$is_subclass = FALSE;}}if ($instantiate == FALSE){$objects[$class] = TRUE;return $objects[$class];}if ($is_subclass == TRUE){$name = config_item('subclass_prefix').$class;$objects[$class] =& new $name();return $objects[$class];}$name = ($class != 'Controller') ? 'CI_'.$class : $class;$objects[$class] =& new $name();return $objects[$class];}/*** Loads the main config.php file** @access private* @return array*/function &get_config(){static $main_conf;if ( ! isset($main_conf)){if ( ! file_exists(APPPATH.'config/config'.EXT)){exit('The configuration file config'.EXT.' does not exist.');}require(APPPATH.'config/config'.EXT);if ( ! isset($config) OR ! is_array($config)){exit('Your config file does not appear to be formatted correctly.');}$main_conf[0] =& $config;}return $main_conf[0];}/*** Gets a config item** @access public* @return mixed*/function config_item($item){static $config_item = array();if ( ! isset($config_item[$item])){$config =& get_config();if ( ! isset($config[$item])){return FALSE;}$config_item[$item] = $config[$item];}return $config_item[$item];}/*** Error Handler** This function lets us invoke the exception class and* display errors using the standard error template located* in application/errors/errors.php* This function will send the error page directly to the* browser and exit.** @access public* @return void*/function show_error($message){$error =& load_class('Exceptions');echo $error->show_error('An Error Was Encountered', $message);exit;}/*** 404 Page Handler** This function is similar to the show_error() function above* However, instead of the standard error template it displays* 404 errors.** @access public* @return void*/function show_404($page = ''){$error =& load_class('Exceptions');$error->show_404($page);exit;}/*** Error Logging Interface** We use this as a simple mechanism to access the logging* class and send messages to be logged.** @access public* @return void*/function log_message($level = 'error', $message, $php_error = FALSE){static $LOG;$config =& get_config();if ($config['log_threshold'] == 0){return;}$LOG =& load_class('Log');$LOG->write_log($level, $message, $php_error);}/*** Exception Handler** This is the custom exception handler that is declaired at the top* of Codeigniter.php. The main reason we use this is permit* PHP errors to be logged in our own log files since we may* not have access to server logs. Since this function* effectively intercepts PHP errors, however, we also need* to display errors based on the current error_reporting level.* We do that with the use of a PHP error template.** @access private* @return void*/function _exception_handler($severity, $message, $filepath, $line){// We don't bother with "strict" notices since they will fill up// the log file with information that isn't normally very// helpful. For example, if you are running PHP 5 and you// use version 4 style class functions (without prefixes// like "public", "private", etc.) you'll get notices telling// you that these have been deprecated.if ($severity == E_STRICT){return;}$error =& load_class('Exceptions');// Should we display the error?// We'll get the current error_reporting level and add its bits// with the severity bits to find out.if (($severity & error_reporting()) == $severity){$error->show_php_error($severity, $message, $filepath, $line);}// Should we log the error? No? We're done...$config =& get_config();if ($config['log_threshold'] == 0){return;}$error->log_exception($severity, $message, $filepath, $line);}/* End of file Common.php *//* Location: ./system/codeigniter/Common.php */