ECSHOP 源码分析(install/index.php1)

 
 
 

define('IN_ECS', true);

/* 报告所有错误 */
@ini_set ('display_erros', 1);
error_reporting(E_ALL^E_NOTICE);

/* 定义站点根 */
/**************************************************
str_replace
字符串取代。
语法: string str_replace(string needle, string str, string haystack);
返回值: 字符串
函数种类: 资料处理
内容说明
本函数将字符串 str 代入 haystack 字符串中,将所有的 needle 置换成 str。
mlevine@adtraq.com (11-Apr-1999) 指出在 PHP 3.0.7 版,本函数有些 bug,
而 nadeem@bleh.org (05-Jun-1999) 补充在 PHP 3.0.8 版本函数就回复正常了。
使用范例
下例将 %body% 以 black 取代
<?php
$bodytag = str_replace("%body%", "black", "<body text=%body%>");
echo $bodytag;
?>

***************************************************/
define('ROOT_PATH', str_replace('install/index.php', '', str_replace('\\', '/', __FILE__)));

$selected_lang = isset($_GET['lang']) ? $_GET['lang'] : 'zh_cn';
require_once(ROOT_PATH . 'install/lang/' . $selected_lang . '.php');

header("content-type:text/html; charset=utf-8");

$step = isset($_REQUEST['step']) ? $_REQUEST['step'] : 'language';

if (file_exists(ROOT_PATH . 'data/install.lock'))
{
    $step = 'message';
    $message = $lang['install_locked'];
}

if (file_exists(ROOT_PATH . 'includes/install.lock'))
{
    $step = 'message';
    $message = $lang['install_locked_1'];
}

/* 清除所有和文件操作相关的状态信息 */
clearstatcache();

