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


PHP 5.4+ НАРУШАЕТ РАБОТУ ShopCMS.

php 5.4 Фикс

  • Вы не можете ответить в тему
Сообщений в теме: 21

#1 NmDimas

    Пользователь

  • Download User
  • PipPip
  • 24 сообщений
Репутация: 6
Начинающий

Отправлено 26 October 2012 - 01:12 AM

Доброго дня всем. Обновил я свой сервер до 5.4 и тут начались несуразные вещи.
Сразу что я увидел то что Русский текст не сохраняется в БД. То есть редактируем блоки , или создаем новости , сохраняет пустую строчку.
После того как вскрыл код. Нашел причину, это htmlspecialchars.
дело в том что в параметре encoding случилось изменение.

encoding
Определяет кодировку, используемую для преобразования. Если не указано, то кодировкой по умолчанию является ISO-8859-1 для PHP до версии 5.4.0, и UTF-8 начиная с версии 5.4.0.

Так как в ShopCMS дефолтная кодировка 1251 тут будет у нас конфликт а именно возвращаться пустая строчка.
Решение
в коде заменить
return htmlspecialchars($_Data, ENT_QUOTES);
на
return htmlspecialchars($_Data, ENT_QUOTES,  'cp1251');
Обязательно пройдите поиском по файлам с критерием return htmlspecialchars . так как строчек таких я точное количество не знаю но то что она не одна это точно.
Предлагаю отписываться о найденных конфликтов при переходе на новую версию ПХП, так как она рано или поздно станет везде дефолтная.


Еще нашел
в файле class.ajax.php 185 строчка
return htmlspecialchars($s);
я на всяк пожарный заменил тоже. Хотя если честно точно не знаю нужно ли его заменять.
return htmlspecialchars($s, 'ENT_COMPAT | ENT_HTML401', 'cp1251', );

  • 1

#2 pavel77

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

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

Отправлено 26 October 2012 - 11:09 AM

Доброго дня всем. Обновил я свой сервер до 5.4 и тут начались несуразные вещи.
Сразу что я увидел то что Русский текст не сохраняется в БД. То есть редактируем блоки , или создаем новости , сохраняет пустую строчку.
После того как вскрыл код. Нашел причину, это htmlspecialchars.
дело в том что в параметре encoding случилось изменение.

encoding
Определяет кодировку, используемую для преобразования. Если не указано, то кодировкой по умолчанию является ISO-8859-1 для PHP до версии 5.4.0, и UTF-8 начиная с версии 5.4.0.

Так как в ShopCMS дефолтная кодировка 1251 тут будет у нас конфликт а именно возвращаться пустая строчка.
Решение
в коде заменить
return htmlspecialchars($_Data, ENT_QUOTES);
на
return htmlspecialchars($_Data, ENT_QUOTES,  'cp1251');
Обязательно пройдите поиском по файлам с критерием return htmlspecialchars . так как строчек таких я точное количество не знаю но то что она не одна это точно.
Предлагаю отписываться о найденных конфликтов при переходе на новую версию ПХП, так как она рано или поздно станет везде дефолтная.


Еще нашел
в файле class.ajax.php 185 строчка
return htmlspecialchars($s);
я на всяк пожарный заменил тоже. Хотя если честно точно не знаю нужно ли его заменять.
return htmlspecialchars($s, 'ENT_COMPAT | ENT_HTML401', 'cp1251', );


Давно перевели сайт и БД на UTF-8 проблем не наблюдается
  • 0

#3 NmDimas

    Пользователь

  • Download User
  • PipPip
  • 24 сообщений
Репутация: 6
Начинающий

Отправлено 26 October 2012 - 11:36 AM

Давно перевели сайт и БД на UTF-8 проблем не наблюдается


В вашем случае тогда нужно тоже пройтись поиском так как есть строчка в коде где была указана кодировка разработчиками цмс


Кстати а как вы автоматизировали пересохранение файла в utf-8 а то как то лень 1900 файлов вручную пересохранять
  • 0

#4 Dbus

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

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 26 October 2012 - 12:08 PM

Кстати а как вы автоматизировали пересохранение файла в utf-8 а то как то лень 1900 файлов вручную пересохранять


Пересохранять нужно только файлы с кириллическими символами, их не так уж и много, в основном шаблон да локализация

