Поддерживаемые кодировки символов
В настоящее время модуль mbstring поддерживает нижеследующие кодировки символов. Кодировка символов может быть
специфицирована параметром encoding функций модуля mbstring.
Вот кодировки, поддерживаемые данным расширением PHP:
UCS-4, UCS-4BE,
UCS-4LE, UCS-2, UCS-2BE, UCS-2LE, UTF-32, UTF-32BE,
UTF-32LE, UCS-2LE, UTF-16, UTF-16BE, UTF-16LE, UTF-8,
UTF-7, ASCII, EUC-JP, SJIS, eucJP-win, SJIS-win,
ISO-2022-JP, JIS, ISO-8859-1, ISO-8859-2, ISO-8859-3,
ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8,
ISO-8859-9, ISO-8859-10, ISO-8859-13, ISO-8859-14, ISO-8859-15,
byte2be, byte2le, byte4be, byte4le, BASE64, 7bit,
8bit и UTF7-IMAP.
Вхождение в php.ini, принимающее имя кодировки,
принимает также «auto» и «pass«.mbstring функции, принимающие имя кодировки, принимают и
«auto«.
Если «pass» установлено, никакая конвертация кодировки символов не выполняется.
Если «auto» установлено, оно расширяется до «ASCII,JIS,UTF-8,EUC-JP,SJIS«.
См. также mb_detect_order()
Настройка опций в файле .htaccess
Директивы необходимо добавлять в самый конец или в самое начало файла, вне блоков кода <IfModule>…</IfModule>.
apc.cache_by_default
APC — акселератор PHP, использование которого увеличивает производительность интерпретатора за счет кэширования. В отдельных случаях, однако, может потребоваться его отключение — например, если скрипты не выполняются корректно из-за переполнения кэша.
Управление APC осуществляется директивами:
php_flag apc.cache_by_default on php_flag apc.cache_by_default off
default_charset
Директива указывает кодировку по умолчанию (например, cp1251, utf-8, koi8-r) для всех выдаваемых страниц.
AddDefaultCharset cp1251 php_value default_charset cp1251
display_errors
Директива указывает, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя.
Включение и выключение осуществляются следующим образом:
php_value display_errors 0 php_value display_errors 1
log_errors
Опция позволяет включить логирование ошибок php с их записью в произвольный файл (в примере errors.log). При указании пути к файлу замените u и user на первую букву вашего логина и сам логин.
php_value log_errors on php_value error_log /home/u/user/путь_к_файлу/errors.log
magic_quotes_gpc
Волшебные кавычки (Magic Quotes) — это процесс автоматического экранирования входящих данных PHP-скрипта. Если опция включена, то одинарные (‘) и двойные («) кавычки и обратный слэш (\)экранируются обратным слэшем автоматически.
Включение и выключение magic_quotes осуществляется директивами:
php_flag magic_quotes_gpc on php_flag magic_quotes_gpc off
mail.add_x_header
Опция позволяет включить логирование отправки почты из скриптов сайта. Логи будут содержать полный путь до скрипта, адрес получателя и заголовки. При указании пути к файлу, в который будут записываться логи (mail.log), замените u и user на первую букву вашего логина и сам логин.
php_value mail.add_x_header 1 php_value mail.log /home/u/user/public_html/mail.log
max_input_vars
Директива указывает, сколько входных переменных может быть принято в одном запросе. Например:
php_value max_input_vars 11000
mbstring.func_overload и mbstring.internal_encoding
Для корректной работы сайтов на старых версиях CMS Битрикс (до v20.100.0) требуются следующие параметры:
php_value mbstring.func_overload 2 php_value mbstring.internal_encoding UTF-8
Отключение OpCache (настройка требуется для CMS Битрикс):
php_value opcache.revalidate_freq 0
Устанавливает лимит на рекурсию.
php_value pcre.recursion_limit 14000
post_max_size
Опция устанавливает максимально допустимый размер данных, отправляемых методом POST. Также это значение также влияет на загрузку файлов — для загрузки больших файлов оно должно быть больше значения директивы upload_max_filesize.
php_value post_max_size 40M
register_globals
Директивы для включения/выключения глобальных переменных:
php_flag register_globals on php_flag register_globals off
request_order
Директива регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST.
php_value request_order GPC
Возможные проблемы
Рассмотрим решение некоторых проблем, с которыми мы можем столкнуться в процессе настройки.
Ошибка отображается при просмотре статуса сервиса, сразу после его запуска:
systemctl status asterisk
…
… systemd: asterisk.service: Can’t open PID file /var/run/asterisk/asterisk.pid (yet?) after start: No such file or directory
…
Данное сообщение не является ошибкой. Скорее, это сообщение от системы при запуске.
Убедиться в наличие данного файла можно командой:
ls -l /var/run/asterisk/asterisk.pid
Мы должны увидеть:
-rw-r—r—. 1 asterisk asterisk 6 Nov 5 09:45 /var/run/asterisk/asterisk.pid
* где видно, что файл существует. Его владелец — пользователь asterisk.
2. Ошибка 500 при попытке установить FreePBX 14 на CentOS 8
Ошибка появляется при попытке открыть страницу FreePBX в браузере.
Причина: официально, FreePBX 14 поддерживает php 5, которая по умолчанию уже не устанавливается в CentOS 8. В php версии 7 один из методов класса gui_hidden считается устаревшим и система возвращает ошибку 500.
Решение: есть 2 варианта решения проблемы.
1) установить на CentOS 8 php версии 5.6. Для этого подключаем репозиторий remi:
dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
После чего можно устанавливать необходимые компоненты:
dnf install php56 php56-php-fpm php56-php-bcmath php56-php-gd php56-php-json php56-php-mbstring php56-php-mysqlnd php56-php-pear php56-php-snmp php56-php-zip
Открываем настройки для php:
vi /etc/opt/remi/php56/php.ini
Правим значения для следующих опций:
upload_max_filesize = 128M
…
post_max_size = 128M
…
date.timezone = «Europe/Moscow»
…
memory_limit = 512M
Открываем настройки php-fpm:
vi /etc/opt/remi/php56/php-fpm.d/www.conf
Задаем значения для следующих опций:
user = asterisk
…
group = asterisk
…
listen.acl_users = asterisk,apache
Запускаем php-fpm:
systemctl enable php56-php-fpm —now
Откроем настройки nginx:
vi /etc/nginx/nginx.conf
Для опции fastcgi_pass задаем значение:
…
location ~ \.php$ {
…
fastcgi_pass unix:/var/opt/remi/php56/run/php-fpm/www.sock;
…
А также:
vi /etc/nginx/conf.d/php-fpm.conf
upstream php-fpm {
server unix:/var/opt/remi/php56/run/php-fpm/www.sock;
}
Перезапускаем nginx:
systemctl restart nginx
Также потребовалось установить следующий модуль для FreePBX:
fwconsole ma downloadinstall soundlang
2) отключить отображение ошибки. Для этого открываем файл:
vi /etc/freepbx.conf
И добавляем строку:
…
$bootstrap_settings = false;
…
Однако, у меня данный способ не дал положительного результата. Страница FreePBX открылась, но с ошибкой «Can Not Connect to Asterisk», а сервис fwconsole при запуске выдавал ошибку. В итоге, самый правильный вариант — использовать официально поддерживаемую версию PHP.
Настройка веб-сервера
Для работы FreePBX нам необходим веб-сервер и СУБД. В нашем примере мы установим связку NGINX + PHP + MariaDB + NodeJS.
Сервер баз данных
Устанавливаем сервер mariadb:
dnf install mariadb-server
Стартуем сервис и разрешаем его автозапуск:
systemctl enable mariadb —now
Задаем пароль для суперпользователя СУБД:
mysqladmin -u root password
NGINX
Для установки веб-сервера вводим команду:
dnf install nginx
Открываем конфигурационный файл:
vi /etc/nginx/nginx.conf
В секции http добавим опцию:
client_max_body_size 128M;
* данный параметр разрешает загрузку файлов размером 128 Мб.
Стартуем nginx:
systemctl enable nginx —now
Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открыться страница приветствия NGINX:
Веб-сервер установлен.
PHP и компоненты
Установим интерпретатор php и компоненты, необходимые для работы FreePBX:
dnf install php php-fpm php-bcmath php-gd php-json php-mbstring php-mysqlnd php-pear php-snmp php-zip
В процессе установки php на CentOS устанавливается apache, но нам он не нужен — вводим команду для запрета его автозапуска:
systemctl disable httpd
Открываем настройки для php:
vi /etc/php.ini
Правим значения для следующих опций:
upload_max_filesize = 128M
…
post_max_size = 128M
…
date.timezone = «Europe/Moscow»
…
memory_limit = 512M
* где:
- upload_max_filesize — максимальный объем загружаемого файла.
- post_max_size — максимальный объем всех загружаемых файлов за один раз.
- date.timezone — временная зона.
- memory_limit — максимальный объем памяти, который может использовать интерпретатор.
Открываем настройки php-fpm:
vi /etc/php-fpm.d/www.conf
Задаем значения для следующих опций:
user = asterisk
…
group = asterisk
…
listen.acl_users = asterisk,apache,nginx
* FreePBX должен работать с файлами в каталоге /etc/asterisk. Владельцем этого каталога будет пользователь asterisk, поэтому обработка php должна выполняться тоже от данного пользователя, чтобы иметь соответствующие права на редактирование конфигурационных файлов.
Запускаем php-fpm:
systemctl enable php-fpm —now
NGINX + PHP
Свяжем наш веб-сервер с php. Для этого откроем конфигурационный файл:
vi /etc/nginx/nginx.conf
Добавим следующие строки в разделы http — server:
…
http {
…
server {
…
server_name 192.168.1.15;
…
location ~ \.php$ {
set $root_path /usr/share/nginx/html;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SERVER_NAME $host;
}
…
* в данном примере мы задаем настройку для server_name — указываем имя хоста или IP-адрес, по которому мы будем подключаться к FreePBX. Также мы создаем секцию location для обработки php через php-fpm.
Перезапустим nginx:
systemctl reload nginx
Создадим файл php в домашней директории nginx:
vi /usr/share/nginx/html/index.php
<?php phpinfo(); ?>
Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открываться страница с информацией об установленной версии php и всех компонентах:
NodeJS
Последний компонент для нашего веб-сервера — NodeJS. Для его установки выполняем команду:
dnf install nodejs
Убедиться в установке можно командой просмотра версии:
node —version
Наш веб-сервер готов к работе.
Установка php-fpm 7.1
Установка и настройка 7-й версии php на centos не очень простая задача. Ранее я уже рассказывал как обновить php до 7-й версии, но в итоге откатился назад. Прошло прилично времени и откатываться уже не будем, так как большинство проблем исправлены.
Вторая проблема в том, что надо определить, какой репозиторий использовать для установки php7. Их существует очень много. К примеру, мой хороший знакомый в своей статье по настройке web сервера использует репозиторий Webtatic. В принципе, чтобы просто поставить php 7-й версии это нормальный вариант. Но если вы после этого захотите установить phpmyadmin через yum уже ничего не получится. Будет ошибка зависимостей, которые нужно будет как-то руками разбирать.
То же самое будет и с другими пакетами. К примеру, zabbix без плясок с бубнами скорее всего не встанет. В сторонних репозиториях есть еще одна проблема. Иногда они закрываются. И это станет для вас большой проблемой на боевом сервере. Так что к выбору репозитория нужно подходить очень аккуратно и внимательно. Я до сих пор иногда встречаю настроенные сервера centos 5 с очень популярным в прошлом репозиторием centos.alt.ru, который закрылся. Сейчас это уже не так актуально, так как таких серверов осталось мало, но некоторое время назад мне это доставляло серьезные неудобства.
Для установки свежей версии php я буду использовать репозиторий Remi. Это известный и популярный репозиторий, который ведет сотрудник RedHat. И хотя надежность репозитория, который ведет один человек не так высока, но ничего лучше и надежнее remi лично я не нашел для своих целей. Если вы можете что-то посоветовать на этот счет — комментарии в вашем распоряжении. Буду благодарен за дельный совет.
Подключаем remi репозиторий для centos 7.
# rpm -Uhv http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Я получил ошибку:
Retrieving http://rpms.remirepo.net/enterprise/remi-release-7.rpm warning: /var/tmp/rpm-tmp.nwcDV1: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEY error: Failed dependencies: epel-release = 7 is needed by remi-release-7.3-2.el7.remi.noarch
Тут все понятно, нужен репозиторий epel. Те, кто готовили сервер по моей статье по базовой настройке сервера его уже подключили, а те кто не делали этого, подключают сейчас:
# yum install epel-release
После этого повторяем установку remi, все должно пройти нормально. Проверим список подключенных репозиториев.
# yum repolist
У меня такая картинка получилась.
Активируем репу remi-php71, для этого выполняем команду:
# yum-config-manager --enable remi-php71
Если получаете ошибку:
bash: yum-config-manager: command not found
то установите пакет yum-utils.
# yum install yum-utils
Теперь устанавливаем php7.1.
# yum install php71
Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.
# yum install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip
Запускаем php-fpm и добавляем в автозагрузку.
# systemctl start php-fpm # systemctl enable php-fpm
Проверяем, запустился ли он.
# netstat -tulpn | grep php-fpm tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9084/php-fpm: maste
Все в порядке, повис на порту 9000. Запустим его через unix сокет. Для этого открываем конфиг /etc/php-fpm.d/www.conf и комментируем строку:
;listen = 127.0.0.1:9000
Вместо нее добавляем несколько других:
listen = /var/run/php-fpm/php-fpm.sock listen.mode = 0660 listen.owner = nginx listen.group = nginx
Заодно измените пользователя, от которого будет работать php-fpm. Вместо apache укажите nginx.
user = nginx group = nginx
Перезапускаем php-fpm.
# systemctl restart php-fpm
Проверяем, стартовал ли указанный сокет.
# ll /var/run/php-fpm/php-fpm.sock srw-rw----. 1 nginx nginx 0 Oct 26 18:08 /var/run/php-fpm/php-fpm.sock
На текущий момент с настройкой php-fpm закончили, двигаемся дальше.
Для того, чтобы проверить работу нашего веб сервера, нужно установить ssl сертификаты. Без них nginx с текущим конфигом не запустится. Исправляем это.
Доступ в web интерфейс Freepbx
Переходим в браузере по ip адресу или доменному имени сервера и создаем учетную запись администратора Freepbx. При первом заходе в 14-ю версию я увидел ошибку.
Текст ошибки.
YAML
Whoops \ Exception \ ErrorException (E_DEPRECATED)
Methods with the same name as their class will not be constructors in a future version of PHP; gui_hidden has a deprecated constructor in /var/www/html/admin/libraries/components.class.php on line 571
1 |
Whoops\Exception\ErrorException(E_DEPRECATED) MethodswiththesamenameastheirclasswillnotbeconstructorsinafutureversionofPHP;gui_hiddenhasadeprecatedconstructorin/var/www/html/admin/libraries/components.class.phponline571 |
Насколько я понял, это сообщение о том, что используется какая-то конструкция, которая объявлена Deprecated и скоро не будет работать. Что с этим делать сейчас, я не понял. Нашел баг репорт с этой ошибкой — https://issues.freepbx.org/browse/FREEPBX-19941 Он почему-то отклонен, помещен как дублирующий, но найти эту же ошибку в трекере я не смог.
Если взять версию php 5.6, то там этой ошибки не будет. Freepbx 14 официально поддерживает только 5.6, но откатываться на нее совсем не хочется.
Я решил просто отключить обработчик ошибок bootstrap. Для этого открываем конфиг freepbx и добавляем туда новое значение.
YAML
# mcedit /etc/freepbx.conf
1 | # mcedit /etc/freepbx.conf |
YAML
$bootstrap_settings = false;
1 | $bootstrap_settings=false; |
Заходим в web интерфейс freepbx еще раз и создаем администратора.
Потом, используя созданную учетку, логинимся в панель и указываем начальные настройки. Рекомендую выбрать английский язык. Как я уже говорил, перевод на русский так себе, с ним иногда бывает сложно понять суть настроек.
После этого оказываетесь в веб панели Freepbx. Нажмите сверху на Dashboard и увидите сводную информацию по системе. Теперь можно начинать ее настройку
Заключение
Подведем итог того, что мы сделали:
- Настроили сервисы nginx, apache, php-fpm таким образом, чтобы они отдавали информацию о своем состоянии.
- С помощью zabbix агентов передали эту информацию на сервер.
- Используя зависимые элементы (dependent items) настроили парсинг метрик.
- Настроили на сервере мониторинга необходимые шаблоны и прикрепили их к наблюдаемым серверам.
- Собрали dashboard для мониторинга за веб сервером.
То есть выполнили весь комплекс действий для организации полноценного мониторинга web сервера в zabbix.
Одно из применений подобного мониторинга — выбор более быстрого хостинга для сайта. К примеру, мне некоторое время назад понадобилось сменить хостинг. Но как узнать, будет ли он быстрее текущего или нет. Характеристики примерно у всех одинаковые. Я просто взял тестовый период, настроил на сервере все, что мне нужно, в том числе мониторинг веб сервера, перенес туда сайт и понаблюдал сутки. Уже по времени отклика nginx и php-fpm мне стало понятно, что новый хостинг быстрее:
Время отклика страниц сайта и скорость их загрузки в целом тоже улучшились. Я однозначно понял, что надо переезжать и не ошибся.
Это пример из старой версии статьи, где показаны старые метрики и графики. Оставил его, так как он в целом информативен. Текущий мониторинг web сайта так же можно использовать для анализа производительности хостинга.
Онлайн курс по Linux
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Что даст вам этот курс:
- Знание архитектуры Linux.
- Освоение современных методов и инструментов анализа и обработки данных.
- Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
- Владение основными рабочими инструментами системного администратора.
- Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
- Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .
Заключение
Долго я возился с этой статьей. В итоге перепробовал кучу всяких вариантов и настроек, но у меня так и не получилось добиться того, чтобы Freepbx без ошибок работала на Centos 8. Я для себя сделал вывод, что панель просто не готова к работе на этой системе. Статью я решил все же оформить и опубликовать, потому что было жаль потраченного времени, плюс может это будет кому-то полезно, если необходимо настраивать только на Centos 8.
При настройке и отладке различных версий, рекомендую использовать виртуальную машину и снепшоты. Я сначала настроил систему, сделал снепшот, потом собрал астериск, сделал еще снепшот, а потом уже пробовал различные версии панели. Это позволило оперативно проверить много вариантов настроек и версий php. Загружался из снепшотов раз 20.
Все статьи в буржунете, что видел, поверхностны и рассказывают обычную установку на дефолтную систему с php 7.2 из базовых реп. Как это потом работает, никто не проверяет. Реально полезной и законченной информации по Centos 8 b Freepbx я не нашел.
Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.
Онлайн курс Infrastructure as a code
Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца.
Что даст вам этот курс:
- Познакомитесь с Terraform.
- Изучите систему управления конфигурацией Ansible.
- Познакомитесь с другими системами управления конфигурацией — Chef, Puppet, SaltStack.
- Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
- В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins
Смотрите подробнее программу по .