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


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

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


Обновление shopcms для работы на версии php 5.4 +

php5.4

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

#21 badisoft

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

  • VIP
  • 4 986 сообщений
Репутация: 761
Мастер

Отправлено 20 октября 2016 - 20:06

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

единственное кто этим занимается бадисофт когда находит ошибку он выкладывает ее в своей теме, и ему огромное за это спасибо, и он же отлично как пять пальцев знает движок, почему бы не скинуться коллективно, т.к. за любую работу нужно платить а интернет магазин это изначально коммерческое предприятие, и пусть бадисофт за оплату протестит и переведет стандартный движок на версии php 5.4+
Да бог с Вами, у меня давно есть версия ShopCMS на UTF8. Зачем тащить в светлое будущее проект на cp1251? Куда проще один раз все это переконвертить в UTF (с соответствующей подчисткой). Хотя другие переделки (та же передача параметров по ссылке, получившая новый синтаксис - символ & перед названием переменной) все равно будут нужны.
Проблема будет совсем в другом, не в движке. ShopCMS при всей своей изначальной убогости хорош наличием довольно большого бесплатного и платного модульного наполнения. На любой вкус и цвет. Мало кто использует shopCMS в голом виде, без доп. модулей. Кто будет перепиливать их? Вне зависимости, остаемся на cp1251 (проблема с функциями, поменявшими дефолтовую кодировку) или переходим на ShopCMS/UTF8 (переделка всех AJAX-запросов, т.к. больше не нужен iconv) - большинство модулей перестанут быть годными для установки.

Цитата

на данный момент этот магазин умирает только потому что в стандарте он не может работать на версиях больше php 5.3, как только он в стандарте станет на новые версии, он сразу оживет. И будет новая работа для програмистов по написанию новых модулей и исправлению старых
Это не так. shopCMS по нынешним реалиям В ПРИНЦИПЕ устарел. То, что в нем делается установкой десятка модулей в современном поддерживаемом авторами или сообществом магазине есть уже изначально. Тот же Gres (просто пример, который тут уже мелькал), который бесплатен до 10 категорий и 50-ти товаров, а дальше не так уж и дорог. На уровне пары моих модулей для shopCMS, которые там уже есть штатно. Также нельзя не вспомнить вполне развивающийся OpenCart, если я правильно помню название. Он (если я не путаю) вообще на shopCMS похож почти как родной (ну, пусть двоюродный) брат. Тот же шаблонизатор, довольно похожая структура каталогов. И при этом не умер на версии 2007-го года.

Так что понятно, когда надо поддерживать уже существующий сайт. Я тоже считаю, что куда правильнее держать сайт на VPS/VDS, где ты сам определяешь версию PHP и остальное наполнение. А если новый сайт делать, то ну его нафиг, этот некроCMS... Я-то хоть знаю его хорошо, у меня есть мотив продолжать делать сайты на нем. А обычному клиенту - нафиг такое допотопное счастье.

