server.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. $html->nav('Параметры server.cfg');
  5. $sql->query('SELECT `address`, `passwd` FROM `control` WHERE `id`="'.$id.'" LIMIT 1');
  6. $unit = $sql->get();
  7. include(LIB.'ssh.php');
  8. if(!$ssh->auth($unit['passwd'], $unit['address']))
  9. {
  10. if($go)
  11. sys::outjs(array('e' => sys::text('error', 'ssh')), $nmch);
  12. sys::back($cfg['http'].'control/id/'.$id.'/server/'.$sid.'/section/settings');
  13. }
  14. include(DATA.'scfg/'.$server['game'].'.php');
  15. $file = '/servers/'.$server['uid'].'/cstrike/cfg/server.cfg';
  16. // Сохранение изменений
  17. if($go)
  18. {
  19. $servercfg = isset($_POST['config']) ? $_POST['config'] : '';
  20. $config = '';
  21. $config_end = $servercfg['\'other\''];
  22. unset($servercfg['\'other\'']);
  23. foreach($servercfg as $cvar => $val)
  24. if($val != '')
  25. $config .= str_replace("'", '', $cvar).' "'.$val.'"'."\n";
  26. // Временый файл
  27. $temp = sys::temp($config.$config_end);
  28. $ssh->setfile($temp, $file, 0644);
  29. $ssh->set('chown server'.$server['uid'].':servers '.$file);
  30. unlink($temp);
  31. $ssh->set('sudo -u server'.$server['uid'].' screen -p 0 -S s_'.$server['uid'].' -X eval \'stuff "exec server.cfg"\015\';');
  32. sys::outjs(array('s' => 'ok'), $nmch);
  33. }
  34. $ssh->set('echo "" >> '.$file.' && cat '.$file.' | grep -ve "^#\|^[[:space:]]*$"');
  35. $fScfg = explode("\n", strip_tags($ssh->get()));
  36. $servercfg = array();
  37. $other = '';
  38. // Убираем пробелы и генерируем массив
  39. foreach($fScfg as $line)
  40. {
  41. // имя квара
  42. $cvar = sys::first(explode(' ', $line));
  43. if($cvar == '')
  44. continue;
  45. // убираем имя квара и оставляем только значение
  46. $value = str_replace($cvar.' ', "", $line);
  47. // выбираем только то, что нам нужно
  48. preg_match_all('~([^"]+)~', $value, $cvar_value, PREG_SET_ORDER);
  49. // Исключаем комментарии
  50. if($cvar == '//')
  51. continue;
  52. $val = sys::first(explode(' //', $cvar_value[0][1]));
  53. // Добавляем данные в массив
  54. if(array_key_exists($cvar, $aScfg))
  55. $servercfg[$cvar] = trim($val);
  56. else
  57. $other .= $line."\n";
  58. }
  59. foreach($aScfg as $name => $desc)
  60. {
  61. if(!isset($servercfg[$name]))
  62. $servercfg[$name] = '';
  63. // Формирование формы
  64. if(strpos($aScfg_form[$name], 'select'))
  65. $form = str_replace('value="'.$servercfg[$name].'"', 'value="'.$servercfg[$name].'" selected="select"', $aScfg_form[$name]);
  66. else
  67. $form = str_replace('['.$name.']', $servercfg[$name], $aScfg_form[$name]);
  68. $html->get('servercfg_list', 'sections/control/servers/games/settings');
  69. $html->set('name', $name);
  70. $html->set('desc', $desc);
  71. $html->set('form', $form);
  72. $html->pack('list');
  73. }
  74. $html->get('servercfg', 'sections/control/servers/'.$server['game'].'/settings');
  75. $html->set('id', $id);
  76. $html->set('server', $sid);
  77. $html->set('cfg', $html->arr['list']);
  78. $html->set('other', $other);
  79. $html->pack('main');
  80. ?>