public function switch_host() { $id = $this->input['id']; //配置id if (!$id) { $this->errorOutput(NOID); } $is_on = $this->input['is_on']; //操作,1是切到备播,0是切到主控 //获取使用该配置的所有频道标识 $sql = "SELECT code,table_name FROM " . DB_PREFIX . "channel WHERE server_id = " . $id; $q = $this->db->query($sql); while ($row = $this->db->fetch_array($q)) { $codes[] = array('code' => $row['code'], 'table_name' => $row['table_name']); } /***************** 获取主备服务器信息 *******************/ $sql = "SELECT fid,host,input_dir,ts_host FROM " . DB_PREFIX . "server_config WHERE id = " . $id . " OR fid = " . $id; $query = $this->db->query($sql); while ($row = $this->db->fetch_array($query)) { if (!$row['fid']) { $host['m_host'] = $row; } else { $host['b_host'] = $row; } //备播 } include_once CUR_CONF_PATH . 'lib/nginx.live.php'; $server = new m2oLive(); /******************************************************/ if ($is_on) { //备播服务器状态验证 $server->init_env(array('host' => $host['b_host']['host'], 'dir' => $host['b_host']['input_dir'])); if (!$server->get_status()) { $this->errorOutput('备播主机异常,不能开启'); } //重写缓存 foreach ((array) $codes as $k => $v) { @(include CACHE_DIR . 'channel/' . $v['code'] . '.php'); $v['table_name'] == 'dvr' ? $tablename = 'dvr1' : ($tablename = $v['table_name'] . '_1'); $channel_info['channel']['table_name'] = $tablename; $channel_info['channel']['config']['ts_host'] = $host['b_host']['ts_host']; file_put_contents(CACHE_DIR . 'channel/' . $v['code'] . '.php', '<?php $channel_info = ' . var_export($channel_info, 1) . ';?>'); } //打开开关 $sql = "UPDATE " . DB_PREFIX . "server_config SET is_used = 0 WHERE id = " . $id; $this->db->query($sql); } else { //主控服务器状态验证 $server->init_env(array('host' => $host['m_host']['host'], 'dir' => $host['m_host']['input_dir'])); if (!$server->get_status()) { $this->errorOutput('主控主机异常,不能开启'); } //重建缓存 foreach ((array) $codes as $k => $v) { @unlink(CACHE_DIR . 'channel/' . $v['code'] . '.php'); } //关闭开关 $sql = "UPDATE " . DB_PREFIX . "server_config SET is_used = 1 WHERE id = " . $id; $this->db->query($sql); } }
private function check_server_nginx($server_info) { include_once CUR_CONF_PATH . 'lib/nginx.live.php'; $server = new m2oLive(); $matches = $data = array(); preg_match("/(^[0-9]{2,})\\/control\\//i", $server_info['input_dir'], $matches); if (!empty($matches)) { $data['host'] = $server_info['host']; $data['dir'] = ':' . $matches[0]; } else { $data = array('host' => $server_info['host'], 'dir' => $server_info['input_dir']); } $server->init_env($data); return $server->get_status(); }