imgurl/functions/class/class.install.php

173 lines
5.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
class Install{
public $homedir;
public $domain;
//构造函数
public function __construct(){
//获取项目绝对路径
$thedir = __DIR__;
$homedir = str_replace("\\","/",$thedir);
$homedir = str_replace("functions/class","",$homedir);
$this->homedir = $homedir;
//获取当前域名
//获取当前端口
$port = $_SERVER["SERVER_PORT"];
//对端口进行判断
switch ( $port )
{
case 80:
$protocol = "http://";
$port = '';
break;
case 443:
$protocol = "https://";
$port = '';
break;
default:
$protocol = "http://";
$port = ":".$port;
break;
}
$uri = $_SERVER["REQUEST_URI"];
$uri = str_replace("check.php","",$uri);
//组合为完整的URL
$domain = $protocol.$_SERVER['SERVER_NAME'].$port.$uri;
$domain = str_replace("install.php?setup=2","",$domain);
$this->domain = $domain;
}
//检查环境是否符合条件
public function check(){
$homedir = $this->homedir;
//echo $homedir.'db';
//检查根目录是否可写,结果写入到一个数组
//echo $thedir;
$checkarr['home'] = is_writable($homedir);
if($checkarr['home']){
$statusarr['home'] = '通过';
}
else{
$statusarr['home'] = '<span style = "color:red;">目录不可写!</span>';
}
$checkarr['db'] = is_writable($homedir.'db');
if($checkarr['db']){
$statusarr['db'] = '通过';
}
else{
$statusarr['db'] = '<span style = "color:red;">目录不可写!</span>';
}
//检测组建是否支持
$ext = get_loaded_extensions();
if(array_search('pdo_sqlite',$ext)){
$statusarr['pdo'] = '支持';
}
else{
$statusarr['pdo'] = '<span style = "color:red;">不支持!</span>';
}
//return $checkarr;
return $statusarr;
}
//获取站点信息
public function info(){
$homedir = $this->homedir;
$info = array(
"homedir" => $this->homedir,
"domain" => $this->domain
);
return $info;
}
//验证函数
protected function verify($data,$type){
switch ($type) {
//检查用户名
case 'user':
$pattern = '/^[a-zA-Z0-9]+$/';
if($data == ''){
echo '请填写用户名!';
exit;
}
if(!preg_match($pattern,$data)){
echo '用户名格式有误!';
exit;
}
break;
case 'pass':
$pattern = '/^[a-zA-Z0-9!@#$%^&*.]+$/';
if(!preg_match($pattern,$data)){
echo '密码格式有误!';
exit;
}
break;
case 'pass2':
$pass1 = $data['pass1'];
$pass2 = $data['pass2'];
if($pass1 != $pass2){
echo '两次密码不一致!';
exit;
}
break;
case 'domain':
$domain = $data['domain'];
if(!filter_var($domain, FILTER_VALIDATE_URL)){
echo '域名格式有误需要包含https://';
exit;
}
break;
default:
# code...
break;
}
}
//安装
public function setup($data){
$homedir = $this->homedir;
$dbpath = $this->homedir.'db/';
$user = $data['user'];
$pass1 = $data['pass1'];
$pass2 = $data['pass2'];
$this->verify($user,'user');
$this->verify($pass1,'pass');
$this->verify($data,'pass2');
$this->verify($data,'domain');
//复制一份数据库
copy($dbpath."imgurl-simple.db3",$dbpath."imgurl.db3");
//复制一份配置文件
if(copy($homedir."config-simple.php",$homedir."config.php")){
$configdir = $homedir."config.php";
$myfile = fopen($homedir."config.php", "r") or die("Unable to open file!");
$content = fread($myfile,filesize($configdir));
//执行替换
$content = str_replace("imguser",$user,$content);
$content = str_replace("imgpass",$pass2,$content);
$content = str_replace("homedir",$data['homedir'],$content);
$content = str_replace("https://imgurl.org/",$data['domain'],$content);
//var_dump($content);
//写入文件
$myfile = fopen($homedir."config.php", "w+") or die("Unable to open file!");
fwrite($myfile, $content);
//关闭
fclose($myfile);
//更名安装文件
rename($homedir."install.php",$homedir."install.php.bak");
}
}
}
?>