Перейти к содержимому


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


ShopCMS и PHP7


Сообщений в теме: 6

#1 badisoft

    Продвинутый пользователь

  • VIP
  • 5 042 сообщений
Репутация: 774
Мастер

Отправлено 29 марта 2018 - 16:22

Дошли у меня руки проинсталлить сервер с PHP7.1.
Заодно решил посмотреть, а что же такого страшного в PHP7 для ShopCMS.
Раскатал ShopCMS 3.1.3 и начал его инсталлировать, исправляя по ходу процесса появляющиеся ошибки.
Все оказалось на удивление не сложно.

Основные моменты:

1. Надо добавить отсутствующие в PHP7, но использующися в ShopCMS функции.
Их не так и много (аж пять). Создаем файлик /core/functions/deleted_function.php и пишем туда заменители функций.

2. заменить класс (и одноименный каталог) asido на более новый.

3. Скачать со smarty.net последнюю версию smarty 2.6.* (сейчас это 2.6.31), исправленную под PHP7 и заменить ею старую.

4. перенести в новую версию smarty настройки из старой и смарти-функцию hassign.

5. добавить библиотеку "MySQL to MySQLi" (эмулятор mysql-фукций через mysqli-функции). Два файла в /core/includes/database/ и две строки в mysql.php

6. исправить конструкторы классов, где они одноименные с именем класса. .
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP;

7. прописать для PHP значение default_charset cp1251. Хоть в htaccess, хоть в php.ini, хоть еще где. Я прописывал в nginx.conf, т.к. использую nginx. Это задаст нужную кодировку для функций htmlspecialchars и html_entity_decode

8. убрать передачу по ссылке &new везде, где она есть

9. еще несколько мелочей, которые дают warning, а не error и легко фиксятся исходя из текста в "Статистике ошибок"

Все. Процедура меньше, чем на десять шагов. Заняла неспешно один день. Не понимаю, о чем не так давно ломались копья чуть не две недели.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 badisoft

    Продвинутый пользователь

  • VIP
  • 5 042 сообщений
Репутация: 774
Мастер

Отправлено 05 апреля 2018 - 15:21

Цитата

3. Скачать со smarty.net последнюю версию smarty 2.6.* (сейчас это 2.6.31), исправленную под PHP7 и заменить ею старую.
А вот под PHP 5.2 обновлять версию smarty на 2.6.31(последнюю на текущий момент) не стоит.
Перестает работать как минимум {count}

PS. Хм... Надо проверить, может в этой версии {count} и на PHP7 не работает. :)
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 badisoft

    Продвинутый пользователь

  • VIP
  • 5 042 сообщений
Репутация: 774
Мастер

Отправлено 05 апреля 2018 - 19:09

Цитата

Хм... Надо проверить, может в этой версии {count} и на PHP7 не работает.
Печалько.. Не работает и в PHP7. А ведь {count} довольно много где используется в ShopCMS.
Придется:
-либо ждать исправления (не знаю, как написать об этой проблеме авторам)
-либо откатываться на какую-то предыдущую версию 2.6.*, которая уже переделана под PHP7, но еще не имеет проблемы с {count}
-либо переходить на smarty3 (предполагая, что там {count} работает). но это куда болезненнее, чем просто заменить библиотеку smarty2 на более новую
-либо самому разбираться, в чем проблема и почему не работает {count}. Видимо, этот путь будет наиболее быстрым :(.

Позже:

Ээээ... собственно, строка, вызывающая проблему такова:
{count item=_CostsNum array=$shipping_costs[i]}
и находится она в order2_shipping.tpl.html и order2_shipping_quick.tpl.html, product_tree.tpl.html.
Похоже, я ее попутал с {counter} - штатной функцией smarty.

Отсюда вопрос - а что это вообще за функция? Я не вижу ее в документации по Смарти.

Еще позже:

Цитата

-либо самому разбираться, в чем проблема и почему не работает {count}.
Йееее! Так и оказалось! Это плагин function.count.php, которого нет в штатном smarty, но который есть в shopCMS.
Алилуйя, все снова работает :).
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 webvertex

    Новичок

  • Assistent vsupport.ru
  • Pip
  • 9 сообщений
Репутация: 0
Начинающий

Отправлено 10 апреля 2018 - 23:26

Цитата

1. Надо добавить отсутствующие в PHP7, но использующися в ShopCMS функции.
Их не так и много (аж пять). Создаем файлик /core/functions/deleted_function.php и пишем туда заменители функций.
А если не секрет, какие пять использующихся в ShopCMS функций Вы нашли удалённых в PHP7?
1. ereg (setting_functions.php, catalog_excel_export.php, conf_blocks_edit.php)

(https://wiki.php.net...cations_php_7_2)

#5 badisoft

    Продвинутый пользователь

  • VIP
  • 5 042 сообщений
Репутация: 774
Мастер

Отправлено 11 апреля 2018 - 08:16

Просмотр сообщенияwebvertex сказал:

какие пять использующихся в ShopCMS функций Вы нашли удалённых в PHP7?
session_unregister - deprecated в 5.3, убранo в 5.4
session_register - deprecated в 5.3, убранo в 5.4
session_is_registered - deprecated в 5.3, убранo в 5.4
ereg - deprecated в 5.4, убранo в 7.0
eregi - deprecated в 5.4, убранo в 7.0
split - deprecated в 5.3, убранo в 7.0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 badisoft

    Продвинутый пользователь

  • VIP
  • 5 042 сообщений
Репутация: 774
Мастер

Отправлено 11 апреля 2018 - 16:20

Файлик deleted_functions.php, который очень полезен при переходе на PHP7 :)

<?php
if (!function_exists('session_unregister')) // deprecated в 5.3, убранo в 5.4
{
function session_unregister($var)
    {
    unset($_SESSION[$var]);
    return true;
    }
}

if (!function_exists('session_register')) // deprecated в 5.3, убранo в 5.4
{
function session_register($var)
    {
    $_SESSION[$var];
    return true;
    }
}

if (!function_exists('session_is_registered')) // deprecated в 5.3, убранo в 5.4
{
function session_is_registered($var)
    {
    return isset($_SESSION[$var]);
    }
}

if (!function_exists('ereg')) // deprecated в 5.4, убранo в 7.0
{
function ereg($tpl,$var)
    {
    return preg_match('/'.$tpl.'/',$var);
    }
}

if (!function_exists('eregi')) // deprecated в 5.4, убранo в 7.0
{
function eregi($tpl,$var1,$var2)
    {
    return preg_match('/'.$tpl.'/i',$var1,$var2);
    }
}

if (!function_exists('split')) // deprecated в 5.3, убранo в 7.0
{
function split ($pattern, $string, $limit = -1, $flags = 0)
    {
    return preg_split ('/'.$pattern.'/', $string, $limit, $flags);
    }
}
?>


http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#7 webvertex

    Новичок

  • Assistent vsupport.ru
  • Pip
  • 9 сообщений
Репутация: 0
Начинающий

Отправлено 11 апреля 2018 - 19:05

Спасибо большое!
Мы пошли по более сложному пути - убрали или исправили эти функции в исходных файлах :-)