Код — это Поэзия. Про программное обеспечение и не только.
Автор: Evgeni
Веб-разработчик, фрилансер и фанат WordPress с 2012 года. На этом сайте делюсь заметками для начинающих по разработке на WordPress. Надеюсь увидеть вас в числе своих подписчиков.
BitLocker — это функция безопасности Windows, которая обеспечивает шифрование для целых томов, устраняя угрозы кражи или раскрытия данных с потерянных, украденных или неправильно списанных устройств.
Чтобы задействовать BitLocker необходимо нажать правой кнопочкой мышки на нужном диске и включить функцию
Но может случиться так, что BitLocker при включении закапризничает и выдаст ошибку
В этом случае, для успешного включения необходимо сделать дополнительную настройку.
Шаг 1
Нажмите клавиши Win+R на клавиатуре, введите gpedit.msc и нажмите Enter.
откроется вот такое окно редактора групповых политик Windows
Шаг 2
Перейдите к разделу по следующему пути: Конфигурация компьютера — Административные шаблоны — Компоненты Windows — Шифрование диска BitLocker — Диски операционной системы.
Далее, в правой части окна найдите параметр «Этот параметр политики позволяет настроить требование дополнительной проверки подлинности при запуске» и дважды кликните по нему мышью.
Этот параметр политики позволяет указать, требует ли BitLocker дополнительной проверки подлинности при каждом запуске компьютера, а также используется ли BitLocker в сочетании с доверенным платформенным модулем или без него.
Если вы хотите использовать BitLocker на компьютере без доверенного платформенного модуля, установите флажок «Разрешить использование BitLocker без совместимого доверенного платформенного модуля». В этом режиме для запуска необходим либо пароль, либо USB-накопитель. При использовании ключа запуска ключевые сведения, применяемые для шифрования диска, хранятся на USB-накопителе, образуя USB-ключ. При установке USB-ключа проверяются права на доступ к диску, и диск становится доступным. Если USB-ключ потерян или недоступен или вы забыли пароль, вам придется воспользоваться одним из параметров восстановления BitLocker, чтобы получить доступ к диску.
Шаг 3
Повторите включение шифрования и выберите метод подтверждения: или при помощи пароля, или при помощи ключа сохранённого на USB-устройство
есть возможность сохранения ключа в учетную запись Майкрософт или даже его печать 🙂
далее указываем какую часть диска требуется зашифровать. Выбираю весь диск.
режим шифрования
и перезагружаем компьютер …
После перезагрузки повторим клик по нашему диску
Видим, что название сменилось на новое слово Управление.
При переходе по этой ссылки мы видим состояние наших дисков. Выбранный ранее диск зашифрован и работает в режиме BitLocker
С Главной страницы сайта путь до загрузки будет следующий:
далее
для стабильной работы и совместимости рекомендуется загружать версию LTS (Long term support) т.е. версия с долгосрочной поддержкой от разработчиков.
Шаг 2. Откройте командную оболочку Windows
Не знаете как запустить командную строку (cmd) в Windows? Очень просто!
Вариант 1
Нажмите сочетания клавиш Win + R
В открывшемся окне Выполнить напишите cmd и нажмите кнопку OK
Перед Вами откроется примерно вот такое окно, куда мы и будем вносить команды по созданию нашего загрузочного USB-носителя.
Вариант 2. Через Поиск
Второй универсальный метод заключается в поиске через глобальный поиск Windows. Например, в версии Windows 11 можно нажать на иконку поиск или сразу воспользоваться поиском через меню Пуск
Шаг 3. Вставьте USB-устройство флэш-памяти в работающий компьютер или ноутбук
Убедитесь, что оно появилось в системе, например, это можно увидеть в разделе Мой компьютер. Чтобы убедиться, Вы можете при открытом окне Мой компьютер вынуть и снова вставить в разъем USB ваш носитель. Естественно, он должен снова отобразиться
Шаг 4. Работа в командной строке
Далее, нам предстоит выполнить последовательность команд, которые и создадут загрузочный носитель с операционной системой Ubuntu
Введите первую команду diskpart
Далее подтвердите действие и перед вами должно появиться вот такое рабочее окно утилиты DISKPART — помогает управлять дисками компьютера (дисками, секциями, томами или виртуальными жесткими дисками).
В открывшемся новом окне командной строки введите list disk
Внимание! Постарайтесь точно определить, например, по объему, нужный диск
В моём случае это диск с объемом в 7 Гб (7651 Мб).
В командной строке введите select disk «X» , где X — номер диска или буквы диска USB-устройства флэш-памяти, а затем нажмите клавишу ENTER.
В моём случае это цифра 3.
Введите clean и нажмите клавишу ENTER. Эта команда удаляет все данные с USB-устройства флэш-памяти.
Далее создадим новый основной раздел на USB-устройстве флэш-памяти, для этого введите create partition primary, и нажмите клавишу ENTER.
Чтобы выбрать созданный раздел, введите select partition 1 и нажмите клавишу ENTER.
Далее, отформатируем раздел. Для этого введите format fs=ntfs quick и нажмите клавишу ENTER.
Если серверная платформа поддерживает Единый интерфейс EFI (UEFI), следует отформатировать USB-устройство флэш-памяти в файловой системе FAT32, а в NTFS. Чтобы отформатировать раздел в файловой системе FAT32, введите format fs=fat32 quickи нажмите клавишу ENTER.
И финальным действием нужно пометить раздел как активный, для этого введите active и нажмите клавишу ENTER.
Отлично! Подготовка будущего установочного накопителя прошла успешно! Можно завершить работу с DISKPART набрав exit и нажав ENTER.
Теперь нам необходимо скопировать файлы из образа (который мы скачали) на подготовленный носитель.
Шаг 5. Скопируйте все файлы на подготовленный носитель
Сперва мы должны смонтировать образ который скачали. Нажимаем на нём правой кнопочкой мышки и затем Подключаем (монтируем)
Откроется окно с файлами этого скаченного образа Ubuntu
Ну а в знакомом для многих пользователей разделе Мой компьютер будет находится в виртуальном дисководе ваш подключенный носитель с Ubuntu
Тут главное не запутаться в дисках. Будьте внимательны.
Копирование мы будем осуществлять в командной строке, напомню что ранее мы закрыли окно DISKPART и вернулись к командной строке (cmd)
Попробуйте там ввести robocopy, если всё идёт правильно, то вы непременно должны увидеть вот такое окно
Robocopy(от англ. Robust File Copy) — утилита командной строки которая копирует данные файлов и папок из одного расположения в другое.
Отлично. Теперь внимательно взгляните на ваши диски, вернее на их буквы и точно поймите что куда вы будете копировать.
В моём случае это из носителя с назначенной буквой G в носитель с буквой E. Ещё раз, G: — подключенный ISO-файл c Ubuntu, а E: — это устройство флэш-памяти).
/s — копирует вложенные каталоги. Этот параметр автоматически исключает пустые каталоги.
robocopy G: E: /s
копирование успешно запушено. Теперь можно пойти попить кофе 🙂
Копирование завершено. Наш установочный носитель с Убунту готов! Теперь осталось сделать перезагрузку системы и загрузиться с нашего носителя. Но это уже совершенно другая история 🙂
Дополнительный пароль защиты ключа можно пропустить, нажав снова «Enter»:
И после следующего клика наша пара ключей (публичный и приватный) будут сгенерированы и сохранены в указанную директорию
Шаг 3. Копирование публичного ключа в буфер обмена
Зачастую, вы будете делиться своим публичным ключем с другими разработчиками или сервисами такими, как GitHub, поэтому нам нужно научиться копировать значение публичного ключа в буфер обмена. Но прежде давайте проверим и посмотрим как называется наш ключ.
Обзор существующих ключей SSH
Чтобы проверить и увидеть наш сгенерированный ключ введите в терминал следующую команду:
ls -al ~/.ssh
Эта команда отобразит наши ключи. Нас интересует ключ с расширением .pub
Копируем содержимое ключа в буфер обмена
cat ~/.ssh/id_ed25519.pub | pbcopy
или вот так:
pbcopy < ~/.ssh/id_ed25519.pub
В итоге содержимое вашего ключа (по сути это и есть ключ) будет в буфере обмена и вот что он из себя представляет:
Эта статья ориентирована на начинающих пользователей. В ней мы не будем углубляться в теорию об AJAX, а сразу приступим к последовательному рассмотрению реализации этого метода обмена данными. Суть AJAX-запросов состоит в том, чтобы без перезагрузки страницы менять на ней информацию, то есть осуществлять обмен данными между клиентом (браузером) и сервером.
Задача: Без перезагрузки страницы отправить данные на сервер (сделать запрос), далее получить ответ, обработать и вывести на клиентской части (в браузере).
Решение: Прежде всего стоит отметить, что рассматриваемая последовательность действий и особенности работы с AJAX в этой статье справедливы только для WordPress и не будут соответственно работать в других CMS. Это нужно понимать. Что всё происходит в контексте CMS WordPress.
Последовательность
Прежде всего начнём с последовательности. Именно тут важно уловить принцип работы AJAX в WordPress.
На странице происходит какое-то событие (клик, выбор варианта из выпадающего списка, отметка чек-бокса и т.п.)
Это событие вызывает функцию JavaScript или на базе библиотеки jQuery.
В эту функцию передаются данные и отправляются на сервер через HTTP-запрос.
AJAX — это соединение технологий для асинхронной отправки данных (т.е. без перезагрузки страницы). AJAX-запрос можно выполнить на чистом JavaScript или через методы библиотеки jQuery. Так как jQuery входит в ядро WordPress принято писать запросы на базе её.
Сервер получает наш запрос и обрабатывает данные — выполняет функции на уровне PHP и СУБД (база данных).
Далее, сервер отправляет обработанные данные или просто какую-то служебную информацию браузеру в виде HTTP-ответа
Функция (метод) библиотеки jQuery, которая изначально отправила запрос, получив ответ от сервера, может, например, вывести сообщение пользователю или обновить какую-то информацию на странице, естественно без её перезагрузки.
Примерно такая последовательность происходит при взаимодействии браузера (клиентская часть) с сервером по средствам AJAX. И сейчас с помощью кода мы восполним эту последовательность и посмотрим на неё в действии.
При создании кнопки задайте ей идентификатор. По ссылке выше есть полный пример добавления. Предположим ID нашей кнопки так и называется «knopochka». Теперь переходим к первому шагу — отслеживанию события. Отслеживать мы будем клик по этой кнопочке. Использовать AJAX мы будем на базе библиотеке jQuery при помощи метода .post()
Давайте немного разберёмся в основных моментах. Самый главный момент это url — адрес куда будет отправлен наш запрос. В качестве данных (data) запроса у нас будет выступать строка или JSON объект.
Все AJAX-запросы для обработки в WordPress должны отправляться на специальный адрес wp-admin/admin-ajax.php. Естественно этот адрес на уровне jQuery получить не получится (хотя и можно его полностью прописать, но такой способ не будет универсальным). Для этого мы задействуем специальную функцию wp_localize_script() которая его и определит для дальнейшего использования.
Стоит отметить, что это необходимо делать для запросов в публичной части сайта, если вы разрабатываете функционал для Панели управления (“админка”) — приватной части сайта, то там уже необходимые переменные определены и вызывать wp_localize_script() перед вашим скриптом нет необходимости.
Подключение JS-скрипта
Создайте файлик с расширением js и подключите его на ваш сайт. Функция подключения скрипта из плагина может выглядеть примерно так:
После подключения убедитесь в том, что ваш скрипт «инклудится» на странице. Так как мы передали одним из аргументов в функцию wp_enqueue_script подключения скрипта array(‘jquery’) — зависимость от библиотеки jQuery, то ожидаем, что наш скрипт будет подключён после jQuery. Это можно увидеть в примере ниже:
После этого нам нужно отследить событие по клику на нашу кнопку. Зная её идентификатор, мы смело можем добавить в наш файл уже осмысленный код:
Теперь клик по нашей кнопке будет вызывать метод alert()
Отлично! Теперь переходим непосредственно к отправке AJAX-запроса и первым делом нам нужно получить URL обработчика. В этом нам поможет специальная функция wp_localize_script()
wp_localize_script() отработает в том случае, если зарегистрированный скрипт будет подключен. Наш скрипт зарегистрирован под идентификатором «ajax_demo», соответственно первым аргументом мы эту зависимость и указали функции wp_localize_script(), ну а следующий аргумент — это название объекта «demo_ajax_object», в котором будут находится данные в виде «ключ:значение«:
‘ajaxurl’ который будет передавать полный УРЛ на файл wp-admin/admin-ajax.php для обработки AJAX-запросов
‘demo_id’ — «айдишник» текущей страницы
‘data_demo’ -и просто для примера какие-то произвольные данные
Если вы всё сделали правильно, то должны увидеть перед своим скриптом выполнение этой функции, где уже определенны нужные нам данные, которые в дальнейшем мы можем задействовать в нашем скрипте.
Вернёмся к нашему скрипту JS и добавим в него часть ранее рассмотренного кода:
Я думаю код не нуждается в подробных комментариях. Мы просто получаем данные из ранее созданного объекта demo_ajax_object.
Единственное новое тут это ‘action’. Здесь мы должны будем указать функцию, которая будет обрабатывать наши данные.
Предположим, что по клику мы хотим получать заголовок текущей страницы. Назовем нашу функцию-обработчик на стороне PHP — «demo_get_title_by_id» и укажем её значением к ключу
‘action’: ‘demo_get_title_by_id’,
Если придерживаться плана, который был определён последовательно в начале статьи, то мы уже находимся на 3-ем шаге
Передача данных на сервер и их дальнейшая обработка
«Встречать» наши данные в файле wp-ajax.php (туда куда мы их направляем) будут специальные функции, которые в WordPress называются:
wp_ajax_{$action} — срабатывает только для авторизованных на сайте (вошедших в систему) пользователей
wp_ajax_nopriv_{$action} — соответственно для не авторизованных, т.е. для обычных посетителей сайта
В отличие от wp_ajax_{$action}, глобальное свойство на уровне объекта JavaScript ajaxurl не будет определяться автоматически и должно быть включено вручную или с помощью wp_localize_script() с admin_url(‘admin-ajax.php’) в качестве определённых данных (что собственно и было сделано выше).
Наш код дополнится следующими функциями: первые две это для того чтобы наша функция-обработчик вызывалась для всех пользователей (обычных и авторизованных на сайте), а функция wp_die() которая находится в теле функции-обработчика вызывается для того чтобы не было никаких сюрпризов и после обработки AJAX-запроса происходило завершение, так сказать. И в теле функции я просто вывел строку с текстом, которую мы будем ожидать в качестве ответа от сервера.
Если вы всё сделали правильно, то теперь по клику на кнопочку в консоли браузера вы должны увидеть результат работы функции-обработчика вашего AJAX-запроса 🙂
Принимаем данные на сервере
Что ж, пришла пора встретить наши данные на уровне сервера в нашей PHP-функции. Сделать это можно при помощи $_GET, $_POST и $_COOKIE или общей переменной HTTP-запроса $_REQUEST, которая уже содержит в себе данные первых трёх.
В целях безопасности не рекомендуется использовать $_REQUEST (в связи с возможностью подлогом куки), а использовать ту глобальную переменную, которая соответствует вашему запросу.
Вот таким образом мы можем принять данные из нашего POST-запроса. Вот результат:
Мы не будем затрагивать все аспекты безопасности (такие как чистка данных перед сохранением или выводом), а рассмотрим только один — защиту нашего запроса, чтобы быть уверенными, что обрабатываться на стороне PHP будет наш POST-запроса, который отправляется по клику на кнопку, а никакой-то там…
Защита запроса от ложного
Этот метод конечно же не панацея, но является хорошим тоном при отправке AJAX-запросов и не только. Это защита при помощи генерации уникального, одноразового значения, которое будет отправлено с клиента и проверено на стороне сервера.
Итак, создадим это уникальное значение в момент выполнения нашей функции wp_localize_script()
Мы добавили ‘nonce’ => wp_create_nonce( ‘demo_security’ ), соответственно, теперь в момент инициализации функции на странице будет это генерированное значение:
И теперь по цепочке передаём его дальше — в наш скрипт js, теперь он будет выглядеть вот так:
И на стороне сервера, на стороне «бэкэнд» мы должны проверить это значение с помощью специальной функции: check_ajax_referer(); в которую необходимо передать название нашего значения при создании (demo_security)
Вот такой вид примет наша функция-обработчик. В которую мы передали:
Ключ, который был указан при создании nonce кода.
Ключ, который указан в объекте отправляемым методом $.post (js файл)
Примечание. Если определить название этих ключей, как ‘_ajax_nonce’ или ‘_wpnonce’, то второй аргумент можно не указывать, так как в POST-запросе WordPress будет уже брать значение из этих ключей.
И в завершении, давайте получим заголовок нашей текущей страницы и выведем его вместе с ссылкой на эту страницу, под нашей кнопкой, по которой был совершён клик.
Да, бессмысленная механика, но это просто ради примера, вероятнее всего такое вам вряд ли потребуется делать, хотя получение текущей ссылки может себя оправдать 🙂
function demo_get_title_by_id() {
// Проверка
check_ajax_referer( 'demo_security', 'nonce' );
// Получаем айди страницы с которой идёт запрос
$id = $_POST['page_id'];
// Получаем заголовок (название) страницы по её айди
$title = esc_html( get_the_title( $id ) );
// Получаем постоянную ссылку на страницу по её названию
$url = esc_url( get_permalink( get_page_by_title( $title ) ) );
// вывод данных
echo "Страница {$title} , ссылка {$url}";
// завершаем выполнение
wp_die();
}
В свою очередь, чтобы вывести данные под кнопкой нам необходимо дополнить наш js-код
Шаг 1: Откройте меню нажав O в левом верхнем углу, чтобы открыть меню
Шаг 2: Нажмите на ссылку Настройки.
Обратите внимание, что открыть настройки можно при помощи комбинации горячих клавиш Alt+P
Шаг 3: В разделе «Конфиденциальность и безопасность» выберите «Настройки сайтов»
Шаг 4: Чтобы запретить всем сайтам использовать JavaScript выберите Запретить сайтам использовать JavaScript
В этом случае JS будет отключен для всех посещаемых сайтов. Для того, чтобы запретить выполнение JavaScript на выборочных сайтах используйте настройки ниже
Здесь необходимо добавить адреса сайтов для которых будет запрещён или наоборот разрешен JavaScript
Если мы в цикле перебираем массив, то не секрет, что его первый элемент будет иметь цифру 0. А отсюда нужно понимать , к чему мы желаем её относить (к чётному или нечётному), в таком случае наш код может дополниться условием:
Представьте на минутку, как Вы (или любой другой человек) открывает браузер, «ходит» по сайтам и копирует с них данные (телефоны, адреса и т.п.). Парсинг — то же самое, только ходит не человек, а робот. Подобным образом поступают поисковые системы при индексации сайтов, или агрегаторы, которые обновляют и собирают тематическую информацию с разных источников в сети.
В этой статье мы рассмотрим бесплатную программу для парсинга известного сайта электронного справочника с картами городов от компании-разработчика ООО «ДубльГИС».
Сам по себе парсинг сайта, как и прочих открытых информационных ресурсов полностью законен, информация находится в открытом доступе и для её получения мы ничего не взламываем и ничего противозаконного не делаем. Мы просто аналогично человеческим действиям по копированию данных делаем тоже самое только при помощи программы.
3.4. Использование Платформы и (или) Сайта Администрации иными способами, в том числе путем копирования (воспроизведения) размещенного на Сайте Контента, а также входящих в состав Платформы и (или) Сайта Администрации элементов дизайна, программ для ЭВМ и баз данных, их декомпиляция и модификация, строго запрещены.
Парсер для автоматического сбора базы адресов и контактов предприятий, которые работают на территории России
Парсер для автоматического сбора базы адресов и контактов предприятий, которые работают на территории России, Казахстана, Беларуси, Азербайджана, Киргизии, Узбекистана, Чехии, Египта, Италии, Саудовской Аравии, Кипра, Объединенных Арабских Эмиратов, Чили, Катара, Омана, Бахрейна, Кувейта .
💰 Абсолютно бесплатный 🤖 Успешно обходит анти-бот блокировки на территории РФ 🖥️ Работает под Windows, Linux и MacOS 📄 Три выходных формата: CSV таблица, XLSX таблица и JSON список 🔗 Наличие генератора ссылок по городам и рубрикам
Начало работы
Учтите, что для работы парсера необходимо установить браузер Google Chrome. С установкой «Гугл Хром» в MacOS можно ознакомиться в этом видео.
Шаг №1 Скачайте программу
Первым делом скачайте релиз программы для вашей операционной системы (Windows, MacOS или Linux)
Шаг №2 Извлеките из скаченного архива программу
Вот что из себя представляет скаченный файл. Это архив, внутри которого и находится сама программа.
После разархивирования (извлечения из архива) программы, нам требуется её запустить, но прежде давайте взглянем что из себя представляет этот файл на Рабочем столе в ОС Windows 11
Шаг №3 Запустите программу
Двойным кликом запустите программу.
Вероятнее всего вы увидите при запуске вот такое окно:
И в этом нет ничего удивительного. Просто дело в непроверенном издателе, так сказать. И естественно Защитник Windows или какой то другой антивирус может как то на это отреагировать 🙂
Нажимаем Подробнее и затем Выполняем запуск в любом случае:
Та-дам! Наш парсер запущен!
Вот так выглядит окно программы при запуске.
Что же умеет парсер? Parser2GIS способен автоматически собрать информацию о всех интересующих Вас предприятиях и организациях, опубликованных в онлайн-справочнике 2GIS. И сейчас мы в этом убедимся!
Вернемся к Главному окну программы. Перед нами GUI — графический интерфейс парсера, сделанный для простых людей, за что отдельное спасибо автору!
Шаг №4 Работа программы
Вначале нам необходимо сгенерировать, подготовить ссылки электронного справочника которые наш парсер будет разбирать для осуществления сбора данных.
Откроется дополнительное окно, в котором нам нужно кликнуть на кнопку Сгенерировать
Далее, мы увидим ещё одно окно поверх предыдущих. Здесь нам нужно указать, выбрать рубрику для парсинга. Нажимаем на троеточие, рядом с полем Рубрика
При выборе рубрик можно воспользоваться поисковым запросом, для исключения остальных рубрик в название которых не попадает ваш запрос, например, мы хотим найти Тату-салоны. При поиске ключевого слова «тату» видим, что есть данная рубрика и следовательно выбираем её.
Затем, кликаем ok
Далее, убедитесь что выбрана нужная рубрика и отметьте города в которых будет осуществляться поиск и парсинг Тату-салонов. Выбирать можно (как в примере ниже) выборочно, либо выбрать все города России, или другой страны.
После окончательной предустановки (настройки) нажмите ok
В следующем окне программы появятся ссылки для парсинга выбранных городов + рубрик. Нажимаем ok
Убедитесь, что ваши ссылки прописались в поле URL, что ничего не сбилось
Настройки программы
Кликнув на шестерёнку можно задать настройки для парсинга. Я оставляю всё по умолчанию. Обратите внимание, что скрытый режим отключён, а это значит мы увидим воочию работу парсера в браузере google Chrome (P.S. надеюсь вы не забыли его установить 🙂 )
Эта работа программы будет напоминать переход по ссылкам человеческими руками, но только с бешенной скоростью обработки информации.
Всё готово! Выберите нужный формат исходных данных (по умолчанию CSV) , далее, через кнопку Обзор выберите место на компьютере куда будет сохранён результат работы парсера и третим действием запустите работу программы.
Вот так выглядит окно выбора пути сохранения файла. На этом этапе нужно задать ему имя. Я назвал его по имени категории которую собираюсь парсить в северных городах России:
Запомните место сохранения файла. Перед запуском парсера проверьте еще раз путь в строке и запустите парсер:
В процессе работы отроется окно браузера а в Главном окне программы вы будите видеть последовательность событий (log) работы программы:
После успешного завершения работы программы вы должны увидеть в логах вот такое сообщение о завершении парсинга:
А в месте сохранения файла обнаружить непосредственно файл с результатами работы программы:
В файле будут находится «спарсеные» данные из справочника 2ГИС.
Что делать с данными?
Если вы владеете навыками работы с Excel, то вам не составит наверное труда разобрать эти данные по столбикам. Но учтите, если открыть файл в формате CSV при помощи Эксель, то мы обнаружим слитые в строках данные
Вот так это выглядит. Необходим разбор. На самом деле это не составит труда для человека имеющего даже небольшой опыт работы с Эксель
Но в качестве примера я продемонстрирую разбор и форматирование данных через бесплатную программу Гугл Таблицы
Создаём пустую таблицу и через главное меню программы импортируем данные из нашего файла (Файл -> Импортировать)
Затем, во вкладке Добавить через кнопку Обзор выбираем и подгружаем наш файл формата .CSV
Настройки я не меняю и оставляю по умолчанию
После импорта данных мы видим что они распределены строго по столбикам, как мы того и ожидали.
При желании мы можем работать с выборочными столбиками:
Ну вот и всё! Благодарю за внимание 🙂
Запуск и принцип работы парсера можно посмотреть в этом видео:
Подключение файлов CSS (для стилевого оформления элементов на странице) осуществляется при помощи специальной для этого функции wp_enqueue_style()
В принципе можно подключать стили (файлы CSS) по разному, хоть прямиком через HTML-элемент <link> 🙂 Но это будет не совсем правильно с точки зрения философии WordPress, его стандартов кодирования, так сказать.
Поэтому единственным правильным методом подключения файлов CSS в вашу тему (на страницы вашего сайта) будет являться метод через специальные функции.
Пример подключения основного файла стилей style.css и в примере после него — произвольного:
<?php
/**
* Подключаем основной файл стилей темы (style.css)
*/
function poet_add_theme_styles() {
wp_enqueue_style( 'style-main', get_stylesheet_uri() );
}
add_action( 'wp_enqueue_scripts', 'poet_add_theme_styles' );
Кстати, ниже пример показывает, что мы можем управлять зависимостью одного стиля от другого, то есть очередностью их подключения.
<?php
/**
* Подключаем основной файл стилей темы (style.css) и дочерний
*/
function poet_add_theme_styles() {
wp_enqueue_style( 'style-main', get_stylesheet_uri() );
wp_enqueue_style( 'child-style',
get_stylesheet_directory_uri() . '/theme.css',
array( 'style-main' ), // указываем зависимость
wp_get_theme()->get('Version')
);
}
add_action( 'wp_enqueue_scripts', 'poet_add_theme_styles' );
Рассмотрим ещё одну функции, при помощи которой мы можем зарегистрировать файлы стилей. Важно понимать отличие этой функции от рассмотренной ранее. Дело в том что при помощи wp_enqueue_style() мы сразу подключаем указанный стиль, а при помощи wp_register_style() мы только регистрируем его в окружении WordPress, что бы он (WordPress) знал этот файл стилей по имени и в нужный момент или при нужном условии мы можем его подключить.
Ниже я демонстрирую тот же самый пример что и в блоке выше, но только прежде регистрирую скрипт с тем же названием, а потом уже подключаю на страницы сайта. Попробуйте уловить смысл при сравнении этих кусочков кода.
<?php
/**
* Подключаем основной файл стилей темы (style.css) и дочерний
*/
function poet_add_theme_styles() {
wp_enqueue_style( 'style-main', get_stylesheet_uri() );
wp_register_style( 'child-style',
get_stylesheet_directory_uri() . '/theme.css',
array( 'style-main' ), // указываем зависимость
wp_get_theme()->get('Version')
);
wp_enqueue_style( 'child-style' );
}
add_action( 'wp_enqueue_scripts', 'poet_add_theme_styles' );
Теперь, после регистрации стиля по имени, мы можем его подключать простым вызовом функции wp_enqueue_style( ‘child-style’ ), в которую передаём имя этого файла CSS заданное при регистрации. На самом деле такой метод подключения даёт больше гибкости, особенно для опытных разработчиков.
ООП
Для любителей объектно-ориентированной парадигмы разработки вышеуказанный пример можно записать таким образом:
<?php
/**
* Подключаем основной файл стилей темы (style.css) и дочерний
*/
class Poet_Add_Styles
{
/**
* Constructor.
*/
public function __construct(
// Add stylesheet.
add_action( 'wp_enqueue_scripts', array( $this, 'poet_add_theme_styles' ) );
}
/**
* Add and enqueues stylesheet.
*/
public function poet_add_theme_styles() {
wp_enqueue_style( 'style-main', get_stylesheet_uri() );
wp_register_style( 'child-style',
get_stylesheet_directory_uri() . '/theme.css',
array( 'style-main' ), // указываем зависимость
wp_get_theme()->get('Version')
);
wp_enqueue_style( 'child-style' );
}
}
new Poet_Add_Styles();
Класс с методом-конструктором вызовет этот метод на каждом вновь созданном объекте класса. Поэтому объявление метода-конструктора удобно для инициализации того, что может потребоваться объекту в начале работы.
Проблемы кеширования
Если посмотреть на исходный код страницы сайта на WordPress, то можно заметить вот такие добавки (называются гет-параметрами) к подключаемым файлам стилей
Если рассмотреть пример нашего кода, то он подключает файл theme.css и добавляет гет-параметром версию темы которая прописана в файле style.css. В итоге мы можем заметить версию 1.0
Если бы при регистрации или подключении файла CSS мы бы не указали параметр версии (функцией wp_get_theme()->get(‘Version’)), или установили бы значение false, то была бы тогда использована версия WordPress, как примере ниже, к нашему файлу добавилась версия WP
А если установить null, то никакая версия не будет установлена.
Чем это чревато? Представьте, что вы внесли правки в файл theme.css и изменили стиль оформления элемента, например, с зеленого фона на красный. То пользователь, который уже посещал ваш сайт снова будет видеть зелёный фон. Почему так?
Потому что при первом посещении сайта ресурс в виде файла theme.css в подавляющем большинстве случаев сохраняется в локальное хранилище браузера, что бы при повторном запросе не запрашивать и не загружать его заново с сервера а отдать из локального хранилища браузера.
Получается, что если пользователь не обновит страницу или не почистит кеш, он так и будет видеть зелёный фон у элемента. Вероятнее всего новый стиль загрузится и отобразится у него со сменой версии WordPress или сменой версии темы оформления.
Поэтому, если вы часто вносите правки в файлы стилей, то стоит позаботится о решении этой неприятности.
Как решить эту проблему?
Самый простой способ решения передавать в качестве версии дату последнего изменения файла.
В этом поможет функция filemtime — Получает время последнего изменения файла. Тогда наш код немного преобразится:
P.S. конечно можно внести сюда небольшую оптимизацию и сократить вызов функции get_stylesheet_directory(), которая получает путь к файлу темы (родительской), до одного вызова, а не двух, как в примере. Но лучше остановимся на этом )
Для установки в операционную систему Windows необходимо со страницы Загрузки официального сайта скачать и запустить установочный файл.
Учтите, что для успешной установки необходим исполняемый файл интерпретатора PHP. Для этого необходимо перейти на страницу загрузки для PHP и скачать файл нужной вам сборки.
Разархивируйте файлы сборки PHP в том место где вы сможете их потом найти 🙂 Вот мой пример:
Убедитесь, что внутри среди файлов есть php.exe
Теперь можно запустить установочный файл Composer и пройти интуитивно понятные шаги установки:
Далее будьте внимательны! Здесь необходимо указать путь к вашему файлу php.exe и затем продолжить установку.
Отметьте чекбокс для добавления в переменную среды PATH, чтобы вы могли просто вызывать Composer при помощи команды composerиз любого места в операционной системе, из любой папки.
Готово!
Проверка
Если всё прошло успешно, то введя команду composer в терминале редактора кода или просто в командной строке (оболочке), вы должны непременно увидеть следующее:
Пакет: jpegoptim — утилита для оптимизации/сжатия файлов JPEG.
Jpegoptim может оптимизировать/сжимать файлы JPEG. Уменьшение размера без потерь основано на оптимизации таблиц Хафмана. Так называемое сжатие с потерями (компрессия) осуществляется повторным кодированием изображения, с указанным пользователем уровнем качества изображения.
OptiPNG сжимает файлы PNG поочерёдно с разными параметрами и останавливается на параметрах, дающих минимальный размер. Для этого она пробует уменьшить глубину цвета (без потерь качества), изменить способ записи информации о цвете и палитру изображения. Также распознаются такие форматы как BMP, GIF, TIFF и PNM (PBM, PGM, PPM).
СУБД MySQL или MariaDB ведёт специальное логирование всех запросов к базам данных, которое пишется в файлы приведённые на скриншоте ниже.
Как можно заметить их число и размер может отжирать приличное пространство на вашем диске, в моём случае это примерно 20Гб! Это случилось потому, что в MySQL 8 срок действия этого журнала изменений в базе по умолчанию составляет 30 дней.
Эти файлы играют важную роль и необходимы для правильной работы репликации данных или восстановления информации.
Если у вас не настроено никакой репликации ии никакое сторонне приложение не читает эти логи, не отслеживает их, то в принципе не вижу смысла отдавать дисковое пространство для этих файлов.
В моём случае моя СУБД используется просто для хранения данных разных сайтов — то есть ничего хитрого, поэтому я и задался вопросом удаления этих файлов.
Очистка логов самостоятельно (ручной вариант)
Первым делом нам нужно зайти в оболочку нашей СУБД, например, сделать это можно так:
mysql -u root -p
Если вы всё сделали правило, то непременно должны увидеть в консоли следующее:
Теперь введите в консоли следующую команду для просмотра бинарных логов:
SHOW BINARY LOGS;
Также можно воспользоваться командой-синонимом SHOW MASTER LOGS.
Я отключил ведение логов, поэтому в моём случае вывод такой:
Вероятно, что в вашем случае будет отображаться тот самый список файлов из /var/lib/mysql
Обратите внимание на их нумерацию, для того чтобы удалить файлы до определённого можно воспользоваться командой:
PURGE BINARY LOGS TO 'binlog.000015';
Изменить срок автоматической очистки с 30 дней (по умолчанию) на 3 дня.
Изменения можно внести через консоль. Мы будем менять binlog_expire_logs_seconds — отвечает за установку срока действия двоичного журнала в секундах. По истечении срока файлы логов будут автоматически удалены.
Срок действия двоичного журнала по умолчанию составляет 2592000 секунд = 30 дней. Соответственно, мы можем это изменить:
SET GLOBAL binlog_expire_logs_seconds = (60*60*24*3);
SET PERSIST binlog_expire_logs_seconds = (60*60*24*3);
Как проверить изменения?
Сделайте в консоли запрос:
SHOW VARIABLES LIKE '%expire_logs%';
Вы должны увидеть значение системной переменной binlog_expire_logs_seconds.
mysql> SHOW VARIABLES LIKE '%expire_logs%';
+-------------------------------+--------+
| Variable_name | Value |
+-------------------------------+--------+
| binlog_expire_logs_auto_purge | ON |
| binlog_expire_logs_seconds | 259200 |
| expire_logs_days | 0 |
+-------------------------------+--------+
3 rows in set (0.01 sec)
Можно установить новое значение сразу в секундах (выше мы делали это путём умножения сек*мин*часы*дни),а могли бы указать сразу числом.
Как совсем отключить логирование (binlog)?
Откройте в редакторе файл /etc/mysql/my.cnf
sudo nano /etc/mysql/my.cnf
и добавьте пару строчек:
[mysqld]
skip-log-bin
Чтобы изменения вступили в силу перезапустите MySQL сервер:
sudo service mysql restart
так же через этот файл можно ограничить размер файлов логов и задать автоматическую очистку (ограничение)
[mysqld]
binlog_expire_logs_seconds = 86400 # 1 day
max_binlog_size = 104857600 # 100M
P.S. не забывайте перезагружать сервер вашей СУБД
systemctl restart mysql или systemctl restart mariadb
Если у вас слишком много файлов, то можно ограничить вывод, например, до 5
nice find / -size +500M -exec ls -lhs {} \; 2>/dev/null | sort -rh | head -n5
Утилита du
Так же можно воспользоваться утилитой du (аббревиатура от англ. disk usage) — стандартная Unix-программа для оценки занимаемого файлового пространства.
Чтобы вывести список 10 самых больших файлов из директории /var воспользуйтесь решением ниже:
du -h /var | sort -nr | head -n10
По командам выше часть синтаксиса с реверсивной сортировкой и ограничением вывода вам известна. В примере я так же добавил параметр -h для того чтобы размер выводился в более читабельном, понятном виде, так как по умолчанию размер занимаемого пространства выводится в байтах.
Следующая команда распечатает 10 самых больших файлов в вашем текущем каталоге (т.е. в котором её запускаете):
du -ahx . | sort -rh | head -10
Тут я ещё добавил пару опций для удобно читаемого формата вывода.
Вот простой пример для минимального вывода корневых директорий текущего местоположения (вызова) и их занимаемый общий размер: