У вас есть два сценария:
- Веб-сервер может записывать в файлы.
- Веб-сервер не может записывать в файлы.
Это просто определяет, будете ли вы распаковывать ZIP-файл или использовать FTP для обновления файлов.В случае эфира ваш первый шаг - сделать дамп базы данных и сделать резервную копию существующих файлов, чтобы пользователь мог откатиться, если что-то пойдет не так.Как уже говорили другие, важно сохранить все, что пользователь, скорее всего, настроит за рамками обновления.Wordpress делает это красиво.Если пользователь внес изменения в основной логический код, он, вероятно, достаточно умен, чтобы самостоятельно разрешать любые конфликты слияния (и достаточно умен, чтобы знать, что обновление одним щелчком, вероятно, потеряет свои модификации).
Ваш второй шаг - убедиться, что ваш скрипт не умирает, если браузер закрыт.Это процесс, который действительно не должен прерываться.Вы можете сделать это с помощью ignore_user_abort(true);
или каким-либо другим способом.Или, если хотите, разрешите пользователю установить флажок «Продолжайте, даже если я отключусь».Я предполагаю, что вы будете обрабатывать ошибки внутренне.
Теперь, в зависимости от разрешений, вы можете:
- Сжать файлы для обновления в каталог system / tmp
- Сжатие файлов для обновления во временный файл в домашнем каталоге
Затем вы готовы:
- Скачать и распаковать обновление
en situ
или на месте. - Загрузите и распакуйте обновление в системный каталог / tmp и используйте FTP для обновления файлов в веб-корне
Затем вы можете:
- Примените все необходимые изменения SQL
- Спросите пользователя, все ли прошло нормально
- Откатитесь, если дела пошли плохо
- Очистите временный каталог в каталоге system / tmp илилюбые промежуточные файлы в корневом / домашнем каталоге пользователя.
Самый важный аспект - убедиться, что вы можете откатить изменения, если что-то пошло не так.Еще одна вещь, которую нужно гарантировать, это то, что если вы используете / tmp, обязательно проверьте разрешения вашей промежуточной области.0600
должно быть хорошо.
Посмотрите, как это делают Wordpress и другие.Если ваш выбор лицензий и их согласен, вы можете даже использовать этот код повторно.
Удачи в вашем проекте.