'mysql', 'database_name' => $Config['DBname'], 'server' => 'localhost', 'username' => $Config['User'], 'password' => $Config['Password'], 'charset' => 'utf8' ); $medoo = new medoo($HYConfig); $opt = array( 'action:', 'proxy_status::',//状态 'server_name::',//域名 'proxy_pass::',//后端 'field_name::',//字段名 'value::',//字段内容 ); $param = getopt('', $opt); //print_r($param); switch ($param['action']) { case 'list': echo hyproxy_list($param['proxy_status']); break; case 'make': echo hyproxy_make($param['server_name']); break; case 'add': echo hyproxy_add($param['server_name'],$param['proxy_pass']); break; case 'edit': echo hyproxy_edit($param['server_name'],$param['field_name'],$param['value']); break; case 'del': echo hyproxy_del($param['server_name']); break; default: echo 'error action'; } function hyproxy_list($proxy_status){//done 列出站点列表ID,域名,状态 global $medoo; empty($proxy_status) && $proxy_status = 'start'; $table = 'module_hyproxy'; $columns = array('hyproxy_id','server_name','status'); $where = array('status'=>$proxy_status); $data = $medoo->select($table,$columns,$where); $res = ''; foreach ($data as &$value) { $res.=sprintf("%d,%s,%s\n",$value['hyproxy_id'],$value['server_name'],$value['status']); } return $res; } function hyproxy_make($server_name){//done global $medoo; $table = 'module_hyproxy'; $columns = '*'; $where = ''; if (!empty($server_name)) {//指定域名 $where = array('server_name'=>trim($server_name)); } $data = $medoo->select($table,$columns,$where); $res = ''; if (empty($data)) { $res = "[ERROR] The server_name does not exist.\n"; } else { if (empty($server_name)) { hy_deldir(_HYCONF);//删除所有 } foreach ($data as &$value) { if (!empty($value['proxy_cache'])) { $nginx = sprintf('server { listen 80; listen [::]:80; server_name %s; index %s; location / { default_type text/html; proxy_cache hyproxy; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host %s; proxy_pass %s; if ($http_Cache_Control = "no-cache") { rewrite ^(.*)$ /purge$1 last; } } location ~ /purge(/.*){ proxy_cache_purge hyproxy $scheme://$host$1$is_args$args; } }',$value['server_name'],$value['index'],$value['header_host'],$value['proxy_pass']); } else { $nginx = sprintf('server { listen 80; listen [::]:80; server_name %s; index %s; location / { default_type text/html; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host %s; proxy_pass %s; } }',$value['server_name'],$value['index'],$value['header_host'],$value['proxy_pass']); } if ($value['status']=='start') { $filebytes = file_put_contents(_HYCONF.$value['server_name'].'.conf', $nginx); //写入内容 } else { $filebytes = unlink(_HYCONF.$value['server_name'].'.conf');//删除 } if($filebytes){ $res.=sprintf("[OK] %s conf make is done.\n",$value['server_name']); }else{ $res.=sprintf("[ERROR] %s conf make is error.\n",$value['server_name']); } } } return $res; } function hyproxy_add($server_name,$proxy_pass=''){//done if (empty($server_name)) { return "[ERROR] The server_name is empty.\n";//不能为空 } $res = ''; global $medoo; $table = 'module_hyproxy'; $columns = '*'; $where = array('server_name'=>trim($server_name)); $proxy = $medoo->get($table, $columns, $where); if ($proxy) { return "[ERROR] The server_name is exist.\n";//已存在 } else { empty($proxy_pass) && $proxy_pass = 'http://'.$server_name; if(!preg_match('/^http(s)?:\\/\\/.+/',$proxy_pass)){ $proxy_pass = 'http://'.$proxy_pass; } $data = array( 'server_name' => $server_name, '`index`' => 'index.php index.html index.htm',//index是保留字段 'header_host' => '$host', 'proxy_pass' => $proxy_pass, 'proxy_cache' => 1, 'status' => 'start', 'time' => time() ); $mysqlres = $medoo->insert($table, $data); if ($mysqlres) { $res = "[OK] Proxy add success.\n"; $res.= hyproxy_make($server_name); }else { $res = "[ERROR] Proxy add error.\n"; } } return $res; } function hyproxy_edit($server_name,$field_name='',$value=''){//done if (empty($server_name)) { return "[ERROR] The server_name is empty.\n";//不能为空 } if (empty($field_name)) { return "[ERROR] The field_name is empty.\n";//不能为空 } $value = trim($value); $res = ''; global $medoo; $table = 'module_hyproxy'; $columns = '*'; $where = array('server_name'=>trim($server_name)); $proxy = $medoo->get($table, $columns, $where); if (empty($proxy)) { return "[ERROR] The server_name is not exist.\n";//不存在 } else { if ($field_name=='proxy_pass') { empty($value) && $value = 'http://'.$server_name; if(!preg_match('/^http(s)?:\\/\\/.+/',$value)){ $value = 'http://'.$value; } } if ($field_name=='header_host') { empty($value) && $value = '$host'; } $data = array( $field_name => $value, 'time' => time() ); $mysqlres = $medoo->update($table, $data,array('hyproxy_id'=>$proxy['hyproxy_id'])); if ($mysqlres) { $res = "[OK] Proxy edit success.\n"; $res.= hyproxy_make($server_name); }else { $res = "[ERROR] Proxy edit error.\n"; } } return $res; } function hyproxy_del($server_name){ if (empty($server_name)) { return "[ERROR] The server_name is empty.\n";//不能为空 } $res = ''; global $medoo; $table = 'module_hyproxy'; $columns = '*'; $where = array('server_name'=>trim($server_name)); $proxy = $medoo->get($table, $columns, $where); if (empty($proxy)) { return "[ERROR] The server_name is not exist.\n";//不存在 } else { $mysqlres = $medoo->delete($table, $where); if ($mysqlres) { $res = "[OK] Proxy del success.\n"; }else { $res = "[ERROR] Proxy del error.\n"; } } return $res; } function hy_deldir($path) { //如果是目录则继续 if (is_dir($path)) { //扫描一个文件夹内的所有文件夹和文件并返回数组 $p = scandir($path); foreach ($p as $val) { //排除目录中的.和.. if ($val != "." && $val != "..") { //如果是目录则递归子目录,继续操作 if (is_dir($path . $val)) { //子目录中操作删除文件夹和文件 deldir($path . $val . '/'); //目录清空后删除空文件夹 @rmdir($path . $val . '/'); } else { //如果是文件直接删除 unlink($path . $val); } } } } }