а насчет 5.4 - ccзб, имхо рановато еще на продакшн.
  • 0
502 Bad Gateway

#5 NmDimas

    Пользователь

  • Download User
  • PipPip
  • 24 сообщений
Репутация: 6
Начинающий

Отправлено 26 October 2012 - 02:12 PM

Вопрос а на гитхабе есть shopCMS комюнити ? Может создадим и будем ShopCMS оживлять, бо я уже собираюсь создавать на Yii или на Symphony функционал аналогичный ShopCMS. Так как он уже морально устарел.
  • 0

#6 Dbus

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

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 26 October 2012 - 02:19 PM

да мы и так тут трупик терзаем... :)
смысл, есть же поприличнее движки, если много времени свободного.
  • 0
502 Bad Gateway

#7 NmDimas

    Пользователь

  • Download User
  • PipPip
  • 24 сообщений
Репутация: 6
Начинающий

Отправлено 26 October 2012 - 02:27 PM

Какие? Magento это не вариант. Там проекты должны иметь огромный бюджет. Престашоп? - вроде не плохой согласен. ШопЦМС коробочный вариант и почти идеально подходит для установи и готов к работе.
  • 0

#8 Dbus

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

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 26 October 2012 - 02:30 PM

опенкарт например
  • 0
502 Bad Gateway

#9 partlist74

    Пользователь

  • Download User
  • PipPip
  • 26 сообщений
Репутация: 0
Начинающий
  • ГородЧе

Отправлено 26 October 2012 - 06:44 PM

а чем опенкарт принципиально лучше? дефолтные модули не самые актуальные, все вкусности всё равно за деньги.
  • 0

#10 NmDimas

    Пользователь

  • Download User
  • PipPip
  • 24 сообщений
Репутация: 6
Начинающий

Отправлено 26 October 2012 - 08:17 PM

Вопрос Кто сталкивался с тем что Картинки не уменьшает? При закачке ошибка типа страница не найдена но само интирестно то что картинка закачалась но не уменьшалась ну и в БД не записалось.
  • 0

#11 pavel77

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

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

Отправлено 27 October 2012 - 04:57 PM

Давно перевели сайт и БД на UTF-8 проблем не наблюдается


В вашем случае тогда нужно тоже пройтись поиском так как есть строчка в коде где была указана кодировка разработчиками цмс


Кстати а как вы автоматизировали пересохранение файла в utf-8 а то как то лень 1900 файлов вручную пересохранять



!!! если пекодировать все PHP файлы в utf-8 будет достаточно глюков, т.к. сам код написан с функциями не поддерживающимися в данной кодировке.

перекодируем только файлы с кирилическими символами. их не много.

да мы и так тут трупик терзаем... :)
смысл, есть же поприличнее движки, если много времени свободного.


По поводу движков по приличней.... А можно поподробнее? что встречали?

Доброго дня всем. Обновил я свой сервер до 5.4 и тут начались несуразные вещи.
Сразу что я увидел то что Русский текст не сохраняется в БД. То есть редактируем блоки , или создаем новости , сохраняет пустую строчку.
После того как вскрыл код. Нашел причину, это htmlspecialchars.
дело в том что в параметре encoding случилось изменение.

encoding
Определяет кодировку, используемую для преобразования. Если не указано, то кодировкой по умолчанию является ISO-8859-1 для PHP до версии 5.4.0, и UTF-8 начиная с версии 5.4.0.

Так как в ShopCMS дефолтная кодировка 1251 тут будет у нас конфликт а именно возвращаться пустая строчка.
Решение
в коде заменить
return htmlspecialchars($_Data, ENT_QUOTES);
на
return htmlspecialchars($_Data, ENT_QUOTES,  'cp1251');
Обязательно пройдите поиском по файлам с критерием return htmlspecialchars . так как строчек таких я точное количество не знаю но то что она не одна это точно.
Предлагаю отписываться о найденных конфликтов при переходе на новую версию ПХП, так как она рано или поздно станет везде дефолтная.


Еще нашел
в файле class.ajax.php 185 строчка
return htmlspecialchars($s);
я на всяк пожарный заменил тоже. Хотя если честно точно не знаю нужно ли его заменять.
return htmlspecialchars($s, 'ENT_COMPAT | ENT_HTML401', 'cp1251', );


