пятница, 24 ноября 2023 г.

Debian. Изменение Time, Date и Timezone

Просмотр даты:

# date


Просмотр даты, времени и временной зоны:

# timedatectl


Перед ручной корректировкой даты, времени или временной зоны, отключаем синхронизацию времени:

# timedatectl set-ntp no


Изменение даты (в формате "YYYY-MM-DD"):

# timedatectl set-time 2023-11-24


Изменение времени (в формате "hh-mm-ss"):

# timedatectl set-time 10:12


Просмотр временных зон:

# timedatectl list-timezones


Установка временной зоны Europe/Astrakhan (GMT+4):

# timedatectl set-timezone Europe/Astrakhan

вторник, 20 июня 2023 г.

Создание нескольких виртуальных хостов (Apache2 vhosts)

 Источник: https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-18-04-ru#


Шаг 1. (НЕ ОБЯЗАТЕЛЬНО) Обновляем ОС Debian и устанавливаем Apache2:

# sudo apt-get update && sudo apt-get upgrade

#sudo apt-get install -y apache2


Шаг 2. Создаем каталоги для сайтов:

#sudo mkdir -p /var/www/test1.local

#sudo mkdir -p /var/www/test2.local


Шаг 3. Даем права пользователю на каталоги сайтов:

#sudo chown -R user:user /var/www/test1.local

#sudo chown -R user:user /var/www/test2.local

#sudo chmod -R 755 /var/www


Шаг 4. Создаем конфигурации для сайтов:

#sudo nano /etc/apache2/sites-available/test1.local.conf

<VirtualHost *:80>
    ServerName test1.local
    ServerAdmin admin@test1.local
    DocumentRoot /var/www/test1.local
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


#sudo nano /etc/apache2/sites-available/test2.local.conf

<VirtualHost *:80>
    ServerName test2.local
    ServerAdmin admin@test2.local
    DocumentRoot /var/www/test2.local
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


Шаг 5. Проверка конфигурации Apache2

#apachectl -t

[ Syntax OK ] 


Шаг 6. Активация конфигурационных файлов

#sudo a2ensite test1.local.conf

#sudo a2ensite test2.local.conf


Шаг 7. Деактивация сайта по умолчанию

#sudo a2dissite 000-default.conf


Шаг 8. Перезагрузка сервера Apache2

#sudo systemctl restart apache2

#sudo systemctl status apache2


Шаг 9. Настройка файла hosts

В ОС Linux /etc/hosts

В ОС Windows c:\Windows\System.32\Drivers\etc\hosts

добавляем две записи для 2-х созданных виртуальных хостов:

IP_вашего_web_сервер      test1.local
IP_вашего_web_сервер      test2.local

четверг, 23 марта 2023 г.

PHP, ООП, автозагрузка классов (файлы классов в разных каталогов)

При разработке web-приложения на языке PHP с применением средств объектно-ориентированного программирования (ООП), удобно использовать автоматическую загрузку классов, особенно когда классов много, чтобы не использовать require_once или include для каждого файла, содержащего определенным класс.

Идея основана на применении функции Standart PHP Library - spl_autoload_register().
При создании класса: $class = new Class1(), если класс не найден, то вызывается функция spl_autoload_register().

Каждый класс хранится в отдельном файле.

Файл: /test/Framework/Autoloader.php
class Autoloader
{
    // Список каталогов, в которых расположены классы
    public static $dir_list = array('Framework/Core/', 'Framework/UI/');

    public static function register()
    {
        ini_set('unserialize_callback_func', 'spl_autoload_call');
        spl_autoload_register(array(new self, 'autoload'));
    }

    private static function autoload($class)
    {
        foreach (self::$dir_list as $dir)
        {
            $file = trim($dir, '/').'/'.$class.'.php';
            if (is_file($file))
            {
                require_once($file);
            }
        }
    }
}

Файл: /test/index.php
<?php
    required_once('Framework/Autoloader.php');

    // в случае если каталог поиска файлов классов надо установить свой
    // Autoloader::$dir_list = array('Framework/UI');

     Autoloader::register();

    $core = new Core();
    $menu = new Menu();
?>

Autoloader::$dir_list = позволяет определить массив строк, определяющих каталоги, в которых необходимо искать используемые файлы классов, или если для проекта список каталогов является одним и тем же списком, то этот список каталогов можно прописать прямо в статическую переменную класса Autoload `public static $dir_list = ...` и Autoloader::$dir_list не использовать.

Структура каталогов:
/test
    /Framework
        /Core
            Core.php

        /UI
            Menu.php

    Autoloader.php

index.php

вторник, 7 марта 2023 г.

Debian + php + ssmtp (Отправка почты с VDS или VMWare Player)

1. Обновляем Debian
sudo apt-get updat
sudo apt-get upgrade



2. Устанавливаем ssmtp
sudo apt-get install ssmtp


3. Устанавливаем mailutils (для использования `mail` в php-скрипте)
sudo apt-get install mailutils


4. Создаем учётную запись на почтовом сервер Yandex, например, user@yandex.ru с паролем user_111.

4.1. Заходим в настройки Яндекс.Почты созданного профиля и разрешаем "Все настройки" -> "Почтовые программы" и разрешаем доступ к почтовому ящику с помощью почтовых клиентов.

4.2. Создаем отдельный пароль для приложения, чтобы не сообщать сторонним сервисам ваш общий пароль на Яндексе (не помню где именно эта ссылка, можно найти через yandex.ru).


5. Добавляем к концу файл /etc/ssmtp/revaliases (используется для отправки письма с командной строки от имени учётной записи `root` и от исполнительного имени web-службы `www-data`)
root:user@yandex.ru:smtp.yandex.ru:465
www-data:user@yandex.ru:smtp.yandex.ru:465


6. Добавляем в файл /etc/ssmtp/ssmtp.conf настройки подключения к почтовому ящику:
mailhub=smtp.yandex.ru:465
AuthUser=user@yandex.ru
AuthPass=[Пароль из шага 4.2]
rewriteDomain=[hostnmae or domain-name]
hostname=[hostname or domain-name]
UseTLS=Yes
TLS_CA_File=/etc/ssl/certs/ca-certificates.crt
FromLineOverride=Yes
root=user@yandex.ru


Проверка через командную строку:
root@palem:~# echo "Test message!" | ssmtp user@yandex.ru


Проверка через php-скрипт:
<?php
    $to      = 'UserOld@list.ru';
    $subject = 'Test Email';
    $message = 'Hello Igor';
    $headers = 'From: Support Team <user@yandex.ru>' . "\r\n" .
        'Reply-To: support@server.com' . "\r\n" .
        'MIME-Version: 1.0' . "\r\n" .
        'Content-Type: text/html; charset=utf-8' . "\r\n" .
        'Content-Transfer-Encoding: quoted-printable';

    print mail($to, $subject, $message, $headers);
?>

Docker. Первые контейнеры

Источник:  php.dragomano.ru Структура каталогов: ~/develop/web/project/                  nginx/      - сервис web-сервера                php...