LINUX.ORG.RU

Opencart 2.0 Event ошибка

 ,


0

1

Поставил opencart 2.0.0.0 .Однако при запуске выдает эту ошибку :

PHP Fatal error:  Cannot redeclare class Event in /var/www/sh/data/www/sh/system/engine/event.php on line 3

php -v
PHP 5.4.34-0+deb7u1 (cli) (built: Oct 20 2014 08:50:30) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

Подскажите как фиксануть?

★★★★★
Ответ на: комментарий от pinachet

Для навороченного магазина, как это ни печально, лучше всего что-нибудь самописное.

heilkitty ★★
()

У тебя путь правильно написан? В «/var/www/sh/data/www/sh/» два раза должно быть «www/sh»?

shrub ★★★★★
()
Ответ на: комментарий от shrub

У тебя путь правильно написан? В «/var/www/sh/data/www/sh/» два раза должно быть «www/sh»?

Я настоящий путь , заменил , там просто название сайта фигирирует ) . какие аналоги и т.д и тп

pinachet ★★★★★
() автор топика

Проблема в том что из какого-то файла уже подгрузился class Event. У тебя чистый OpenCart, или с чем-то интегрится?

bitfroster ★★
()
Ответ на: комментарий от bitfroster

Да я до этого делал через find+ exec

cat * | grep -r 'class Event'
cat: admin: Это каталог
cat: catalog: Это каталог
cat: image: Это каталог
cat: system: Это каталог
system/engine/event.php:class Event {

pinachet ★★★★★
() автор топика
14 января 2016 г.
Ответ на: комментарий от pinachet

Я археолог конечно, но ошибка актуальна и решения здесь нет, так что, для информации. Подобная хрень возникает из-за установленного в php расширения libevent. Этим расширением класс Event определен на уровне ядра, соответственно опенкартовское определение идет лесом. Нормальные люди вообще-то неймспейсы юзают, но не в случае опенкарта :))) Ну и решение, изменение в 4-х строчках кода. Переназвать опенкартовский Event в файле system/engine/event.php (путь не помню точно), в определении класса EventOC, например. В индексах (общем и админском) переопределить передачу Event регистру (написать вместо new Event - new EventOC) Ну и вроде как некритично, но на всякий случай в классе Event в одном из методов есть вызов с параметрами, где передается Event строкой, изменить на EventOC Собственно, все :)))

anonymous
()
Ответ на: комментарий от anonymous

Угу у меня этот модуль и стоит . Да опенкарт да и вообще большинство пхп как то не радует качеством кода (((

Но спасибо за совет.должно помочь

pinachet ★★★★★
() автор топика

http://php.net/manual/en/class.event.php

Пекловый же. В глобальном неймспейсе. Скорее всего у тебя либо в пыхе сразу есть этот класс, либо хостер впилил этот пекл. Почему либо либо, потому что та же проблема у меня, помню, случилась с классом HttpRequest из говнолегаси проекта, после апгрейда пхп оно отвалилось.

Решение — перепиливать с неймспейсами, типа:

namespace Opencart;
class Event { ...
// и вызывать где-то там
$evt = new Opencart\Event();
Или переобозвать класс на «OpencartEvent» оставив его в глобальном неймспейсе.

deep-purple ★★★★★
()

такое бывает когда не используется для загрузки классов spl_autoload и вместо этого делают где ни попадя include[_once]

anonymous
()
Ответ на: комментарий от anonymous

делают где ни попадя include

Это не первичная причина. Так и так будет конфликт имен классов не вложенных в неймспейс. А если ты в своем автолоаде запилишь инклюд_онц, то пользовательский класс Event не будет подгружен, и вместо него ты получишь экземпляр того системного класса Event, и при попытке дернуть метод «своего» класса, получишь UB.

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.