switch ($step)
{
/*------------------------------------------------------ */
//-- 选择语言
/*------------------------------------------------------ */
case 'language' :
 /* cookie探针 */
 setcookie('ecshop_installer', 'cookie_able', time()+3600, '/');
 break;

 

/*------------------------------------------------------ */
//-- 阅读用户协议
/*------------------------------------------------------ */
case 'license' :
 break;

 

/*------------------------------------------------------ */
//-- 检查系统环境
/*------------------------------------------------------ */
case 'check' :
 include_once(ROOT_PATH . 'includes/cls_image.php');
    include_once(ROOT_PATH . 'includes/lib_common.php');
    include_once(ROOT_PATH . 'includes/cls_dir_access.php');

    $directories[] = 'admin';
    $directories[] = 'cert';
    $directories[] = 'data';
    $directories[] = 'data/afficheimg';
    $directories[] = 'data/brandlogo';
    $directories[] = 'data/cardimg';
    $directories[] = 'data/feedbackimg';
 $directories[] = 'data/packimg';
    $directories[] = 'images';
    $directories[] = 'images/upload';
    $directories[] = 'templates';
    $directories[] = 'templates/backup';
 $directories[] = 'templates/caches';  
 $directories[] = 'templates/compiled';
    $directories[] = 'templates/compiled/admin';
    $directories[] = 'templates/library';

    $writable   = '';
    $disabled   = '';
 $mark = 0;
/***********************************************
·  foreach 
在  PHP4中,新增了一个循环语句  foreach,它很像是  perl和其它的语言,你可以给它一个阵列,让它来取出阵列的值。它有下列这二个语法,第二个语法是较次要的,但是可用来作为第一个语法的延伸。 
foreach(array_expression  as  $value)  statement 
foreach(array_expression  as  $key  =>  $value)  statement 
第一个形式的循环,它会在每个循环上,将目前元素的值分配给  $value,并且向后移动阵列的內部指针,所以在下一个循环的时候,你就会看到下一个元素了。 
第二个形式的循环和第一个是相同的,不同的是它会在每个循环将目前元素的索引值分配给变量  $key。 
注意  :  当  foreach第一次开始执行的时候,它会把阵列的內部指针重新设定到阵列的第一个元素,意思是说,在使用  foreach之前,你不必再去调用  reset(  )。 
注意  :  foreach的功能是复制,而不是阵列它本身,因此并不会改变阵列指针 
下面范例的功能都是相同的  :
<?php 
reset  ($arr); 
while  (list(,  $value)  =  each  ($arr))  { 
echo  "Value:  $value<br> 
"; 
} 

foreach  ($arr  as  $value)  { 
echo  "Value:  $value<br> 
"; 
} 
?> 


下面范例的功能也都是相同的  :


<?php 
reset  ($arr); 
while  (list($key,  $value)  =  each  ($arr))  { 
echo  "Key:  $key;  Value:  $value<br> 
"; 
} 
foreach  ($arr  as  $key  =>  $value)  { 
echo  "Key:  $key;  Value:  $value<br> 
"; 
} 
?> 


以下的范例将说明  foreach的用法  : 

<?php 
$a  =  array  (1,  2,  3,  17); 
foreach  ($a  as  $v)  { 
print  "Current  value  of  $a:  $v. 
"; 
} 
$a  =  array  ( 
"one"  =>  1, 
"two"  =>  2, 
"three"  =>  3, 
"seventeen"  =>  17 
); 
foreach($a  as  $k  =>  $v)  { 
print  "$a[$k]  =>  $v. 
"; 
} 
?> 
************************************************/
 foreach ($directories AS $key=>$val)
    {
        $writable .= '<li>';
/*****************************************************
  str_repeat
(PHP4 >= 4.0b4)
str_repeat --- 重複字串
語法 : string str_repeat (string input, int multiplier)
說明 :
傳回 input重複 multiplier次後的字串,參數 multiplier必須大於 0。
<?php
echo str_repeat ("-=", 10);
?>
上面的範例將會輸出 "-=-=-=-=-=-=-=-=-=-="。

*****************************************************/
        $writable .= '<strong>'. $val .'</strong> ' .str_repeat('.', (80-strlen($val)));

  $mark = check_file(ROOT_PATH . $val);
  if ($mark < 2)
  {
   $writable .= "<span style='color: #C00000'>$lang[cannt_write]</span>";
            $disabled = ' disabled="true"';
  }
        else
        {
            $writable .= "<span style='color: green'>$lang[can_write]</span>";
        }

        $writable .= '</li>';
    }

    $info_format = '<li><strong>%s</strong> %s %s</li>';
    $system_info = '';

    $system_info .= sprintf($info_format, $lang['php_os'], str_repeat('.', (83-strlen($lang['php_os']))), PHP_OS);
    $system_info .= sprintf($info_format, $lang['php_ver'], str_repeat('.', (81-strlen($lang['php_ver']))), PHP_VERSION);
/******************************************
intval
(PHP 3, PHP 4, PHP 5)
intval -- 获取变量的整数值
描述
int intval ( mixed var [, int base] )
通过使用特定的进制转换(默认是十进制),返回变量 var 的 integer 数值。
var 可以是任何标量类型。intval() 不能用于 array 或 object。
注: 除非 var 参数是字符串,否则 intval() 的 base 参数不会有效果。
参见 floatval()、strval()、settype() 和 类型戏法。
diskfreespace
取得目录所在的剩余可用空间。

语法: float diskfreespace(string directory);
返回值: 浮点数
函数种类: 文件存取
内容说明
本函数用来取得目录所在储存装置的剩余空间,单位为位组 (byte)。
使用范例
本例可以知道根目录的剩余空间。
<?
$df = diskfreespace("/");
?>

********************************************/
 $freespace = intval(diskfreespace(dirname(__FILE__)) / (1024 * 1024));
 if ($freespace < 10)
 {
  $freespace = '<strong style="color:red">' . $freespace . '</strong>';
 }
 $freespace .= 'M';
 $system_info .= sprintf($info_format, $lang['disk_space'], str_repeat('.', (83-strlen($lang['disk_space']))), $freespace);

    /* 检查图片处理函数库 */
    $gd = gd_version();

    if ($gd == 0)
    {
        $gd_ver = $lang['not_support'];
    }
    elseif ($gd == 1)
    {
        $gd_ver = '1.0';
    }
    else
    {
        $gd_ver = '2.0';
    }
/**************************************************
function_exists
检查函数是否已定义。
语法: int function_exists(string function_name);
返回值: 整数
函数种类: PHP 系统功能
内容说明
本函数用来检查指定的函数是否已经定义。参数 function_name 为待检查的函数名称。
若已定义指定的函数则返回 true 值,其它情形均返回 false 值。
***************************************************/
    $jpeg_enabled   = function_exists('imagecreatefromjpeg') ? $lang['support'] : $lang['not_support'];
    $gif_enabled    = function_exists('imagecreatefromgif') ? $lang['support'] : $lang['not_support'];
    $png_enabled    = function_exists('imagecreatefrompng') ? $lang['support'] : $lang['not_support'];

    $system_info .= sprintf($info_format, $lang['gd_version'], str_repeat('.', (81-strlen($lang['gd_version']))), $gd_ver);
    $system_info .= sprintf($info_format, $lang['jpeg'], str_repeat('.', (83-strlen($lang['jpeg']))), $jpeg_enabled);
    $system_info .= sprintf($info_format, $lang['gif'], str_repeat('.', (83-strlen($lang['gif']))), $gif_enabled);
    $system_info .= sprintf($info_format, $lang['png'], str_repeat('.', (83-strlen($lang['png']))), $png_enabled);
   
 /* 检查系统是否支持以dwt,lib,dat为扩展名的文件,也就是在檢查文件的完整性 */
 $filename = '';
 $temp_str = '';
 $output_msg = '';
 $support_dwt = false;
 $support_lib = false;
 $support_dat = false;

 $filename = ROOT_PATH . 'themes/default/index.dwt';
 if (file_exists($filename))
 {
  $support_dwt = true;
 }
 else
 {
  $temp_str .= $lang['cannt_support_dwt'] . ',';
 }

 $filename =  ROOT_PATH . 'themes/default/library/member.lbi';
 if (file_exists($filename))
 {
  $support_lib = true;
 }
 else
 {
  $temp_str .= $lang['cannt_support_lib'] . ',';
 }
 
 $filename = ROOT_PATH . 'includes/ip/ipdata.dat';
 if (file_exists($filename))
 {
  $support_dat = true;
 }
 else
 {
  $temp_str .= $lang['cannt_support_dat'];
 }


 if ($support_dwt && $support_lib && $support_dat)
 {
  $output_msg = $lang['support_dld'];
 }
 else
 {
  $temp_str = preg_replace("/,$/", '', $temp_str);
  $output_msg = '<strong style="color:red;">'. $temp_str . '</strong>';
  $disabled = ' disabled="true"';
 }

 $system_info .= sprintf($info_format, $lang['has_supported_dld'], str_repeat('.', (88-strlen($lang['has_supported_dld']))), $output_msg);

 /* 服务器是否安全模式开启 */
 if (ini_get('safe_mode') == '1')
 {
  $output_msg = $lang['safe_mode_on2'];
 }
 else
 {
  $output_msg = $lang['safe_mode_off'];
 }
 $system_info .= sprintf($info_format, $lang['safe_mode'], str_repeat('.', (91-strlen($lang['safe_mode']))), $output_msg);
 
 if (isset($_COOKIE['ecshop_installer']) && $_COOKIE['ecshop_installer'] == 'cookie_able')
 {
  $cookie_able = true;
  /* 清除cookie探针 */
  setcookie('ecshop_installer', 'cookie_able', time()-3600, '/');
 }
 else
 {
  $cookie_able = false;
 }
 
 /* 检查session的设置 */
    $sess_settings = session_get_cookie_params();
    $system_info .= '<li>';
    $system_info .= '<strong>'. $lang['sess_path'] .'</strong> ' . str_repeat('.', (82-strlen($lang['sess_path'])));
    $system_info .= (!$cookie_able && $sess_settings['path'] != '' && $sess_settings['path'] != '/') ?
                    " <span style='color: #C00000'>$lang[warning_path]</span>" :
                    (' ' . $sess_settings['path']);
 
 $system_info .= '</li>';
 
 break;

posted @ 2011-08-20 09:55  为了这有限的生命  阅读(706)  评论(0)    收藏  举报