Обновление\бэкап MODX на сервере без FTP


Хостинг для MODX. modhost.pro

Возникла необходимость обновить Revolution на сервере с медленным FTP. Копирование мне радостно показывало, что 4500 файлов будет заливаться около 7ми часов, и я решил как-то ускорить процесс.
Суть метода сводится к одному предложению: Распаковка zip архива прямо на сервере с помощью php.

Для работы с архивами в комплекте с Revo идет библиотека pclzip.lib.php — смело используем ее.

Обновление1. Качаем свежий Revo, любой версии.

2. Распаковываем его у себя на компе и запаковываем обратно без директории. Смысл в том, чтобы при распаковке архива не создавалось директория, типа modx-2.2.4-pl, а все файлы загружались в корень.

3. Создаем на сервере в корне новый файл php и копипастим туда:
<form enctype="multipart/form-data" action="" method="POST">
  Upload a Zip Archive (*.zip):
  <input name="zip" type="file" />
  <input type="submit" value="Upload" />
</form>
<?php

if(isset($_FILES['zip'])){
	require MODX_CORE_PATH . 'xpdo/compression/pclzip.lib.php';
	$filename = $_FILES['zip']['name'];

	if(move_uploaded_file($_FILES['zip']['tmp_name'], $filename))
	    echo "Uploaded ". $filename . " - ". $_FILES['zip']['size'] . " bytes<br />";
	else
		die("<font color='red'>Error : Unable to upload file</font><br />");

	$archive = new PclZip($filename);

	if ($archive->extract(PCLZIP_OPT_PATH, '') == 0)
		die("<font color='red'>Error : Unable to unzip archive</font>");

	$list = $archive->listContent();
	echo "<br /><b>Files in Archive</b><br />";
	for ($i=0; $i<sizeof($list); $i++) {

		if(!$list[$i]['folder'])
			$bytes = " - ".$list[$i]['size']." bytes";
		else
			$bytes = "";

		echo "".$list[$i]['filename']."$bytes<br />";
	}
	unlink($filename);
}
Это не мое творчество, это я где то нашел и слегка модифицировал.

4. Открываем из броузера наш скрипт, выбираем для загрузки перепакованый архив, жмем submit и надеемся, что все прокатит.

5. Дальше как обычно: заходим браузером на sitename.ru/setup/, выбираем язык и обновляем движок.

P.S.
Для загрузки php файлов через менеджер MODX, переименовываем их сначала в txt, грузим, а потом переименовываем обратно в php. Или можно разрешить в настройках админки грузить php.

Не забудьте удалить загрузчик и pclzip.lib.php. Ну и директорию setup, конечно, если она останется после установки.


БэкапБэкап всех файлов сайта.
Все как и при апгрейде: создать файл, вставить код, положить в корень и запустить через браузер.
<?php
  require MODX_CORE_PATH . 'xpdo/compression/pclzip.lib.php';
  $archive = new PclZip('archive.zip');
  $v_dir = getcwd();

  $v_remove = $v_dir;

  $v_list = $archive->create($v_dir, PCLZIP_OPT_REMOVE_PATH, $v_remove);
  if ($v_list == 0) {
	die("Error : ".$archive->errorInfo(true));
  }
?>
18 июня 2012, 18:08    Василий Наумкин   G+  
6    2655 0

Комментарии (6)

  1. Walther Heisenberg 30 августа 2013, 21:15 # 0
    require MODX_CORE_PATH. 'core/xpdo/compression/pclzip.lib.php';
    > MODX_CORE_PATH – лишнее!
    1. Василий Наумкин 31 августа 2013, 05:34 # 0
      Спасибо, поправил.
    2. Dima 17 февраля 2015, 00:27 # 0
      После экспорта «сжатая ZIP папка имеет неправильный формат». В чем может быть проблема!?
      1. Василий Наумкин 17 февраля 2015, 03:24 # 0
        Скорее всего, хостингу не хватило времени всё сжать, поэтому архив недописан.

        Для больших объёмов этот способ не подходит, конечно.
      2. Dima 22 марта 2015, 12:49 # 0
        1. Василий Наумкин 22 марта 2015, 13:53 # 0
          Поправил, спасибо.
        Вы должны авторизоваться, чтобы оставлять комментарии.