Обновление приложения Codeigniter как wordpress

Я создал проект с Codeigniter. Я хочу добавить систему, которая может обновлять мой проект, как Wordpress. Пример: Предположим, я запускаю Project V.1.0, но когда я хочу реализовать V2.0, мой клиент может обновить файлы моего проекта с помощью загрузки zip. Я хочу эту систему как Wordpress. И я не знаю, что использовать git. Потому что у меня есть клиент. и я хочу, чтобы они загрузили или собрали zip-файл, содержащий файл версии обновления. И они загружают этот zip на сервер через проект Codeigniter, и проект автоматически обновляется до версии 2.0.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
417
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Загрузите zip-архив, распакуйте и замените все файлы. Структура zip должна быть такой же, как у проекта.

Что-то вроде этого:

update.zip

./root/application/controllers/*.*
./root/application/views/*.*
...

Это будет возможно только в том случае, если у пользователя, запускающего apache / nginx, достаточно прав в файловой системе.

Ответ принят как подходящий

Поскольку ваш вопрос довольно широкий, я дам вам довольно широкий ответ; Обычно я бы даже не отвечал на такие вопросы, но у меня есть соответствующий сценарий, который я сделал некоторое время назад.

Это НЕ plug and play и имеет некоторые сторонние зависимости от CakePHP, которые необходимо загружать автоматически.

Скрипт создает изображение всех указанных папок в массиве, добавляет манифест файлов и файл идентификатора, например. ВЕРСИЯ 2. Образ (zip-файл) можно затем загрузить на сайт, на котором работает ВЕРСИЯ 1, при условии, что он имеет ту же модель обновления. После загрузки модель затем извлекает файлы до тех пор, пока в zip-архиве есть действительный файл идентификатора (чтобы пользователи не могли загружать несвязанный zip-архив и уничтожать систему); скрипт также создает текущий образ сайта (в ВЕРСИИ 1) на тот случай, если потребуется восстановление.

В сценарии также есть функция восстановления предыдущей версии, которая удалит все дополнительные файлы, которые были в версии 2, а не 1, и восстановит исходные файлы версии 1.

Я не поддерживаю это. Но, надеюсь, вы найдете это немного полезным - он вроде как взломан вместе, но в моем ограниченном тестировании он работал нормально.

Контроллер:

<?php

if (!defined('BASEPATH')) {
    exit('No direct script access allowed');
}

/**
 * 
 * NEOU CMS v4 CI Edition
 * @copyright (c) 2018, Alexander Fagard
 * @requires PHP version >= 5.6
 * 
 * You cannot redistribute this document without written permission from the author
 * 
 */
class Update extends MY_Backend {

    static $perm = ['admin_only' => true];

    public function __construct() {
        parent::__construct();
        $this->lang->load('core_update');
        $this->load->model('backend/core_update_model', 'update');
    }

    public function index() {
        $this->tpl->head($this->lang->line('update_heading'));
        $this->tpl->body();
        $this->output->append_output($this->messages->display());
        $data = array(
            'is_local' => $this->localization->is_local(),
            'previous_exist' => $this->update->previous_exists()
        );
        $this->parser->parse('backend/core_update', $data);
        $this->tpl->footer();
    }

    public function restore() {
        try {
            $this->update->restore_previous();
            rmdir_recursive($this->update->updates_folder);
            $this->messages->success($this->lang->line('update_previous_restored'));
        } catch (Exception $e) {
            $this->messages->error($e->getMessage());
        } finally {
            redirect(CMS_DIR_NAME . '/update');
        }
    }

    public function apply() {
        $this->load->helper('byte_helper');
        try {
            $this->update->mk_update_dir();
            $config['upload_path'] = $this->update->updates_folder;
            $config['overwrite'] = true;
            $config['allowed_types'] = 'zip';
            $config['max_size'] = convert_bytes_to_type(file_upload_max_size(), 'KB');
            $config['file_ext_tolower'] = true;
            $this->load->library('upload', $config);
            if (!$this->upload->do_upload('update')) {
                throw new Exception($this->upload->display_errors('', ''));
            }
            $data = $this->upload->data();
            $this->update->apply_update($data['full_path']);
            $this->messages->success($this->lang->line('update_applied'));
        } catch (Exception $e) {
            $this->messages->error($e->getMessage());
        } finally {
            redirect(CMS_DIR_NAME . '/update');
        }
    }

    public function create() {
        if (!$this->localization->is_local()) {
            show_error($this->lang->line('update_localhost'), 500);
        }
        try {
            $this->update->create_update();
            $this->messages->success(sprintf($this->lang->line('update_created'), $this->update->files_processed));
        } catch (Exception $e) {
            $this->messages->error($e->getMessage());
        } finally {
            redirect(CMS_DIR_NAME . '/update');
        }
    }

}

Модель: https://pastebin.com/UuzQ1tds

Алекс спасибо за ваш код. Это очень полезно для меня
Khan Sunny 14.11.2019 20:29

Другие вопросы по теме