Создаем простой инструмент бэкапа и восстановления настроек вашего сайта

Опубликовано: 01.09.2018

видео Создаем простой инструмент бэкапа и восстановления настроек вашего сайта

SEO-безопасность вашего сайта

Настройки — одна из самых важных частей данных в WordPress, ведь здесь, в этой секции хранятся различные настройки конфигурации (). Также они содержатся в базе данных подобно другой важной информации, такой как посты, страницы и т.д. День за днем все эти опции могут изменяться как со стороны WordPress, так и самими пользователями. Так как же вернуть предыдущее состояние настроек без того, чтобы не запоминать значение каждого параметра наизусть?



| Скачать исходники |

В данном пошаговом руководстве я собираюсь показать вам, как создать простую возможность бэкапа и восстановления настроек для вашего блога на базе WordPress. При помощи данной функциональности вы можете бэкапить все опции с тем, чтобы в дальнейшем восстановить их из безопасного места в любое время, когда понадобится, и без необходимости настраивать сайт заново.


Видео #57. Резервное копирование в Windows 10

Прежде чем мы начнем

Если в целом, то у нас будет 2 секции, одна из которых будет отвечать за экспорт данных для бэкапа, а вторая — для импорта данных и восстановления информации. Так что работу этих 2 секций я продемонстрирую вам, создав простой плагин.


Как переустановить Windows с сохранением всех данных?

Шаг 1. Заголовок плагина

Для начала я должен написать пару строчек кода, чтобы "рассказать" WordPress о нашем новом плагине:

/* Plugin Name: I/E Option Plugin URI: http://wp.tutsplus.com/ Description: This is a sample plugin with backup and restore options feature. Author: Lee Pham Version: 1.0 Author URI: http://twitter.com/leephamj */

И вот какой результат мы получим:

Шаг 2. Создаем администраторский раздел страницы

Теперь нам надо создать место, куда мы поместим интерфейс плагина. Здесь и будут отображаться 2 ключевых функциональности, речь о которых шла выше (возможности импорта и экспорта). Так что создам-ка я страницу для секции администрирования:

