Просмотр файла admin/about/update.php

Размер файла: 4.24Kb
  1. <?php
  2. include '../../engine/includes/start.php';
  3. if (!$creator)
  4. Core::stop();
  5.  
  6. $set['title'] = 'Обновление';
  7. include incDir.'head.php';
  8.  
  9. function update($file)
  10. {
  11. Core::get('zip');
  12. $zip = new Pclzip($file);
  13. $contents = $zip->listContent();
  14.  
  15. if ($contents == 0)
  16. $error = 'Архив поврежден или пуст';
  17. else
  18. {
  19. $config = $zip->extract(PCLZIP_OPT_BY_NAME, 'update.ini', PCLZIP_CB_POST_EXTRACT, 'get_ini');
  20. if (empty($config))
  21. $error = 'update.ini не найден';
  22. else
  23. {
  24. $config = parse_ini_file(tmpDir . 'update.upd');
  25. if (empty($config['version']) || str_replace('.', '', $config['version']) <= str_replace('.', '', Core::Secwind('version')))
  26. $error = 'Невозможно установить обновление до версии '. $config['version'] .', когда уже установлена версия '. Core::Secwind('version');
  27. }
  28. }
  29.  
  30. if (file_exists(tmpDir . 'update.upd'))
  31. unlink(tmpDir . 'update.upd');
  32.  
  33. if (!isset($error))
  34. {
  35. $zip->delete(PCLZIP_OPT_BY_NAME, 'upload.ini');
  36. $zip->extract(PCLZIP_OPT_SUBSTITUE_FILE, H);
  37.  
  38. if (!empty($config['sql']))
  39. {
  40. Global $sql;
  41. $sql->from_file(H . $config['sql']);
  42. $sql->free(true);
  43. Core::msg_show('Сделаны запросы из файла ' .$config['sql'], 'menu_razd');
  44. @unlink(H . $config['sql']);
  45. }
  46.  
  47. if (!empty($config['chmod']))
  48. {
  49. $dirs = explode(' ', $config['chmod']);
  50. foreach($dirs as $dir)
  51. {
  52. chmod(H . $dir, 0777);
  53. }
  54. Core::msg_show('Выставлены права доступа 777 на необходимые папки', 'menu_razd');
  55. }
  56.  
  57. Core::msg_show('SecWind обновлен до версии '.$config['version'] . '<br />Список изменений: '.nl2br(htmlspecialchars($config['descr'])), 'post');
  58. $data = unserialize(file_get_contents(H . 'engine/files/data/secwind.db'));
  59. $data['version'] = $config['version'];
  60. file_put_contents(H . 'engine/files/data/secwind.db', serialize($data));
  61. }
  62.  
  63. unset($zip, $config, $headers);
  64. if (isset($error))
  65. Core::msg_show($error);
  66. }
  67.  
  68. function get_ini($event, &$file)
  69. {
  70. Return Rename($file['filename'], tmpDir . 'update.upd');
  71. }
  72.  
  73. switch($act)
  74. {
  75. default:
  76. echo
  77. 'Ваша версия: '.Core::SecWind('version').'<br />Последняя: Неизвестно<br />
  78. <a href="?act=upload"><div class="link">Выгрузить файл обновления</div></a>
  79. <a href="?act=import"><div class="link">Импортировать файл обновления</div></a>';
  80. break;
  81.  
  82. case 'import':
  83. if (!empty($_POST['url']))
  84. {
  85. $headers = @get_headers($_POST['url'], 1);
  86.  
  87. if (!$headers)
  88. $error = 'Не удалось получить заголовки по указанному адресу';
  89.  
  90. elseif ($headers['Content-Type'] != 'application/zip')
  91. $error = 'Только zip архивы';
  92. else
  93. {
  94. @set_time_limit(20);
  95.  
  96. $up_file = pathinfo($_POST['url'], PATHINFO_FILENAME);
  97.  
  98. file_put_contents(tmpDir . $up_file, file_get_contents($_POST['url']));
  99. update(tmpDir . $up_file);
  100. }
  101. }
  102.  
  103. ?>
  104. <form method = "post">
  105. Путь к zip архиву:<br />
  106. <input type="text" name="url" value="http://"/><br />
  107. <input value = "Импорт" type="submit" />
  108. </form>
  109. <?php
  110. break;
  111.  
  112. case 'upload':
  113.  
  114. if (!empty($_FILES['file']['name']))
  115. {
  116. $pathinfo = pathinfo($_FILES['file']['name']);
  117. if ($pathinfo['extension'] != 'zip')
  118. $error = 'Только zip архивы';
  119. else
  120. {
  121. update($_FILES['file']['tmp_name']);
  122. }
  123. }
  124.  
  125. ?>
  126. <form method="post" enctype="multipart/form-data">
  127. <div class="post">Выберите архив. Расширение файла должен быть "<b>zip</b>" и присутсовать файл "<b>update.ini</b>"</div>
  128. <input type="file" name="file"/><br />
  129. <input value = "Загрузить" name="save" type="submit" />
  130. </form>
  131.  
  132. <?php
  133. break;
  134. }
  135.  
  136. ?>
  137. <a href='/admin/?act=about'><div class="menu_razd">SecWind</div></a>
  138. <a href='?'><div class="menu_razd">Обновление</div></a>
  139. <a href='/admin/'><div class="menu_razd">Админка</div></a>
  140. <?php
  141. include incDir.'foot.php';