У меня сохранилось некое подобие инструкции, которую я писал для себя о переходе на UTF8.
Почему-то я ее так и не выложил на форум, не помню уже.
Возможно, она не полная и я хотел ее дописать.
Возможно, она где-то не корректная и я хотел написать более корректно.
===========================
1. Функции htmlspecialchars (без задания codepage встречается в functions.php три раза и в counter.php два раза ) и html_entity_decode (без задания codepage встречается в functions.php один раз).
2. Начиная с PHP 5.6 дефолтовый для этих функций codepage задается в php.ini настройкой default_charset (либо в .htaccess). Т.е. проблема с пропаданием русских букв только при PHP 5.4 и 5.5.
3. Я не заметил каких-то особых проблем по переводу ShopCMS целиком в UTF8 и (или) придании работоспособности в 5.4 и 5.5. Потратил на это часа два, не более. Наверное, какие-то проблемки вылезут, но навcкидку все работает.
- перенес DEFINE ('DEFAULT_CHARSET' из language.php в init.php. Уже не помню, зачем. Видимо, language.php грузится не во всех случаях
- задал его как DEFINE ('DEFAULT_CHARSET','UTF8')
- везде, где нашлась строка 1251 (cp1251, windows-1251) заменил ее на DEFAULT_CHARSET
- перекодировал файлы, где есть русские буквы из 1251 в UTF8
- добавил в xml_installer.php в функцию GetCreateTableSQL строку " DEFAULT CHARSET=".DEFAULT_CHARSET
- добавил в функции htmlspecialchars и html_entity_decode задание DEFAULT_CHARSET (это уже для PHP 5.4 и 5.5).
- заменил класс asido на теоретически работающий в версиях PHP старше 5.3 (нет пока 5.4, не на чем проверить).
Полученный дистрибутив легко переключается 1251<->UTF8. Достаточно изменить DEFAULT_CHARSET и перекодировать файлы в нужную кодировку.
==================
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#22 straniks

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

  • Download User
  • PipPipPip
  • 59 сообщений
Репутация: 0
Начинающий

Отправлено 21 октября 2016 - 18:55

Цитата

Вы правы. перестали оформляться заказы.. на почту не приходят сообщения. вообщем беда. Если какое решение? Так не хочется переходить на другой движок..
заказы каким образом не оформляются?
При нажатии добавить в карзину - 500 ошибка , обновил страницу -
Not Found
The requested URL /index.php was not found on this server.


#23 kery

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

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

Отправлено 22 октября 2016 - 17:45

Просмотр сообщенияstraniks (21 октября 2016 - 18:55) писал:

Цитата

Вы правы. перестали оформляться заказы.. на почту не приходят сообщения. вообщем беда. Если какое решение? Так не хочется переходить на другой движок..
заказы каким образом не оформляются?
При нажатии добавить в карзину - 500 ошибка , обновил страницу -
Not Found
The requested URL /index.php was not found on this server.
500 ошибка это вообще ошибка конфигурации сервера, как правило возникает когда время на выполнения скрипта вышло, увеличте время в директивах php.ini

#24 badisoft

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

  • VIP
  • 4 986 сообщений
Репутация: 761
Мастер

Отправлено 22 октября 2016 - 18:20

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

500 ошибка это вообще ошибка конфигурации сервера, как правило возникает когда время на выполнения скрипта вышло
IMHO, это не так. web-сервер (апач, нгинкс) возвращает код 500 когда происходит ошибка выполнения, т.е. в процессе выполнения скрипта возникла какая-то ошибка. Какая? Это надо смотреть в логах. Думаю, что ее вызывает какая-то из используемых в ShopCMS функций PHP, бывшая в 5.3 deprecated, а в 5.4 уже отсутствующая. А по таймауту (превышению скриптом разрешенного времени исполнения), если я не ошибаюсь, отдается какая-то другая ошибка. у меня Nginx в системе фронтенд-бэкенд отдает Request Timeout, но номер ошибки я не помню.

Но в любом случае вылет по таймауту при "положить товар в корзину" довольно маловероятен. Да и отличить просто - если ошибка сразу, то это явно не таймаут, т.к. при таймауте ошибка появится только через 30сек (дефолтовое значение времени исполнения скрипта) либо еще большее время (обычно его увеличивают до минуты-двух-трех).
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#25 kery

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

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

Отправлено 22 октября 2016 - 19:26

Просмотр сообщенияbadisoft (20 октября 2016 - 20:06) писал:

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

единственное кто этим занимается бадисофт когда находит ошибку он выкладывает ее в своей теме, и ему огромное за это спасибо, и он же отлично как пять пальцев знает движок, почему бы не скинуться коллективно, т.к. за любую работу нужно платить а интернет магазин это изначально коммерческое предприятие, и пусть бадисофт за оплату протестит и переведет стандартный движок на версии php 5.4+
Да бог с Вами, у меня давно есть версия ShopCMS на UTF8. Зачем тащить в светлое будущее проект на cp1251? Куда проще один раз все это переконвертить в UTF (с соответствующей подчисткой). Хотя другие переделки (та же передача параметров по ссылке, получившая новый синтаксис - символ & перед названием переменной) все равно будут нужны.
Проблема будет совсем в другом, не в движке. ShopCMS при всей своей изначальной убогости хорош наличием довольно большого бесплатного и платного модульного наполнения. На любой вкус и цвет. Мало кто использует shopCMS в голом виде, без доп. модулей. Кто будет перепиливать их? Вне зависимости, остаемся на cp1251 (проблема с функциями, поменявшими дефолтовую кодировку) или переходим на ShopCMS/UTF8 (переделка всех AJAX-запросов, т.к. больше не нужен iconv) - большинство модулей перестанут быть годными для установки.

Цитата

на данный момент этот магазин умирает только потому что в стандарте он не может работать на версиях больше php 5.3, как только он в стандарте станет на новые версии, он сразу оживет. И будет новая работа для програмистов по написанию новых модулей и исправлению старых
Это не так. shopCMS по нынешним реалиям В ПРИНЦИПЕ устарел. То, что в нем делается установкой десятка модулей в современном поддерживаемом авторами или сообществом магазине есть уже изначально. Тот же Gres (просто пример, который тут уже мелькал), который бесплатен до 10 категорий и 50-ти товаров, а дальше не так уж и дорог. На уровне пары моих модулей для shopCMS, которые там уже есть штатно. Также нельзя не вспомнить вполне развивающийся OpenCart, если я правильно помню название. Он (если я не путаю) вообще на shopCMS похож почти как родной (ну, пусть двоюродный) брат. Тот же шаблонизатор, довольно похожая структура каталогов. И при этом не умер на версии 2007-го года.

Так что понятно, когда надо поддерживать уже существующий сайт. Я тоже считаю, что куда правильнее держать сайт на VPS/VDS, где ты сам определяешь версию PHP и остальное наполнение. А если новый сайт делать, то ну его нафиг, этот некроCMS... Я-то хоть знаю его хорошо, у меня есть мотив продолжать делать сайты на нем. А обычному клиенту - нафиг такое допотопное счастье.

У меня сохранилось некое подобие инструкции, которую я писал для себя о переходе на UTF8.
Почему-то я ее так и не выложил на форум, не помню уже.
Возможно, она не полная и я хотел ее дописать.
Возможно, она где-то не корректная и я хотел написать более корректно.
===========================
1. Функции htmlspecialchars (без задания codepage встречается в functions.php три раза и в counter.php два раза ) и html_entity_decode (без задания codepage встречается в functions.php один раз).
2. Начиная с PHP 5.6 дефолтовый для этих функций codepage задается в php.ini настройкой default_charset (либо в .htaccess). Т.е. проблема с пропаданием русских букв только при PHP 5.4 и 5.5.
3. Я не заметил каких-то особых проблем по переводу ShopCMS целиком в UTF8 и (или) придании работоспособности в 5.4 и 5.5. Потратил на это часа два, не более. Наверное, какие-то проблемки вылезут, но навcкидку все работает.
- перенес DEFINE ('DEFAULT_CHARSET' из language.php в init.php. Уже не помню, зачем. Видимо, language.php грузится не во всех случаях
- задал его как DEFINE ('DEFAULT_CHARSET','UTF8')
- везде, где нашлась строка 1251 (cp1251, windows-1251) заменил ее на DEFAULT_CHARSET
- перекодировал файлы, где есть русские буквы из 1251 в UTF8
- добавил в xml_installer.php в функцию GetCreateTableSQL строку " DEFAULT CHARSET=".DEFAULT_CHARSET
- добавил в функции htmlspecialchars и html_entity_decode задание DEFAULT_CHARSET (это уже для PHP 5.4 и 5.5).
- заменил класс asido на теоретически работающий в версиях PHP старше 5.3 (нет пока 5.4, не на чем проверить).
Полученный дистрибутив легко переключается 1251<->UTF8. Достаточно изменить DEFAULT_CHARSET и перекодировать файлы в нужную кодировку.
==================
Бадисофт вот и выкладывайте рабочую инструкцию в продажу, избавит многих у кого есть интернет магазин от перехода на другую cms, достаточно один раз перейти на utf 8 и проблемы с кодировкой уже ушли, а также в продажу и голый движок уже на utf8. А это в свою очередь подстегнет писать новые модули уже под utf8? и те что писались люди будут заказывать переделать под utf.

#26 straniks

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

  • Download User
  • PipPipPip
  • 59 сообщений
Репутация: 0
Начинающий

Отправлено 23 октября 2016 - 16:39

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

500 ошибка это вообще ошибка конфигурации сервера, как правило возникает когда время на выполнения скрипта вышло, увеличте время в директивах php.ini
Доступа к php.ini у меня нет.
Как то странно стал работать магазин. Ошибки идут по нарастающей, сегодня плюс ко всему не отправляет сообщения и заказы на почту не шлет.. Придется переходить на другой движок.. Посоветуйте не дорогой и не замороченный под конфиг моего хостера5.6.26-1~dotdeb+7.1.
Спасибо

#27 R.Sergey

    Администратор

  • Администраторы
  • 2 756 сообщений
Репутация: 328
Мастер

Отправлено 24 октября 2016 - 02:54

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

Придется переходить на другой движок.. Посоветуйте не дорогой и не замороченный под конфиг моего хостера5.6.26-1~dotdeb+7.1.

Лучше оплатите работу и переведем Вам движок и на utf и под 5.4 и под 5,6 и вообще под что угодно.

#28 straniks

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

  • Download User
  • PipPipPip
  • 59 сообщений
Репутация: 0
Начинающий

Отправлено 24 октября 2016 - 09:46

Просмотр сообщенияR.Sergey (24 октября 2016 - 02:54) писал:

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

Придется переходить на другой движок.. Посоветуйте не дорогой и не замороченный под конфиг моего хостера5.6.26-1~dotdeb+7.1.

Лучше оплатите работу и переведем Вам движок и на utf и под 5.4 и под 5,6 и вообще под что угодно.
Цена вопроса?

#29 badisoft

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

  • VIP
  • 4 986 сообщений
Репутация: 761
Мастер

Отправлено 24 октября 2016 - 12:54

Цитата

Бадисофт вот и выкладывайте рабочую инструкцию в продажу, избавит многих у кого есть интернет магазин от перехода на другую cms
А нет у меня такой готовой инструкции, есть только один из тестовых сайтов, который я перевел на utf8. Это оказалось довольно просто, коммерческого смысла не имело (мне было просто любопытно это сделать), поэтому с окончательной инструкцией я заморачиваться не стал. Ну а черновик, написанный для себя я и так уже выложил.
Если будет какой-то коммерческий интерес к созданию такой инструкции по переходу на 5.4+ версии PHP и/или UTF8, то я ее напишу. А пока не вижу смысла тратить на это время. С точки зрения программирования "для себя" задача оказалась совершенно не интересной.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#30 kery

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

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

Отправлено 30 октября 2016 - 11:13

Нашел еще один косяк который надо исправить т.к. не работала настройка Доставка по странам и областям (фиксированная стоимость), это функция session_is_registered и функция session_register которая была удаленны в php 5.4
в файле functions.php находим функцию:

function xSaveData($_ID, $_Data, $_TimeControl = 0)

в ней следующий код

if (!session_is_registered('_xSAVE_DATA'))

меняем на

   //if (!session_is_registered('_xSAVE_DATA'))
	if (!isset($_SESSION['_xSAVE_DATA']))

комментируем строку

session_register('_xSAVE_DATA');

на

//session_register('_xSAVE_DATA');

и еще дополнение

1.в файле custord_subscribers.php в двух местах:
находим
				if(!session_is_registered('SUBSCRIBE_MESSAGE')){

						session_register('SUBSCRIBE_MESSAGE');
				}
меняем на

				if(isset($_SESSION['SUBSCRIBE_MESSAGE'])){

						$_SESSION['SUBSCRIBE_MESSAGE'];
				}

2. в файле affiliate_program.php
находим
				session_register('s_RefererLogin');
закоментируем
				//session_register('s_RefererLogin');

3. в файле modules.export_products.php
находим
		if(!session_is_registered('explortExpandedIDs')){

				session_register('explortExpandedIDs');
				$_SESSION['explortExpandedIDs'] = array(1=>1);
		}
меняем на
		if(isset($_SESSION['explortExpandedIDs'])){
	   		 //session_register('explortExpandedIDs');
				$_SESSION['explortExpandedIDs'] = array(1=>1);
		}
находим
		if (!session_is_registered('checkedCategories')) {

				session_register('checkedCategories');
				$_SESSION['checkedCategories'] = array();
		}

меняем на
		if(isset($_SESSION['checkedCategories'])){

				//session_register('checkedCategories');
				$_SESSION['checkedCategories'] = array();
		}	

находим
		if (!session_is_registered('selectedProducts')) {

				session_register('selectedProducts');
				$_SESSION['selectedProducts'] = array();
		}
меняем на
		if(isset($_SESSION['selectedProducts'])){

				//session_register('selectedProducts');
				$_SESSION['selectedProducts'] = array();
		}
находим
		if (!session_is_registered('selectedProductsIncSub')) {

				session_register('selectedProductsIncSub');
				$_SESSION['selectedProductsIncSub'] = array();
		}
меняем на
		if(isset($_SESSION['selectedProductsIncSub'])){

				//session_register('selectedProductsIncSub');
				$_SESSION['selectedProductsIncSub'] = array();
		}	
находим
		if (!session_is_registered('isExpanded')) {

				session_register('isExpanded');
				$_SESSION['isExpanded'] = array();
		}
меняем на
		if(isset($_SESSION['isExpanded'])){

				//session_register('isExpanded');
				$_SESSION['isExpanded'] = array();
		}	

обновил первый пост

#31 badisoft

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

  • VIP
  • 4 986 сообщений
Репутация: 761
Мастер

Отправлено 30 октября 2016 - 19:16

Цитата

это функция session_is_registered и функция session_register которая была удаленны в php 5.4
ИМХО, общая инструкция для НЕ КРИВОРУКИХ состоит в:
1. убираем везде & в передаче аргумента в функцию не по значению, а по ссылке. Это класс asido и еще пара мест, насколько я помню.
2. добавляем везде задание кодовой страницы в функции конвертации текста, поменявшие дефолтовую кодовую страницу с однобайтовой на UTF-8. Типа функции htmlentity и подобных.
3. Заменяем убранные в PHP 5.3 и выше функции на действующие аналогичные по смыслу.

Это 99% решения. Возможно, что-то еше вылезет - поправить по ситуации.

PS. Я это к тому, что бессмысленно публиковать простыню изменений "как сделать ShopCMS 2007-го года, сделанный под PHP 4.х работосопособным под PHP 7.0". Кто может это сделать - сделает сам. Не велика проблема. А кто не может, но владеет сайтом на ShopCMS - у того врядли дефолтовая конфигурация. Установлены какие-то дополнения, модули, частично перелопачен код. И описание изменений для дефолтовой конфиги врядли поможет. Есть лишь риск получить не работоспособную систему ни там, ни там.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#32 badisoft

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

  • VIP
  • 4 986 сообщений
Репутация: 761
Мастер

Отправлено 29 марта 2017 - 17:28

Написал я себе инструкцию по переводу на 5.4-5.5 и 5.6-7.0 (второе проще).
Мысли для самостоятельных:

Цитата

Заменяем функцию [...] которая устарела
Куда удобнее написать свою одноименную функцию, делающую то же самое, а не править два десятка файлов.

Цитата

Заменяем функцию ereg которая устарела с php 5.4
В 5.4 она стала deprecated, но работает от этого не хуже.
Удалена эта функция (и eregi) только в 7.0
//if(eregi('^(.+):([0-9]+)$', $hosts[$index], $hostinfo))
if(preg_match('/^([^:]+):([0-9]+)$/', $hosts[$index], $hostinfo))
eregi и ereg - разные функции.
eregi('...' преобразуется в preg_match('/.../i'
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)