function register_ie_option() { add_menu_page('IE Option Page', 'IE Option', 'activate_plugins', 'ie-option', 'ie_option_page', '', 76); add_submenu_page('ie-option', 'Import', 'Import', 'activate_plugins', 'ie-import-option', 'ie_import_option_page'); add_submenu_page('ie-option', 'Export', 'Export', 'activate_plugins', 'ie-export-option', 'ie_export_option_page'); } function ie_option_page() { // Our stuff here } function ie_import_option_page() { // Content Import Feature } function ie_export_option_page() { // Content Export Feature } add_action('admin_menu', 'register_ie_option');

Вот некоторые важные моменты:

Мы используем add_menu_page в качестве встроенной WordPress-функции, чтобы добавить новый верхний уровень в секции меню для боковой панели администратора, где параметр ie_option_page — это функция обратного вызова для вывода контента на странице. С тем, чтобы разделить 2 основных функциональности в 2 разных секции, мы используем add_submenu_page для добавления их к меню верхнего уровня, которое мы создали на предыдущем этапе. Как вы можете видеть, каждая функция также обеспечена функцией обратного вызова, чтобы отображать контент так, как это делает функция add_menu_page . Не имеет важного значения, объедините ли вы эти функции в одном месте. Я просто сделал такую структуру, чтобы было понятнее. Потом мы добавляем register_ie_option в admin_menu с тем, чтобы включать нашу целевую функцию всякий раз, когда происходит вызов этого действия.

Шаг 3. Создаем возможность экспорта

Я хочу создать страницу экспорта примерно такого вида:

Создаем "скелет" страницы для опции экспорта

function ie_export_option_page() { if (!isset($_POST['export'])) { ?> <div class="wrap"> <div id="icon-tools" class="icon32"><br /></div> <h2>Export</h2> <p>When you click <tt>Backup all options</tt> button, system will generate a JSON file for you to save on your computer.</p> <p>This backup file contains all configution and setting options on our website. Note that it do <b>NOT</b> contain posts, pages, or any relevant data, just your all options.</p> <p>After exporting, you can either use the backup file to restore your settings on this site again or another WordPress site.</p> <form method='post'> <p class="submit"> <?php wp_nonce_field('ie-export'); ?> <input type='submit' name='export' value='Backup all options'/> </p> </form> </div> <?php } elseif (check_admin_referer('ie-export')) { // Do something if Backup all options button clicked } }

Мы только что создали форму с кнопкой и проверили, нажата ли кнопка или нет. Дополнительно мы добавляем некоторый текст с инструкцией при помощи одного из доступных в WordPress CSS-классов. Для проверки безопасности я использую функции wp_nonce_field() и check_admin_referer() , о них можно почитать в .

Задаем имена для генерируемых файловых имен

$blogname = str_replace(" ", "", get_option('blogname')); $date = date("m-d-Y"); $json_name = $blogname."-".$date;

Просто дайте имя файлу, чтобы вы могли легко увидеть, куда и когда он был экспортирован.

Включаем опции бэкапа и функции кодировки данных JSON

$options = get_alloptions(); foreach ($options as $key => $value) { $value = maybe_unserialize($value); $need_options[$key] = $value; } $json_file = json_encode($need_options);

Это — важный шаг, так что давайте уделим ему внимание:

get_alloptions() — функция, которая выводит все опции вашего сайта и возвращает их в виде массива, в данном случае — массива $options . Выбрав все настройки, мы должны привести значение настроек к серийному отображению данных, так что для начала их надо сделать не серийными. В наши намерения входит создание JSON для хранения данных в бэкапе. JSON — это легкий и мощный способ хранения текстовой информации. Что нам надо сделать, так это конвертировать наши данные в синтаксис JSON, и в достижении этой цели нам поможет json_encode . ob_clean(); echo $json_file; header("Content-Type: text/json; charset=" . get_option( 'blog_charset')); header("Content-Disposition: attachment; filename=$json_name.json"); exit();

Потом мы "обернем" содержимое наших JSON-данных в 2 важных функции: ob_clean() и exit() — чтобы убедиться, что наш сгенерированный JSON-файл содержит только данные в формате JSON, и что json_file не содержит никаких других данных.

Кстати, мы отправляем запрос к заголовку клиента, который отображает диалог загрузки. Чтобы этот диалог работал надлежащим образом, мы должны поместить функцию ob_start() в верхней части кода нашего плагина. Это предотвратит ошибки в заглавной части: может, где-то есть дополнительные пробелы или пустые строки кода, которые в WordPress могут вызвать такие ошибки.

(JavaScript Object Notation) — легковесный формат обмена данными. Он легко читается и пишется программистом либо пользователем; а машинам его легко парсить и генерировать.

Вот как выглядит весь код функции экспорта данных:

function ie_export_option_page() { if (!isset($_POST['export'])) { ?> <div class="wrap"> <div id="icon-tools" class="icon32"><br /></div> <h2>Export</h2> <p>When you click <tt>Backup all options</tt> button, system will generate a JSON file for you to save on your computer.</p> <p>This backup file contains all configution and setting options on our website. Note that it do <b>NOT</b> contain posts, pages, or any relevant data, just your all options.</p> <p>After exporting, you can either use the backup file to restore your settings on this site again or another WordPress site.</p> <form method='post'> <p class="submit"> <?php wp_nonce_field('ie-export'); ?> <input type='submit' name='export' value='Backup all options'/> </p> </form> </div> <?php } elseif (check_admin_referer('ie-export')) { $blogname = str_replace(" ", "", get_option('blogname')); $date = date("m-d-Y"); $json_name = $blogname."-".$date; // Namming the filename will be generated. $options = get_alloptions(); // Get all options data, return array foreach ($options as $key => $value) { $value = maybe_unserialize($value); $need_options[$key] = $value; } $json_file = json_encode($need_options); // Encode data into json data ob_clean(); echo $json_file; header("Content-Type: text/json; charset=" . get_option( 'blog_charset')); header("Content-Disposition: attachment; filename=$json_name.json"); exit(); } }

Шаг 4. Создаем возможность импорта

Это задание для страницы будет довольно простым, отображается форма загрузки и парсятся данные из файла JSON для бэкапа наших настроек.

Создаем "скелет" страницы импорта

function ie_import_option_page() { ?> <div class="wrap"> <div id="icon-tools" class="icon32"><br /></div> <h2>Import</h2> <?php if (isset($_FILES['import'])) { // Do something if a file was uploaded } ?> <p>Click Browse button and choose a json file that you backup before.</p> <p>Press Restore button, WordPress do the rest for you.</p> <form method='post' enctype='multipart/form-data'> <p class="submit"> <?php wp_nonce_field('ie-import'); ?> <input type='file' name='import' /> <input type='submit' name='submit' value='Restore'/> </p> </form> </div> <?php }

Как и в случае с экспортом, мы создаем форму, только на этот раз добавляем кнопку Browse, чтобы пользователь мог выбрать желаемый файл и добавить его.

Валидация и обновление файла JSON

if (isset($_FILES['import'])) { if ($_FILES['import']['error'] > 0) { wp_die("Error happens"); } else { $file_name = $_FILES['import']['name']; $file_ext = strtolower(end(explode(".", $file_name))); $file_size = $_FILES['import']['size']; if (($file_ext == "json") && ($file_size < 500000)) { $encode_options = file_get_contents($_FILES['import']['tmp_name']); $options = json_decode($encode_options, true); foreach ($options as $key => $value) { update_option($key, $value); } echo "<div class='updated'><p>All options are restored successfully.</p></div>"; } else { echo "<div class='error'><p>Invalid file or file size too big.</p></div>"; } } }

Если в процессе выгрузки появились ошибки, просто выскочит сообщение " An error has occurred ". Если ошибок не было, получаем расширение и размер файла, загружаем эти сведения в переменные и проверяем их. Принимаем только файлы с расширением " .json " и размером менее 500 000 байт. Если файл этим критериям не соответствует, то просто отображается сообщение об ошибке: " Invalid file or file size too big ." Примечание : Размер файлы вы можете настроить самостоятельно, если понадобится.

Затем переменная $encode_options получит все содержимое файла. Поскольку файл содержит данные JSON, перед его использованием мы должны эти данные сначала декодировать. Чтобы это сделать, мы используем json_decode с секундным параметром, который имеет значение true , и эта функция выдает значение массива. Имея значение массива, мы начинаем работу в цикле. В каждой итерации мы будем обновлять данные тем же ключом и его значением. В конце все наши настройки будут восстановлены в точности такими, какими они были на момент бэкапа, и появится сообщение о том, что операция завершилась успешно.

И вот как выглядит весь код для функции импорта данных:

function ie_import_option_page() { ?> <div class="wrap"> <div id="icon-tools" class="icon32"><br /></div> <h2>Import</h2> <?php if (isset($_FILES['import']) && check_admin_referer('ie-import')) { if ($_FILES['import']['error'] > 0) { wp_die("Error happens"); } else { $file_name = $_FILES['import']['name']; // Get the name of file $file_ext = strtolower(end(explode(".", $file_name))); // Get extension of file $file_size = $_FILES['import']['size']; // Get size of file /* Ensure uploaded file is JSON file type and the size not over 500000 bytes * You can modify the size you want */ if (($file_ext == "json") && ($file_size < 500000)) { $encode_options = file_get_contents($_FILES['import']['tmp_name']); $options = json_decode($encode_options, true); foreach ($options as $key => $value) { update_option($key, $value); } echo "<div class='updated'><p>All options are restored successfully.</p></div>"; } else { echo "<div class='error'><p>Invalid file or file size too big.</p></div>"; } } } ?> <p>Click Browse button and choose a json file that you backup before.</p> <p>Press Restore button, WordPress do the rest for you.</p> <form method='post' enctype='multipart/form-data'> <p class="submit"> <?php wp_nonce_field('ie-import'); ?> <input type='file' name='import' /> <input type='submit' name='submit' value='Restore'/> </p> </form> </div> <?php }

Создаем собственный инструмент бэкапа для тем или плагинов

В приведенном плагине-примере я сохранил все настройки сайта с использованием функции get_alloptions для WordPress. Если же вам надо применить такой механизм бэкапа к своим конкретным нуждам, то просто сделайте следующее:

$options = array('your_option1_name' => get_option('your_option1_name'), 'your_option2_name' => get_option('your_option2_name'); $json_file = json_encode($options);

И перейдите к следующему шагу, как было показано ранее. Вы можете свободно выбрать, какие именно опции хотите сохранить в бэкапе!

Заключение

В этом пошаговом руководстве мы посмотрели, как создать простой инструмент для бэкапов и восстановления настроек сайта. Вы наверняка заметили, что мой плагин — это просто пример, а не официальный продукт. Моей целью не было написать совершенный плагин, а лишь просто продемонстрировать вам основные принципы функции бэкапа настроек сайта. Проанализировав эти принципы и поняв их, вы можете создать собственный инструмент для бэкапа шаблонов или плагинов, а также сделать такой бэкап настолько гибким в настройке, насколько вы сами захотите. Так что данную функциональность вы вполне можете сделать изолированной для конкретных шаблонов или плагинов.

Надеюсь, данное руководство было вам полезным, сообщите ваши мысли по этому поводу в комментариях и спасибо за прочтение!

Источник: 
IRC (Internet Relay Chat)
rss