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