а не проще заставить PHP обрабатывать файлы в требуемой кодировке ? ))
  • 0

#12 NmDimas

    Пользователь

  • Download User
  • PipPip
  • 24 сообщений
Репутация: 6
Начинающий

Отправлено 28 October 2012 - 04:48 PM

а не проще заставить PHP обрабатывать файлы в требуемой кодировке ? ))



Нет не проще . Так как по умолчанию у нас стоит ЮТФ-8 . А у каждого Хостинг провайдера свои правила на некоторых можно менять кодировку а на некоторых нет , что говорить если на некоторых требуют даже .htaccess файл изменить под их конфигурацию , на некоторых запрещают размещать в них конфиг на некоторых нет поддержки php.ini на некоторых надо писать Администраторам что бы они изменили конфиг.

Так что лучше раз изменить 3 строчки в коде, чем потом изменять конфиг хостинг, а если у вас как у меня, а именно что куча магазинов стоят на разных хостингах то это просто снимает очень много проблем.

Да и ваш метод попахивает быдлокодерством,

Да и забыл сказать что я в php.ini прописал дефолтную кодировку 1251 так не даст результат прежде всего что ЮТФ - 8 Прописано в самой функции htmlspecialchars
  • 0

#13 eugene_wb

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

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 10 March 2013 - 06:21 PM

также нужно убрать вызовы session_unregister , которые полностью убраны в php 5.4
http://php.net/manua...-unregister.php
  • 0
Изображение Изображение Изображение

#14 bum

    Пользователь

  • Пользователи
  • PipPip
  • 12 сообщений
Репутация: 2
Начинающий

Отправлено 06 May 2013 - 12:12 AM

Импорт тоже работает некорректно, импортирует с csv весь товар в ID1
  • 0

#15 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 06 May 2013 - 06:48 PM

Какие? Magento это не вариант. Там проекты должны иметь огромный бюджет

А вот кстати, интересно, откуда возникла эта мысль "проекты должны иметь огромный бюджет" по части Magento, она ж бесплатна? Я ей не занимаюсь, но попытки применить ее у нас в лавке были. Ажно "русское Magento" декодировал и ключ вечный делал. Не вижу ничего принципиально отличного от ShopCMS - тот же самый минимум-миниморум документации по нутру, т.е. все методом тыка, но куда больше пользовательской документации, чем по ShopCMS. И куда больше возможностей, которыми я тогда (только начиная) так и не проникся, перейдя на простенький ShopCMS, который меня именно этим и прельстил. А зря. Единственное серьезное требование, которое тащит за собой Magento - аппаратный ресурс. Нормально живет на двух гигах RAM, уменьшение до одного уже визульно заметно сказывается на быстродействии. Но и возможности не чета ShopCMS. Т.е. все здорово, но причем тут бюджет?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#16 micehide

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

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 06 May 2013 - 08:38 PM

Я также работаю с HostCMS, но там используется интерпритатор XSLT - это больше кода и нужно гораздо более внимательно его использовать, чем в случае со Smarty. Конечно есть и преимущества, но, честно говоря, мне лично XSLT не слишком нравится (не легло как-то на душу), к тому же сейчас плавно перехожу на PHP-фреймворки, где либо тот же Smarty, либо чистый PHP и смысла досконально изучать XSLT просто нету. Как система для магазина HostCMS, конечно хороша, однако возможны затыки, когда требуется что-то серьезно допилить (а ведь это для нас - основная деятельность).
  • 0

#17 Salp

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

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 11 May 2013 - 08:17 AM

также нужно убрать вызовы session_unregister , которые полностью убраны в php 5.4

это из-за них сыплятся варнинги?
WARNING: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively

  • 0

#18 eugene_wb

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

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 12 May 2013 - 12:46 PM

это из-за них сыплятся варнинги?

нет, варнинги сыпятся из-за попытки(или еще какой либо работы) с глобальными перемнными при выключенной опции register_globals 0
  • 0
Изображение Изображение Изображение

#19 Salp

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

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 12 May 2013 - 01:39 PM

eugene_wb, а как это исправить (желательно в самом коде).
  • 0

#20 eugene_wb

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

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 12 May 2013 - 01:43 PM

а как это исправить (желательно в самом коде).

читать логи и исправлять
  • 0
Изображение Изображение Изображение