Ошибка Компиляции Кода - Не Удается Повторно Объявить Класс


Итак, после некоторой болезненной отладки (и включения scream в xdebug) я смог обнаружить, что некоторые страницы возвращают фатальную ошибку (например, каталог/продукт/галерея/идентификатор/155/изображение/202/) где Magento, похоже, дважды включает один и тот же класс. Я еще не понял, что происходит, так как я еще не слишком хорошо знаком с внутренними компонентами компиляции

Но я обнаружил, что удаление определенного класса в каталоге включает/src/__.php просто вызывает разные классы, чтобы иметь ошибку, и удаление всего этого файла устраняет проблему (но я теряю весь этот скомпилированный код).

Я попытался перекомпилировать код, но мне не удалось решить эту проблему.

Я предпочитаю оставлять компиляцию кода включенной, потому что с точки зрения ввода-вывода это действительно немного повышает производительность.

Наверное, я не уверен, почему класс включается дважды? Я предполагаю, что в автозагрузчике есть какая-то логика, которая не обнаруживает, что класс уже загружено, когда он пытается загрузить его снова? Хотя, похоже, у него нет проблем на других страницах.

Greping для существующих классов показывает:

$ grep -irn mage_catalog_block_breadcrumbs .
./app/code/core/Mage/Catalog/Block/Breadcrumbs.php:34:class Mage_Catalog_Block_Breadcrumbs extends Mage_Core_Block_Template
./app/code/core/Mage/Catalog/Block/Breadcrumbs.php:51:     * @return Mage_Catalog_Block_Breadcrumbs
./app/code/core/Mage/Compiler/etc/compilation.xml:231:            <Mage_Catalog_Block_Breadcrumbs/>
./includes/src/Mage_Catalog_Block_Breadcrumbs.php:34:class Mage_Catalog_Block_Breadcrumbs extends Mage_Core_Block_Template
./includes/src/Mage_Catalog_Block_Breadcrumbs.php:51:     * @return Mage_Catalog_Block_Breadcrumbs
./includes/src/__catalog.php:35:class Mage_Catalog_Block_Breadcrumbs extends Mage_Core_Block_Template
./includes/src/__catalog.php:52:     * @return Mage_Catalog_Block_Breadcrumbs

Ошибка:

PHP Fatal error:  Cannot redeclare class Mage_Catalog_Block_Breadcrumb in /var/www/vhosts/site/gitrepo/pti/magento/includes/src/__catalog.php on line 238
Jul 12 07:03:29  httpd: PHP Stack trace:
Jul 12 07:03:29  httpd: PHP   1. {main}() /var/www/vhosts/site/gitrepo/pti/magento/index.php:0
Jul 12 07:03:29  httpd: PHP   2. Mage::run() /var/www/vhosts/site/gitrepo/pti/magento/index.php:90
Jul 12 07:03:29  httpd: PHP   3. Mage_Core_Model_App->run() /var/www/vhosts/site/gitrepo/pti/magento/app/Mage.php:683
Jul 12 07:03:29  httpd: PHP   4. Mage_Core_Controller_Varien_Front->dispatch() /var/www/vhosts/site/gitrepo/pti/magento/includes/src/__default.php:20061
Jul 12 07:03:29  httpd: PHP   5. Mage_Core_Controller_Varien_Router_Standard->match() /var/www/vhosts/site/gitrepo/pti/magento/includes/src/__default.php:17484
Jul 12 07:03:29  httpd: PHP   6. Mage_Core_Controller_Varien_Action->dispatch() /var/www/vhosts/site/gitrepo/pti/magento/includes/src/__default.php:17927
Jul 12 07:03:29  httpd: PHP   7. Mage_Core_Controller_Front_Action->preDispatch() /var/www/vhosts/site/gitrepo/pti/magento/includes/src/__default.php:13571
Jul 12 07:03:29  httpd: PHP   8. Mage_Core_Controller_Varien_Action->preDispatch() /var/www/vhosts/site/gitrepo/pti/magento/includes/src/__default.php:14324
Jul 12 07:03:29  httpd: PHP   9. Varien_Autoload::registerScope() /var/www/vhosts/site/gitrepo/pti/magento/includes/src/__default.php:13689
Author: 7ochem, 2013-07-12

1 answers

Magento не очищает кэши при включении компиляции. Если вы не очистите кэш, Magento все равно запомнит, где должны быть файлы, но это противоречит скомпилированной версии.

Так что очистите все кэши (magento, apc, memcached, что еще у вас есть), это должно решить эту проблему.

 5
Author: TimVroom, 2013-07-12 12:46:50