* @link http://www.yiiframework.com/ * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ * @package system * @since 1.0 */ /** * * @var array List of requirements (name, required or not, result, used by, memo) */ $requirements = array ( array ( t ( 'yii', 'PHP version' ), true, version_compare ( PHP_VERSION, "5.1.0", ">=" ), 'Yii Framework', t ( 'yii', 'PHP 5.1.0 or higher is required.' ) ), array ( t ( 'yii', '$_SERVER variable' ), true, '' === $message = checkServerVar (), 'Yii Framework', $message ), array ( t ( 'yii', 'Reflection extension' ), true, class_exists ( 'Reflection', false ), 'Yii Framework', '' ), array ( t ( 'yii', 'PCRE extension' ), true, extension_loaded ( "pcre" ), 'Yii Framework', '' ), array ( t ( 'yii', 'SPL extension' ), true, extension_loaded ( "SPL" ), 'Yii Framework', '' ), array ( t ( 'yii', 'DOM extension' ), false, class_exists ( "DOMDocument", false ), 'CHtmlPurifier, CWsdlGenerator', '' ), array ( t ( 'yii', 'PDO extension' ), false, extension_loaded ( 'pdo' ), t ( 'yii', 'All DB-related classes' ), '' ), array ( t ( 'yii', 'PDO SQLite extension' ), false, extension_loaded ( 'pdo_sqlite' ), t ( 'yii', 'All DB-related classes' ), t ( 'yii', 'Required for SQLite database.' ) ), array ( t ( 'yii', 'PDO MySQL extension' ), false, extension_loaded ( 'pdo_mysql' ), t ( 'yii', 'All DB-related classes' ), t ( 'yii', 'Required for MySQL database.' ) ), array ( t ( 'yii', 'PDO PostgreSQL extension' ), false, extension_loaded ( 'pdo_pgsql' ), t ( 'yii', 'All DB-related classes' ), t ( 'yii', 'Required for PostgreSQL database.' ) ), array ( t ( 'yii', 'PDO Oracle extension' ), false, extension_loaded ( 'pdo_oci' ), t ( 'yii', 'All DB-related classes' ), t ( 'yii', 'Required for Oracle database.' ) ), array ( t ( 'yii', 'PDO MSSQL extension (pdo_mssql)' ), false, extension_loaded ( 'pdo_mssql' ), t ( 'yii', 'All DB-related classes' ), t ( 'yii', 'Required for MSSQL database from MS Windows' ) ), array ( t ( 'yii', 'PDO MSSQL extension (pdo_dblib)' ), false, extension_loaded ( 'pdo_dblib' ), t ( 'yii', 'All DB-related classes' ), t ( 'yii', 'Required for MSSQL database from GNU/Linux or other UNIX.' ) ), array ( t ( 'yii', 'PDO MSSQL extension (pdo_sqlsrv)' ), false, extension_loaded ( 'pdo_sqlsrv' ), t ( 'yii', 'All DB-related classes' ), t ( 'yii', 'Required for MSSQL database with the driver provided by Microsoft.' ) ), array ( t ( 'yii', 'Memcache extension' ), false, extension_loaded ( "memcache" ) || extension_loaded ( "memcached" ), 'CMemCache', extension_loaded ( "memcached" ) ? t ( 'yii', 'To use memcached set CMemCache::useMemcached to true.' ) : '' ), array ( t ( 'yii', 'APC extension' ), false, extension_loaded ( "apc" ), 'CApcCache', '' ), array ( t ( 'yii', 'Mcrypt extension' ), false, extension_loaded ( "mcrypt" ), 'CSecurityManager', t ( 'yii', 'Required by encrypt and decrypt methods.' ) ), array ( t ( 'yii', 'SOAP extension' ), false, extension_loaded ( "soap" ), 'CWebService, CWebServiceAction', '' ), array ( t ( 'yii', 'GD extension with
FreeType support
or ImageMagick
extension with
PNG support' ), false, '' === $message = checkCaptchaSupport (), 'CCaptchaAction', $message ), array ( t ( 'yii', 'Ctype extension' ), false, extension_loaded ( "ctype" ), 'CDateFormatter, CDateTimeParser, CTextHighlighter, CHtmlPurifier', '' ), array ( t ( 'yii', 'Fileinfo extension' ), false, extension_loaded ( "fileinfo" ), 'CFileValidator', t ( 'yii', 'Required for MIME-type validation' ) ) ); function checkServerVar() { $vars = array ( 'HTTP_HOST', 'SERVER_NAME', 'SERVER_PORT', 'SCRIPT_NAME', 'SCRIPT_FILENAME', 'PHP_SELF', 'HTTP_ACCEPT', 'HTTP_USER_AGENT' ); $missing = array (); foreach ( $vars as $var ) { if (! isset ( $_SERVER [$var] )) $missing [] = $var; } if (! empty ( $missing )) return t ( 'yii', '$_SERVER does not have {vars}.', array ( '{vars}' => implode ( ', ', $missing ) ) ); if (realpath ( $_SERVER ["SCRIPT_FILENAME"] ) !== realpath ( __FILE__ )) return t ( 'yii', '$_SERVER["SCRIPT_FILENAME"] must be the same as the entry script file path.' ); if (! isset ( $_SERVER ["REQUEST_URI"] ) && isset ( $_SERVER ["QUERY_STRING"] )) return t ( 'yii', 'Either $_SERVER["REQUEST_URI"] or $_SERVER["QUERY_STRING"] must exist.' ); if (! isset ( $_SERVER ["PATH_INFO"] ) && strpos ( $_SERVER ["PHP_SELF"], $_SERVER ["SCRIPT_NAME"] ) !== 0) return t ( 'yii', 'Unable to determine URL path info. Please make sure $_SERVER["PATH_INFO"] (or $_SERVER["PHP_SELF"] and $_SERVER["SCRIPT_NAME"]) contains proper value.' ); return ''; } function checkCaptchaSupport() { if (extension_loaded ( 'imagick' )) { $imagick = new Imagick (); $imagickFormats = $imagick->queryFormats ( 'PNG' ); } if (extension_loaded ( 'gd' )) $gdInfo = gd_info (); if (isset ( $imagickFormats ) && in_array ( 'PNG', $imagickFormats )) return ''; elseif (isset ( $gdInfo )) { if ($gdInfo ['FreeType Support']) return ''; return t ( 'yii', 'GD installed,
FreeType support not installed' ); } return t ( 'yii', 'GD or ImageMagick not installed' ); } function getYiiVersion() { $coreFile = dirname ( __FILE__ ) . '/../framework/YiiBase.php'; if (is_file ( $coreFile )) { $contents = file_get_contents ( $coreFile ); $matches = array (); if (preg_match ( '/public static function getVersion.*?return \'(.*?)\'/ms', $contents, $matches ) > 0) return $matches [1]; } return ''; } /** * Returns a localized message according to user preferred language. * * @param * string message category * @param * string message to be translated * @param * array parameters to be applied to the translated message * @return string translated message */ function t($category, $message, $params = array()) { static $messages; if ($messages === null) { $messages = array (); if (($lang = getPreferredLanguage ()) !== false) { $file = dirname ( __FILE__ ) . "/messages/$lang/yii.php"; if (is_file ( $file )) $messages = include ($file); } } if (empty ( $message )) return $message; if (isset ( $messages [$message] ) && $messages [$message] !== '') $message = $messages [$message]; return $params !== array () ? strtr ( $message, $params ) : $message; } function getPreferredLanguage() { if (isset ( $_SERVER ['HTTP_ACCEPT_LANGUAGE'] ) && ($n = preg_match_all ( '/([\w\-]+)\s*(;\s*q\s*=\s*(\d*\.\d*))?/', $_SERVER ['HTTP_ACCEPT_LANGUAGE'], $matches )) > 0) { $languages = array (); for($i = 0; $i < $n; ++ $i) $languages [$matches [1] [$i]] = empty ( $matches [3] [$i] ) ? 1.0 : floatval ( $matches [3] [$i] ); arsort ( $languages ); foreach ( $languages as $language => $pref ) { $lang = strtolower ( str_replace ( '-', '_', $language ) ); if (preg_match ( "/^en\_?/", $lang )) return false; if (! is_file ( $viewFile = dirname ( __FILE__ ) . "/views/$lang/index.php" )) $lang = false; else break; } return $lang; } return false; } function getServerInfo() { $info [] = isset ( $_SERVER ['SERVER_SOFTWARE'] ) ? $_SERVER ['SERVER_SOFTWARE'] : ''; $info [] = 'Yii Framework/' . getYiiVersion (); $info [] = @strftime ( '%Y-%m-%d %H:%M', time () ); return implode ( ' ', $info ); } function renderFile($_file_, $_params_ = array()) { extract ( $_params_ ); require ($_file_); } $result = 1; // 1: all pass, 0: fail, -1: pass with warnings foreach ( $requirements as $i => $requirement ) { if ($requirement [1] && ! $requirement [2]) $result = 0; else if ($result > 0 && ! $requirement [1] && ! $requirement [2]) $result = - 1; if ($requirement [4] === '') $requirements [$i] [4] = ' '; } $lang = getPreferredLanguage (); $viewFile = dirname ( __FILE__ ) . "/views/$lang/index.php"; if (! is_file ( $viewFile )) $viewFile = dirname ( __FILE__ ) . '/views/index.php'; renderFile ( $viewFile, array ( 'requirements' => $requirements, 'result' => $result, 'serverInfo' => getServerInfo () ) );