Среда разработки должна быть удобной и отвечать всем современным стандартам. Увы, Битрикс не обеспечивает ни удобства, ни поддержки стандартов.
Битрикс это отличная система, но не без проблем и сейчас будем разбираться с самой известной из них: mbstring.func_overload.
Параметр mbstring.func_overload на официальном сайте PHP, уже несколько лет как признан устаревшим и разработчикам рекомендовано не использовать его в своих проектах.
Что до Битрикс, то вы не сможете ее установить, если параметр mbstring.func_overload не установлен в значение «2».
Я пишу эту статью после очередной установки на Ubuntu сервер системы Битрикс, при этом на сервере уже стояла Laravel. Каково же было мое удивление, когда при попытки авторизации или заполнения любой из форм, система отвечала :
The page has expired due to inactivity. Please refresh and try again.
Laravel при mbstring.func_overload = 2
Как вы поняли, mbstring.func_overload для Laravel должен быть установлен в значение «0», что соответствует рекомендациям разработчиков языка.
Проблемы возникнут не только с Ларой, вы будете получать ошибки и предупреждения практически от всех современных систем, что сделает их параллельную работу с Битрикс на одном сервере, невозможной.
Решение для Apache выглядит совсем просто, необходимо прописать параметр в файл .htaccess в корневой директории установки Битрикс:
1 2 3 4 |
<Directory /path/to/your/script> AllowOverride All php_admin_value mbstring.func_overload 0 </Directory> |
Но у меня был установлен nginx + php-fpm и настройка выглядит иначе:
1 2 3 4 5 |
location /special/path/ { ... fastcgi_param PHP_VALUE "mbstring.func_overload=2"; ... } |
Вносить изменения необходимо в файл настроек сайта в директории /etc/nginx/sites-available или в файл настроек /etc/nginx/sites-enabled в секцию с настройками сайта Битрикс.
Стоит отметить, что последний способ будет прекрасно работать с директориями сайта, но если вы попытаетесь настроить так домен или поддомен (как в моем случае) то ничего не выйдет.
Я вношу настройки для первого сайта mbstring.func_overload я выставляю в «0», для второго в «2». Какое-то время все работает как надо. Тест Битрикс выдает положительный результат, Laravel обрабатывает запросы. Я закрываю задачу и иду настраивать и дорабатывать новенький магазин, но через какое-то время, Laravel вновь перестает обрабатывать запросы.
Озарение пришло как-то само. Просто нужно было вспомнить, что nginx работает со статикой, а динамические запросы проксирует.
Это значит, что за обработку динамических запросов отвечает Apache или php-fpm (как в моем случае).
Итак нам предстоит создать файл настроек для сайта в директории с активным PHP. Установок PHP может быть несколько, поэтому будьте внимательны. Узнать какая версия PHP используется вашим сайтом и в где хранятся файлы настроек можно прописав в .php файле функцию phpinfo();.
Осталось поправить новый файл конфигурации в соответствии с нашими требованиями.
1 2 3 4 5 |
[some-host.tld] listen = ... ... php_admin_value[mbstring.func_overload] = 2 php_admin_value[mbstring.internal_encoding] = UTF-8 |