* @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()));