diff --git a/application/install/controller/Index.php b/application/install/controller/Index.php
index 0f44caabdc1b6c24aaeed4f8f5fbb5f1ef83130f..daf2a6b533307fd989b471db4d5699d71052cefd 100644
--- a/application/install/controller/Index.php
+++ b/application/install/controller/Index.php
@@ -63,6 +63,7 @@ class Index extends Common
public function Index()
{
$this->IsInstall();
+ new \base\Behavior(['msg'=>'协议阅读']);
return $this->fetch();
}
@@ -77,6 +78,7 @@ class Index extends Common
public function Check()
{
$this->IsInstall();
+ new \base\Behavior(['msg'=>'环境检测']);
return $this->fetch();
}
@@ -91,6 +93,7 @@ class Index extends Common
public function Create()
{
$this->IsInstall();
+ new \base\Behavior(['msg'=>'数据信息填写']);
return $this->fetch();
}
@@ -104,6 +107,15 @@ class Index extends Common
*/
public function Successful()
{
+ // 检测是否是新安装
+ if(is_dir(ROOT.'public/install') && !file_exists(ROOT.'public/install/install.lock'))
+ {
+ if(empty($_GET['s']) || stripos($_GET['s'], 'install') === false)
+ {
+ $url = __MY_URL__.'index.php?s=/install/index/index';
+ exit(header('location:'.$url));
+ }
+ }
return $this->fetch();
}
@@ -122,6 +134,7 @@ class Index extends Common
$ret = $this->ParamsCheck($params);
if($ret['code'] != 0)
{
+ new \base\Behavior(['msg'=>'参数校验['.json_encode($ret).']']);
return $ret;
}
@@ -130,7 +143,8 @@ class Index extends Common
{
if(!is_writable(ROOT.'config/database.php'))
{
- return DataReturn('配置文件没有权限', -1);
+ new \base\Behavior(['msg'=>'配置文件没有权限[./config/database.php'.']']);
+ return DataReturn('配置文件没有权限[./config/database.php'.']', -1);
}
}
@@ -138,6 +152,7 @@ class Index extends Common
$db = $this->DbObj($params);
if(!is_object($db))
{
+ new \base\Behavior(['msg'=>'数据库连接失败']);
return DataReturn('数据库连接失败', -1);
}
@@ -155,6 +170,7 @@ class Index extends Common
{
$db = $this->DbObj($params, $params['DB_NAME']);
} else {
+ new \base\Behavior(['msg'=>'数据库创建失败']);
return DataReturn('数据库创建失败', -1);
}
} else {
@@ -162,6 +178,7 @@ class Index extends Common
}
if(!is_object($db))
{
+ new \base\Behavior(['msg'=>'数据库连接失败']);
return DataReturn('数据库连接失败', -1);
}
@@ -259,8 +276,11 @@ return [
php;
if(@file_put_contents(ROOT.'config/database.php', $db_str) === false)
{
+ new \base\Behavior(['msg'=>'配置文件创建失败']);
return DataReturn('配置文件创建失败', -1);
}
+
+ new \base\Behavior(['msg'=>'安装成功']);
return DataReturn('安装成功', 0);
}
@@ -277,6 +297,7 @@ php;
{
if(!file_exists(ROOT.'public/install/shopxo.sql'))
{
+ new \base\Behavior(['msg'=>'数据库sql文件不存在']);
return DataReturn('数据库sql文件不存在', -1);
}
@@ -313,6 +334,7 @@ php;
'success' => $success,
'failure' => $failure,
];
+ new \base\Behavior(['msg'=>'sql运行 成功['.$success.']条, 失败['.$failure.']条']);
if($failure > 0)
{
return DataReturn('sql运行失败['.$failure.']条', -1);
@@ -337,10 +359,12 @@ php;
$data = $db->query("select version() AS version");
if(empty($data[0]['version']))
{
+ new \base\Behavior(['msg'=>'查询数据库版本失败']);
return DataReturn('查询数据库版本失败', -1);
} else {
if($data[0]['version'] < 5.0)
{
+ new \base\Behavior(['msg'=>'数据库版本过低', 'mysql_version'=>$data[0]['version']]);
return DataReturn('数据库版本过低', -1);
}
}
@@ -359,8 +383,8 @@ php;
*/
private function DbNameCreate($db, $db_name)
{
- $sql = "CREATE DATABASE IF NOT EXISTS {$db_name} DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci";
- if($db->query($sql) !== false)
+ $sql = "CREATE DATABASE {$db_name} DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci";
+ if($db->execute($sql) !== false)
{
return $this->IsDbExist($db, $db_name);
}
diff --git a/application/install/view/index/check.html b/application/install/view/index/check.html
index 6ea4dbcf5ca3295bb79f23bb53cf4a516149b2ed..f0981e6be247fe4f3331cf958b1977818cb8bf33 100644
--- a/application/install/view/index/check.html
+++ b/application/install/view/index/check.html
@@ -251,24 +251,6 @@
-
- mysqli_connect 函数 |
- 支持 |
-
-
- 支持
-
- 不支持
-
- |
-
-
- √
-
- ×
-
- |
-
file_get_contents 函数 |
支持 |
@@ -395,6 +377,24 @@
+
+ pdo 类 |
+ 支持 |
+
+
+ 支持
+
+ 不支持
+
+ |
+
+
+ √
+
+ ×
+
+ |
+
ZipArchive 类 |
支持 |
diff --git a/extend/base/Behavior.php b/extend/base/Behavior.php
new file mode 100755
index 0000000000000000000000000000000000000000..a0b0c555932e47ca604c93b24625df72d084fcf1
--- /dev/null
+++ b/extend/base/Behavior.php
@@ -0,0 +1,415 @@
+ $this->GetUserCookie(),
+ 'host' => $this->GetUrl('host'),
+ 'server_port' => $this->GetServerPort(),
+ 'server_ip' => $this->GetServerIP(),
+ 'url' => $this->GetUrl('url'),
+ 'request_url' => $this->GetUrl('request'),
+ 'source_url' => $this->GetSourceUrl(),
+ 'client_ip' => $this->GetClientIP(),
+ 'os' => $this->GetOs(),
+ 'browser' => $this->GetBrowser(),
+ 'method' => $this->GetMethod(),
+ 'scheme' => $this->GetScheme(),
+ 'version' => $this->GetHttpVersion(),
+ 'client' => $this->GetClinet(),
+ 'php_os' => PHP_OS,
+ 'php_version' => PHP_VERSION,
+ 'php_sapi_name' => php_sapi_name(),
+ 'client_date' => date('Y-m-d H:i:s'),
+ 'ymd' => date('Ymd'),
+ 'ver' => str_replace('v', '', APPLICATION_VERSION),
+ );
+
+ // 描述信息
+ if(!empty($param['msg']))
+ {
+ $data['msg'] = $param['msg'];
+ }
+
+ // mysql版本
+ if(!empty($param['mysql_version']))
+ {
+ $data['mysql_version'] = $param['mysql_version'];
+ }
+
+ // 上报数据
+ $url = 'http://report.shopxo.net/install.php';
+ if(function_exists('curl_init'))
+ {
+ $this->CurlPost($url, $data);
+ } else {
+ $this->FsockopenPost($url, $data);
+ }
+ }
+
+ /**
+ * [CurlPost curl post]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2016-12-03T21:58:54+0800
+ * @param [string] $url [请求地址]
+ * @param [array] $post [发送的post数据]
+ */
+ private function CurlPost($url, $post)
+ {
+ $options = array(
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_HEADER => false,
+ CURLOPT_POST => true,
+ CURLOPT_POSTFIELDS => $post,
+ );
+
+ $ch = curl_init($url);
+ curl_setopt_array($ch, $options);
+
+ $result = curl_exec($ch);
+ curl_close($ch);
+
+ return $result;
+ }
+
+ /**
+ * [FsockopenPost fsockopen方式]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2016-12-03T21:58:54+0800
+ * @param [string] $url [url地址]
+ * @param [string] $data [发送参数]
+ */
+ private function FsockopenPost($url, $data = '')
+ {
+ $row = parse_url($url);
+ $host = $row['host'];
+ $port = isset($row['port']) ? $row['port'] : 80;
+ $file = $row['path'];
+ $post = '';
+ while (list($k,$v) = each($data))
+ {
+ if(isset($k) && isset($v)) $post .= rawurlencode($k)."=".rawurlencode($v)."&"; //转URL标准码
+ }
+ $post = substr( $post , 0 , -1 );
+ $len = strlen($post);
+ $fp = @fsockopen( $host ,$port, $errno, $errstr, 10);
+ if (!$fp) {
+ return "$errstr ($errno)\n";
+ } else {
+ $receive = '';
+ $out = "POST $file HTTP/1.0\r\n";
+ $out .= "Host: $host\r\n";
+ $out .= "Content-type: application/x-www-form-urlencoded\r\n";
+ $out .= "Connection: Close\r\n";
+ $out .= "Content-Length: $len\r\n\r\n";
+ $out .= $post;
+ fwrite($fp, $out);
+ while (!feof($fp)) {
+ $receive .= fgets($fp, 128);
+ }
+ fclose($fp);
+ $receive = explode("\r\n\r\n",$receive);
+ unset($receive[0]);
+ return implode("",$receive);
+ }
+ }
+
+ /**
+ * [GetScheme http类型]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:04:33+0800
+ */
+ private function GetScheme()
+ {
+ return empty($_SERVER['HTTPS']) ? 'HTTP' : 'HTTPS';
+ }
+
+ /**
+ * [GetClinet 客户端]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:04:56+0800
+ */
+ private function GetClinet()
+ {
+ return empty($_SERVER['HTTP_USER_AGENT']) ? '' : $_SERVER['HTTP_USER_AGENT'];
+ }
+
+ /**
+ * [GetHttpVersion http版本]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:04:43+0800
+ */
+ private function GetHttpVersion()
+ {
+ return empty($_SERVER['SERVER_PROTOCOL']) ? '' : str_replace(array('HTTP/', 'HTTPS/'), '', $_SERVER['SERVER_PROTOCOL']);
+ }
+
+ /**
+ * [GetMethod 请求类型]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:04:23+0800
+ */
+ private function GetMethod()
+ {
+ return empty($_SERVER['REQUEST_METHOD']) ? '' : $_SERVER['REQUEST_METHOD'];
+ }
+
+ /**
+ * [GetOs 用户操作系统]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:02:06+0800
+ */
+ private function GetOs()
+ {
+ if(!empty($_SERVER['HTTP_USER_AGENT']))
+ {
+ $os = $_SERVER['HTTP_USER_AGENT'];
+ if(preg_match('/win/i', $os))
+ {
+ $os = 'Windows';
+ } elseif (preg_match('/mac/i',$os))
+ {
+ $os = 'MAC';
+ } elseif (preg_match('/linux/i', $os))
+ {
+ $os = 'Linux';
+ } elseif (preg_match('/unix/i', $os))
+ {
+ $os = 'Unix';
+ } elseif (preg_match('/bsd/i', $os))
+ {
+ $os = 'BSD';
+ } elseif (preg_match('/iphone/i', $os))
+ {
+ $os = 'iPhone';
+ } elseif (preg_match('/android/i', $os))
+ {
+ $os = 'Android';
+ } else {
+ $os = 'Other';
+ }
+ return $os;
+ }
+ return 'unknown';
+ }
+
+ /**
+ * [GetBrowser 用户浏览器]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:03:14+0800
+ */
+ private function GetBrowser()
+ {
+ if(!empty($_SERVER['HTTP_USER_AGENT']))
+ {
+ $br = $_SERVER['HTTP_USER_AGENT'];
+ if(preg_match('/MSIE/i', $br))
+ {
+ $br = 'MSIE';
+ } elseif(preg_match('/Firefox/i', $br))
+ {
+ $br = 'Firefox';
+ } elseif(preg_match('/Chrome/i', $br))
+ {
+ $br = 'Chrome';
+ } elseif(preg_match('/Safari/i', $br))
+ {
+ $br = 'Safari';
+ } elseif (preg_match('/Opera/i', $br))
+ {
+ $br = 'Opera';
+ } else {
+ $br = 'Other';
+ }
+ return $br;
+ }
+ return 'unknown';
+ }
+
+ /**
+ * [GetUrl 获取url地址]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:29:03+0800
+ * @param [string] $type [host:host地址, url:url地址, request:完整url地址]
+ */
+ private function GetUrl($type = 'url')
+ {
+ // 当前host
+ $host = empty($_SERVER['HTTP_HOST']) ? '' : $_SERVER['HTTP_HOST'];
+
+ // 是否获取host
+ if($type == 'host')
+ {
+ return $host;
+ }
+
+ // http类型
+ $http = empty($_SERVER['HTTPS']) ? 'http' : 'https';
+
+ // 根目录
+ if(!empty($_SERVER['SCRIPT_NAME']))
+ {
+ $root = substr($_SERVER['SCRIPT_NAME'], 0, strrpos($_SERVER['SCRIPT_NAME'], '/')+1);
+ } else {
+ if(!empty($_SERVER['PHP_SELF']))
+ {
+ $root = substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')+1);
+ }
+ }
+
+ // url 或 request
+ if($type == 'url')
+ {
+ return $http.'://'.$host.$root;
+ } else {
+ if(!empty($_SERVER['REQUEST_URI']))
+ {
+ return $http.'://'.$host.$_SERVER['REQUEST_URI'];
+ }
+ }
+ }
+
+ /**
+ * [GetServerIP 获取服务器ip]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:34:24+0800
+ */
+ private function GetServerIP()
+ {
+ return empty($_SERVER['SERVER_ADDR']) ? '' : $_SERVER['SERVER_ADDR'];
+ }
+
+ /**
+ * [GetServerPort 获取当前web端口]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:35:42+0800
+ */
+ private function GetServerPort()
+ {
+ return empty($_SERVER['SERVER_PORT']) ? 80 : $_SERVER['SERVER_PORT'];
+ }
+
+ /**
+ * [GetClientIP 获取用户ip]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T16:00:10+0800
+ * @param [boolean] $long [是否转换成整数]
+ */
+ function GetClientIP($long = false)
+ {
+ $onlineip = '';
+ if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown'))
+ {
+ $onlineip = getenv('HTTP_CLIENT_IP');
+ } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown'))
+ {
+ $onlineip = getenv('HTTP_X_FORWARDED_FOR');
+ } elseif(getenv('REMOTE_ADDR' ) && strcasecmp(getenv('REMOTE_ADDR'),'unknown'))
+ {
+ $onlineip = getenv('REMOTE_ADDR');
+ } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'],'unknown'))
+ {
+ $onlineip = $_SERVER['REMOTE_ADDR'];
+ }
+ if($long)
+ {
+ $onlineip = sprintf("%u", ip2long($realip));
+ }
+ return $onlineip;
+ }
+
+ /**
+ * [GetSourceUrl 获取来源url地址]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T15:57:00+0800
+ */
+ private function GetSourceUrl()
+ {
+ return empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER'];
+ }
+
+ /**
+ * [GetUserCookie 获取用户cookieid]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T15:55:12+0800
+ */
+ private function GetUserCookie()
+ {
+ if(!empty($_COOKIE['behavior_user_cookie'])) return $_COOKIE['behavior_user_cookie'];
+
+ $user_cookie = $this->GetUserNumberRand();
+ setcookie('behavior_user_cookie', $user_cookie);
+ return $user_cookie;
+ }
+
+ /**
+ * [GetUserNumberRand 生成用户cookie编号]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 0.0.1
+ * @datetime 2017-04-11T15:56:14+0800
+ */
+ private function GetUserNumberRand()
+ {
+ $str = date('YmdHis');
+ for($i=0; $i<6; $i++) $str .= rand(0, 9);
+ return $str;
+ }
+}
+?>
\ No newline at end of file