Аналоги php функций в битрикс. Пхп битрикс
Ошибка несовместимости Битрикс и PHP 7.1+
При установке сайта на Битрикс на сервер с PHP 7.1 и выше сталкиваемся со следующей проблемой: в административном интерфейсе отваливается стартовый рабочий стол.
Битрикс оповещает об этом следующим экраном:
Идем в файл .settings.php, который находится в 16+ версии в следующей локации:/bitrix/.settings.php
В конфиг-файле включаем вывод ошибок:
'exception_handling' => array ( 'value' => array ( 'debug' => false,После этого обновляем страницу административного интерфейса и видим вот это:
Таким образом, Битрикс хочет нам сказать, что у него возникла проблема несовместимости при обработке текстовых переменных в следующих скриптах:
[Error] [] operator not supported for strings (0) /var/www/alkc/data/www/alkc/bitrix/modules/main/classes/general/checklist.php:476 #0: CCheckListResult::GetList(array, array) /var/www/alkc/data/www/alkc/bitrix/modules/main/classes/general/checklist.php:52 #1: CCheckList->__construct() /var/www/alkc/data/www/alkc/bitrix/gadgets/bitrix/admin_checklist/index.php:17 #2: include(string) /var/www/alkc/data/www/alkc/bitrix/components/bitrix/desktop/include.php:105 #3: BXGadget::GetGadgetContent(array, array) /var/www/alkc/data/www/alkc/bitrix/components/bitrix/desktop/component.php:823 #4: include(string) /var/www/alkc/data/www/alkc/bitrix/modules/main/classes/general/component.php:548 #5: CBitrixComponent->__includeComponent() /var/www/alkc/data/www/alkc/bitrix/modules/main/classes/general/component.php:600 #6: CBitrixComponent->includeComponent(string, array, boolean) /var/www/alkc/data/www/alkc/bitrix/modules/main/classes/general/main.php:1035 #7: CAllMain->IncludeComponent(string, string, array, boolean, array) /var/www/alkc/data/www/alkc/bitrix/modules/main/interface/desktop.php:35 #8: require(string) /var/www/alkc/data/www/alkc/bitrix/admin/index.php:2/bitrix/modules/iblock/classes/general/iblockproperty.php, здесь ищем 20 строку и в ней исправляем:
Было:
$arSqlSearch = "";Стало:
$arSqlSearch = [];Теперь идем в: /bitrix/modules/main/classes/general/checklist.php и вносим исправления здесь на 472 строчке, выполняем все так же:
Было:
$arSqlWhere = "";Стало:
$arSqlWhere = [];Ура! Все заработало.
bitrixhub.ru
Битрикс, PHP 7 и restore.php • Сам себе администратор
Если вы еще не восстанавливали/переносили Битрикс на свеженький (или не очень) сервер с PHP 7, то вы счастливый человек. Нет, сам Битрикс на PHP 7 работает более чем хорошо, я бы даже сказал, что намного лучше, чем на 5.X.
Т.е. все прекрасно, кроме самого процесса переноса. Если вы воспользуетесь официальным инструментом от Битрикса — скриптом restore.php, то столкнетесь с проблемами. Собственно, как только дело дойдет до восстановления базы данных — сервер упадает в 500 ошибку, а в логах появится следующая запись:
PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /var/www/html/restore.php:1328 Stack trace: #0 /var/www/html/restore.php(670): CDBRestore->Connect() #1 {main} thrown in /var/www/html/restore.php on line 1328
PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /var/www/html/restore.php:1328 Stack trace: #0 /var/www/html/restore.php(670): CDBRestore->Connect() #1 {main} thrown in /var/www/html/restore.php on line 1328 |
Т.е. в скрипте по прежнему используется старая библиотекой php для работы с MySQL, вместо mysqli — уже как несколько лет обозначенной, как единственно верное и поддерживаемое решение.А в PHP 7 больше нет поддержки старой библиотеки для mysql, это известно всем, кроме тех людей которые занимаются скрипом восстановления (я уверен, что им уже сказали, но пока они раскачаются…).
Решение тут понятно простое — восстановить базу руками, что, понятно, несложно. Нет один, два раза без проблем, но на десятый уже конечно надоедает.
Собственно решение тут одно, взять и поправить код скрипта, благо правок так немного. Что и было сделано:
- Убран код, который скачивает свежую версию скрипта с Битрикса и подменяет текущий файл;
- Собственно все старые не поддерживаемые функции заменены на аналоги из mysqli
Скачать: bitrix_restore_php7
Как только в Битрикс выпустят свою нормальную версию — ссылку заменю на официальный продукт.
Upd: Вышел официальный restore.php с поддержкой mysqli.
host-consult.ru
Обновление до php 5.4 в Битрикс — jnotes.ru
Имеется сайт, окружение для которого подготавливалось с помощью «Веб-окружение Битрикс» 4ой версии на CentOs6. В нем используется PHP5.3, который надо обновить.
Мне техподдержка битрикс порекомендовала подготовить новое окружение, развернуть bitrix-env 5ой версии, которое ставит php54 и перенести туда сайт. Меня данный подход не устраивает по многим причинам:
- База и приложение весят довольно много, поэтому, придется строить схему с репликацией базы и контента. Ради простого обновления PHP…
- конфиги nginx и apache немного исправлены (А Битрикс любит их перетирать в default при любой возможности)
- заново разворачивать окружение, что бы обновить PHP — это не нормально!
Обновление PHP без обновления до bitrix-env 5
ВНИМАНИЕ!!!
На данный момент все описанное ниже я делал на тестовом сервере. Проверена только основная работоспособность!
Внимательно смотрю что же делает bitrix-env.sh. Интересует все что касается PHP. Итак:
# Похоже, флаг установки php54 PHP54=1 ... # далее в переменной version_c будет хранится желаемая версия echo -e "\e[1;31mWhich version you want to install? (4|5)\e[0m" read version_c ... # Далее самое интересное # если выбрана 4, то о PHP54 речи не идет [[ $version_c == 4 ]] && yum -y install bitrix-env4 if [[ $version_c == 5 ]]; then yum clean all # если выборана версия 5, то подключаем remi repo if [[ $PHP54 -gt 0 ]]; then # enable remi repository rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm # включается [remi] sed -i "0,/php55/s/enabled=0/enabled=1/" /etc/yum.repos.d/remi.repo; ... # install php 5.4 yum -y install php php-mysql php-pecl-apcu php-pecl-zendopcache ... else ... fi # create opcache package if [[ $PHP54 -gt 0 ]]; then if [[ $is_x86_64 -eq 1 ]]; then echo 'zend_extension=/usr/lib64/php/modules/opcache.so opcache.enable=1 opcache.memory_consumption=124M opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.max_wasted_percentage=5 opcache.validate_timestamps=1 opcache.revalidate_freq=0 opcache.fast_shutdown=1 opcache.blacklist_filename=/etc/php.d/opcache*.blacklist' > /etc/php.d/opcache.ini else echo 'zend_extension=/usr/lib/php/modules/opcache.so opcache.enable=1 opcache.memory_consumption=124M opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.max_wasted_percentage=5 opcache.validate_timestamps=1 opcache.revalidate_freq=0 opcache.fast_shutdown=1 opcache.blacklist_filename=/etc/php.d/opcache*.blacklist' > /etc/php.d/opcache.ini fi fi ...Дальше идет настройка opcache.
OPcache improves PHP performance by storing precompiled script bytecode in shared memory, thereby removing the need for PHP to load and parse scripts on each request.
Таким образом мне нужно:1. Подключить и включить remi repo2. Обновить / Установить следующие пакеты:— php— php-mysql— php-pecl-apcu— php-pecl-zendopcache3. Включить opcache
# yum update# curl -O http://rpms.famillecollet.com/enterprise/remi-release-6.rpm && rpm -Uvh remi-release-6.rpm# sed -i "0,/php55/s/enabled=0/enabled=1/" /etc/yum.repos.d/remi.repo# yum update php*# rpm --nodeps -e php-pecl-apc && yum install php-pecl-apcu php-pecl-zendopcache
Обращаю внимание, что после этого yum check будет выдавать
bitrix-env4-3.4-bitrix.noarch имеет недостающие зависимости от php-pecl-apc < ('0', '4.0', None)В /etc/php.d/bitrixenv.ini:
; allow_call_time_pass_reference = On/etc/php.d/opcache.ini привел к виду, предлагаемому Битрикс в bitrix-env.sh
После этого:
[root@bitrix ~]# php -v PHP 5.4.40 (cli) (built: Apr 15 2015 15:55:28) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick RethansОбновление PHP до 5.4 и bitrix-env до 5 версии
[root@bitrix ~]# ./menu.sh
20. Update system to BitrixEnv 5.0Это действо притащит еще 42 пакета, включая paramiko, ansible =)
Found network interfaces on the server: ------------------------------------------------------------------------------------ Int | Link | Speed | MAC | IPAddress ------------------------------------------------------------------------------------ eth0 | yes | | 52:54:00:a9:7e:74 | 192.168.122.179 ------------------------------------------------------------------------------------ If you want to add the server to an existing cluster Use one of the addresses listed above on master server Available actions: 1. Create Management pool of server 2. Manage localhost 0. ExitEnter selection:
Создаю новый пул (Create Management pool of server), затем ввожу FQDN имя машины.
Затем Manage Hosts in the pool(1) — Upgrade php and mysql versions (7)
Как я понимаю такой порядок обновления предполагает Битрикс.
В итоге я получил:
[root@bitrix ~]# php -v PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_dblib.so' - /usr/lib64/php/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/xmlreader.so' - /usr/lib64/php/modules/xmlreader.so: undefined symbol: dom_node_class_entry in Unknown on line 0 PHP 5.4.40 (cli) (built: Apr 15 2015 15:55:28) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend TechnologiesУдачных обновлений!
"bitrix restore php" - bxall.ru
Добрый день уважаемые читатели блога про битрикс, итак сегодня я расскажу вам о том, как перенести действующий сайт на другой хостинг или развернуть бекап из облачного сервиса битрикс благодаря скрипту «bitrix restore.php«.
Чтобы восстановить сайт Битрикс из бекапа на новый хостинг или на локальный веб-сервер достаточно создать в корневом каталоге файл restore.php скопировать код или скачать restore.php bitrix:
в уже созданный файл и запустить его из строки своего браузера: site.ru/restore.php, либо скачать его с официального сайта Битрикс по ссылке: www.1c-bitrix.ru/download/scripts/restore.php После чего, его нужно скопировать в корневую папку сайта и запустить. Далее вам откроется окно, где вы выбираете расположение бекапа вашего сайта, он может быть уже закачен вами в корневую папку нового сервера, либо размещен на том хостинге с которого вы хотите его перенести, либо если вы его загрузили к себе на компьютер, то также можно его загрузить с локального диска(далее укажите его местоположение с помощью кнопки Обзор), ну и самое главное, если у вас действующая лицензия bitrix и вы воспользовались функцией регулярного резервного копирования в облако bitrix, то скрипт предложит и этот метод восстановления/ переноса вашего сайта на bitrix. Тут в принципе нечего объяснять, вы и так всё видите. Всё довольно просто, проделаете эту процедуру раз 5 и поймете что восстанавливать сайты из резервных копий не занимает много времени и усилий. Кстати говоря, не забывайте их делать хотя бы каждую неделю — если вы активно работаете над сайтом, и каждый месяц — если редко., либо воспользуйтесь функцией регулярного резервного копирования в облако, я после завершения работ по новому сайту всегда выполняю данную настройку, чтобы не случилось с вашим хостингом, в облаке bitrix бекапы все-таки держать надежнее, причем места под несколько бекапов там там достаточно.
Итак переходим по ссылке site.ru/restore.php
Жмём далее… Указываем откуда будем собственно скачивать бекапВ случае если скачиваем из облака, а это самый предпочтительный вариант, указываем код действующей лицензии сайта на битриксВыбираем нужный архив по дате, как я уже говорил, их может быть несколько если вы все правильно настроили в модуле резервного копирования в облако.Загрузка успешно началась, в этом несомненно нам помогает скрипт bitrix restore.php ))Вот в принципе и все, загрузка с облака на сервер успешно завершена.Далее идет распаковка архива на сервере, PS: если в друг что-то далее пойдет не так, то шаг загрузки уже можно пропустить, т.к. архив уже на сервере и его можно только разархивировать
После того как все файлы разархивированы, скрипт restore.php начинает восстанавливать базу данных, здесь немного надо поработать, ведь скрипт не может делать всё за вас))
Итак:
Восстановление базы данных.
- Создаем базу данных на новом хостинге;
- Копируем пароль от БД из распакованного из архива на новом сервере, из файла по пути /bitrix/php_interface/dbconn.php и указываем паролем для новой БД.
- Заходим по FTP на сервер и правим файлы /bitrix/settings.php и /bitrix/php-interface/dbconn.php, т.е. указываем там новое имя и пользователя БД.
После этого скрипт заберет указанные ваши данные и вернет их в следующее окно. Сервер базы данных так и оставляем: localhost
После этого жмем восстановить БД.Восстановление базы данных и вообщем сайта успешно завершено благодаря скрипту от bitrix restore.php
И как всегда, спасибо за внимание, ставьте лайки, подписывайтесь))
bxall.ru
Аналоги php функций в битрикс
В битриксе есть много аналогов стандартных функций php, которые, на первый взгляд, могут показаться излишними. Но, как правило, ничего не делается без причины, и все такие функции имеют какие-то важные отличия. Многие из них сделаны для обеспечения совместимости между серверами с различными настройками, в т.ч. для обеспечения безотказной работы в разных кодировках. И, если на рядовом сайте бывает проще и надежнее (но не всегда) использовать стандартные функции, то при написании модулей их использование часто может спасти от серьезных ошибок на конфигурациях, отличных от вашей тестовой.\Bitrix\Main\Text\String::htmlEncode, ранее htmlspecialcharsbx (php: htmlspecialchars)
Функция преобразует строку в html-безопасный вид (заменяет кавычки и пр. символы на " и пр.). После этого вы можете вставлять строку в любой атрибут html-тега, заключая ее в кавычки, в т.ч. атрибут value тега input. При использовании стандартной htmlspecialchars при работе в кодировке windows-1251 в php5.4 без явного указания кодировки в третьем параметре функции, можно потерять русский текст. htmlspecialcharsbx даже без параметров скорее всего отработает без ошибок.
\Bitrix\Main\Text\String::htmlDecode, ранее htmlspecialcharsBack (php: htmlspecialchars_decode)
Имеет действие, противоположное \Bitrix\Main\Text\String::htmlEncode и преобразует тест обратно из html-безопасного вида в html-опасный.
\Bitrix\Main\Web\Json::encode и \Bitrix\Main\Web\Json::decode (php: json_encode и json_decode)
Функции пребразуют массив php в строку json-формата и обратно. Как известно, функции json_encode и json_decode работают только с кодировкой utf-8. Заставить их работать с кодировкой windows-1251 - не самая легкая задача. Функции битрикс \Bitrix\Main\Web\Json::encode и \Bitrix\Main\Web\Json::decode решают данную проблему "из коробки", обеспечиваю совместимость. А т.к. сейчас большинство сайтов работают на технологии AJAX, при написании модулей они позволят отказаться от изобретения велосипеда.
ToUpper и ToLower (php: strtoupper и strtolower) Преобразуют строку к верхнему или нижнему регистру соответственно. стандартные strtoupper и strtolower не работают с русским текстом в кодировке UTF-8, ToUpper и ToLower - могут.
P.S. Если вы знаете другие подобные функции-аналоги, пожалуйста, отпишитесь в комментариях.
02.09.201601:0702.09.2016 01:07:06
g-rain-design.ru