Как перезагрузить сайт с помощью php ftp на удаленном сервере
X
Заказать сайт
Заказать сайт

Как перезагрузить сайт с помощью php ftp на удаленном сервере

В этом материале будет описан принцип подключения через библиотеку ftp к сайту на удаленном сервере, затем очистка корня сайта от всех файлов и папок и загрузка нового архива сайта с автоматической авторазархивацией.

Принцип работы

Предположим у нас есть два сайта (на разных или одинаковых серверах): mainsss.ru и copysss.ru. У нас есть ftp доступ к сайту copysss.ru до его корня (т.е. внутри лежат файлы и папки этого сайта). Запустим скрипт с сайта mainsss.ru, который подключится по ftp к сайту copysss.ru  и удалит из него index.html и index.php, а затем загрузит index.php и arhive.zip (с mainsss.ru). Далее при открытии в браузере copysss.ru, запустится скрипт index.php, который удалит этот файл и всю старую структуру сайта copysss.ru, а затем разархивирует новый сайт из arhive.zip. Таким образом, мы полностью перезагрузим содержимое сайта copysss.ru.

Создадим внутри mainsss.ru файл copy.php

Для работы нам понадобится подключить в этом файле методом include() класс по работе с ftp. Только в скачанном классе, внутрь Class FTPClient { } вставьте новый метод: public function listFileArr($directory) { $now_dir = ftp_nlist($this->connectionId, $directory); return $now_dir; }

Далее прописываем такой код в copy.php:

<?php
//FTP соединение успешно установлено
if($ftpObj->connect('ftp_host', 'ftp_username', 'ftp_userpassword')) {
$ftpObj->delFile('/index.html'); //удаляем индексные файлы, которые могут помешать в FTP
$ftpObj->delFile('/index.php'); //удаляем индексные файлы, которые могут помешать в FTP
//грузим index-й файл, который сможет удалить все содержимое корня выбранного сайта
$ftpObj->uploadFile('/index.php', $_SERVER['DOCUMENT_ROOT'].'/copy/index.php');
//загружаем архив сайта с текущего сервера на удаленный
$ftpObj->uploadFile('/arhive.zip', $_SERVER['DOCUMENT_ROOT'].'/copy/arhive.zip');
}
?>

Теперь создайте в copysss.ru папку copy и поместите туда архив с новым сайтом arhive.zip и файл index.php, содержимое которого должно быть следующим:

<?php
$dir = __DIR__; //путь от сервера к месту где исполняется этот скрипт, например: /var/www/u53453453/data/www/copysss.ru
function removeDirectory($dir) {
if ($objs = glob($dir."/*")) {
foreach($objs as $obj) {
if(is_dir($obj)) { removeDirectory($obj); } //если папка
else { //если файл
if($obj != __DIR__.'/index.php' && $obj != __DIR__.'/arhive.zip') unlink($obj); //файлы-исключения, которые не надо удалять
} } }
if($dir != __DIR__) rmdir($dir); //удаляем все папки, кроме той, откуда запущен скрипт
}
removeDirectory($dir);

//Разархивируем файлы архива
$zip = new ZipArchive;
if ($zip -> open(__DIR__.'/arhive.zip') === TRUE) {
//переименовываем файл управления и удаляем его
rename(__DIR__."/index.php", __DIR__."/index_delete.php");
unlink(__DIR__."/index_delete.php");
$zip -> extractTo(__DIR__);
$zip -> close(); }
else echo 'Ошибка при обращении к архиву. Возможно он поврежден или еще не загрузился!';
sleep('1');
echo '<script>window.location="/"</script>';
?>

После успешной перезаписи файлов ссылкой mainsss.ru/copy.php, если вы откроете copysss.ru, то запустится новый скрипт в index.php.

Здесь имеется защита от преждевременного обращения к сайту. Например, если архив еще не загрузился, мы не сможем его разархивировать. Для этого делается автообновление каждую секунду sleep('1'). Как только архив с новым сайтом загрузится, начнется его выгрузка в корень сайта.

Чтобы запретить прямое выполнение скрипта в исходном сайте по пути mainsss.ru/copy/index.php. Можете поставить условие с доменом вашего сайта: if($_SERVER['SERVER_NAME'] == 'mainsss.ru') die(); в начале кода.

| | Как перезагрузить сайт с помощью php ftp на удаленном сервере | В этом материале будет описан принцип подключения через библиотеку ftp к сайту на удаленном сервере, затем очистка корня сайта от всех файлов и папок | https://blogprogram.ru/wp-content/uploads/2017/11/820-131x131.jpg

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>