define('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : preg_replace("/(.*)/.php(.*)/i", "//1.php", $_SERVER['PHP_SELF'])); /*先来研究这一句*/ /* $_SERVER['SCRIPT_NAME'] 执行的脚本名字(eg:/install.php) (.*) "." 匹配除了换行符以外的任意字符,* 表示重复零次或更多次,所以这个就表示 除换行以外的任意字符(串) /. 匹配 "." /i 使正则表达式对大小写不敏感, /s 开启“单行模式”,即点号“.”匹配新行符 /m 开启“多行模式”,即“^”和“$”匹配新行符的前面和后面的位置。 如果你在正则表达式内部插入修饰符(?ism),则该修饰符只对其右边的正则表达式起作用。(?-i)是关闭大小写不敏感。 你可以很快的进行测试。/(?i)te(?-i)st/应该匹配TEst,但是不能匹配teST或TEST. //1 表示第一个子模式(也就是第一个括号里匹配的字符) 这一句的意思就是:如果定义了$_SERVER['SCRIPT_NAME']就把形如 string.phpabcd... 的脚本名字换成 string.php */ define('QUERY_STRING', $_SERVER['QUERY_STRING']); /*$_SERVER['QUERY_STRING'] 地址 ?号 后面的一字符串*/ define('PATH_INFO', isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : ''); /*index.php/a/b 表示后面的 /a/b */ define('DOMAIN', isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : preg_replace("/([^:]*)[:0-9]*/i", "//1", $_SERVER['HTTP_HOST'])); /*服务器名*/ define('SCHEME', $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://'); /*如果 端口是443 就用https通信 */ define('SITE_URL', SCHEME.$_SERVER['HTTP_HOST'].PHPCMS_PATH); /*设定 网站的URL */ define('RELATE_URL', isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : SCRIPT_NAME.(QUERY_STRING ? '?'.QUERY_STRING : PATH_INFO)); /*客户端请求URL*/ define('URL', SCHEME.$_SERVER['HTTP_HOST'].RELATE_URL); define('SKIN_PATH', 'templates/default/skins/default/phpcms'); /*网站外观路径*/ $siteUrl = SCHEME.dirname($_SERVER['HTTP_HOST'].$_SERVER["SCRIPT_NAME"]);//网站地址 //addslashes处理请求参数 if($_REQUEST) { if(!MAGIC_QUOTES_GPC) { $_REQUEST = new_addslashes($_REQUEST); if($_COOKIE) $_COOKIE = new_addslashes($_COOKIE); } extract($_REQUEST, EXTR_SKIP); } header('Content-type: text/html; charset='.CHARSET);//设置网站字符集 $steps = include PHPCMS_ROOT.'install/step.inc.php';//安装步骤 if(!isset($step)) $step = '1'; //判断系统为 win 还是 unix if(strrpos(strtolower(PHP_OS),"win") === FALSE) { define('ISUNIX', TRUE); } else { define('ISUNIX', FALSE); } $mode = 0777;//用户读写权限 //路由操作到指定的执行程序 switch($step) { case '1': //安装须知 include PHPCMS_ROOT."install/step".$step.".tpl.php"; break; case '2': //许可协议 $license = file_get_contents(PHPCMS_ROOT."install/license.txt"); include PHPCMS_ROOT."install/step".$step.".tpl.php"; break; case '3': //环境检测 (FTP帐号设置) $PHP_GD = ''; if(extension_loaded('gd')) { if(function_exists('imagepng')) $PHP_GD .= 'png'; if(function_exists('imagejpeg')) $PHP_GD .= ' jpg'; if(function_exists('imagegif')) $PHP_GD .= ' gif'; } $PHP_DNS = preg_match("/^[0-9.]{7,15}$/", @gethostbyname('www.phpcms.cn')) ? 1 : 0; //是否满足phpcms安装需求 $is_right = (phpversion() >= '4.3.0' && extension_loaded('mysql') && ini_get('short_open_tag')) ? 1 : 0; include PHPCMS_ROOT."install/step".$step.".tpl.php"; break; case '4': //选择安装模块 require PHPCMS_ROOT.'/install/modules.inc.php'; include PHPCMS_ROOT."install/step".$step.".tpl.php"; break; case '5': //设置目录属性 $selectmod = isset($selectmod) ? ','.implode(',', $selectmod) : ''; $selectmod = 'phpcms,member,pay'.$selectmod; $selectmods = explode(',',$selectmod); $selectmods = explode(',',$selectmod); foreach($selectmods AS $dir) { if($dir == 'phpcms') { $files = file(PHPCMS_ROOT."install/chmod.txt"); } else { $files = file(PHPCMS_ROOT.$dir."/install/chmod.txt"); } $files = array_filter($files); foreach($files as $file) { $file = str_replace('*','',$file); $file = trim($file); if(is_dir($file)) { $cname = '目录'; } else { $cname = '文件'; } if(!is_writable(PHPCMS_ROOT.$file)) $no_writablefile .= $file.' '.$cname."不可写<br>"; } } if(dir_create(PHPCMS_ROOT.'test_create_dir',0777)) { sleep(1); dir_delete(PHPCMS_ROOT.'test_create_dir'); } else { $no_writablefile = "网站根目录不可写<br>".$no_writablefile; } include PHPCMS_ROOT."install/step".$step.".tpl.php"; break; case '6': //配置帐号 (MYSQL帐号、管理员帐号、) include PHPCMS_ROOT."install/step".$step.".tpl.php"; break; case '7': //安装详细信息-完成安装 include PHPCMS_ROOT."install/step".$step.".tpl.php"; break; ...... 第一步判断操作系统类型,显示提示信息 <?php if(substr(PHP_OS, 0, 3) == 'WIN'){ ?> <ul> <li>第一步:使用ftp工具中的二进制模式将本软件包里的 phpcms 目录上传至服务器,假设上传后目录仍为 phpcms;</li> <li>第二步:访问 http://yourwebsite/phpcms/install.php 进入安装程序,根据安装向导提示完成安装!</li> </ul> <?php }else{ ?> <ul> <li>第一步:使用ftp工具,将该软件包里的 upload 目录及其文件上传到您的空间,假设上传后目录仍旧为 upload。</li> <li>第二步:先确认以下目录或文件属性为 (777) 可写模式。index.html,sitemaps.xml,sitemap.html,baidunews.xml,include/config.inc.php,about/*,data/*,templates/*,uploadfile/,languages/*</li> <li>第三步:运行 http://yourwebsite/upload/install.php 安装程序,填入安装相关信息与资料,完成安装!</li> </ul> <?php } ?> 第二步:协议没什么说的 第三步:检查环境和一些扩展是否打开 $PHP_GD = ''; if(extension_loaded('gd')) { if(function_exists('imagepng')) $PHP_GD .= 'png'; if(function_exists('imagejpeg')) $PHP_GD .= ' jpg'; if(function_exists('imagegif')) $PHP_GD .= ' gif'; } //现在还不明白 $PHP_DNS = preg_match("/^[0-9.]{7,15}$/", @gethostbyname('www.phpcms.cn')) ? 1 : 0; //是否满足phpcms安装需求:PHP的版本、mysql扩展是否打开、短标签是否打开 $is_right = (phpversion() >= '4.3.0' && extension_loaded('mysql') && ini_get('short_open_tag')) ? 1 : 0; 第四步:模块的选择--PHP采用数组的形式把模块组织起来 第五步:检查要读写目录是否可写 $selectmod = isset($selectmod) ? ','.implode(',', $selectmod) : '';//获取选择的模块 $selectmod = 'phpcms,member,pay'.$selectmod; $selectmods = explode(',',$selectmod);//把模块割成数组 //循环模块目录,检查是否可写 foreach($selectmods AS $dir) { if($dir == 'phpcms') { $files = file(PHPCMS_ROOT."install/chmod.txt"); } else { $files = file(PHPCMS_ROOT.$dir."/install/chmod.txt"); } $files = array_filter($files); foreach($files as $file) { $file = str_replace('*','',$file); $file = trim($file); if(is_dir($file))//标记是目录还是文件 { $cname = '目录'; } else { $cname = '文件'; } if(!is_writable(PHPCMS_ROOT.$file)) $no_writablefile .= $file.' '.$cname."不可写<br>";//如果不可写则记录,用于后面的显示 } } //在根目录下建立一个目录,检查根目录是否可写 if(dir_create(PHPCMS_ROOT.'test_create_dir',0777)) { sleep(1);//确保目录建立完成 dir_delete(PHPCMS_ROOT.'test_create_dir'); } else { $no_writablefile = "网站根目录不可写<br>".$no_writablefile; } 第六步: