Вопрос

Я использую Symfony (1.2.9) с версией PHP 5.2.11 в Windows XP.

У меня установлен APC (версия 3.0.19)

Я могу запустить скрипт PHP, чтобы доказать, что apc работает правильно (работает). Однако, когда я пытаюсь использовать вызовы APC в действии Symfony, я получаю эту ошибку (в файле apache error.log):

[apc-error] Невозможно переопределить класс sfconfig

Который быстро сбивает Apache.

Я пытался использовать оболочку Symfony sfAPCCache, а затем напрямую вызывать функции apc_ * - результат тот же. Кто-нибудь знает, почему это происходит?

Это было полезно?

Другие советы

Сегодня эта ошибка произошла и со мной, и я узнал, почему это может произойти (среди других возможных причин).

APC правильно идентифицирует каждый класс по полному имени, которое включает пространство имен классов. К сожалению, вы можете ссылаться на один и тот же класс с разными именами.

Например:

Я неправильно использовал " оператор в моем коде, импортирующий класс без пространства имен, как если бы он был внутри пространства имен.

Класс, скажем "MyClass" находился в пространстве имен "\", что означает, что его правильное и полностью определенное имя было "\ MyClass".

В какой-то момент к классу обратилось его неквалифицированное имя «MyClass», и оно было загружено автоматически. В другом файле я (ошибочно) сослался на класс с префиксом пространства имен в выражении использования, скажем «use \ SomeNamespace \ MyClass;». Следовательно, класс был (снова) передан моему глобальному методу __autoload (), но с другим именем. Что еще хуже, метод автозагрузки был достаточно умен, чтобы найти класс в любом случае.

Мгновенно мой сценарий перестал работать, и все, что произошло, - это запись APC " [apc-error] Невозможно переопределить класс ... " в веб-сервер Apache error.log. Мои страницы больше не были доступны.

Это не ошибка APC, а просто правильное поведение.

В моем случае это помогло временно отключить APC (чтобы мой скрипт выполнялся независимо от конфликта) и подключить оператор echo к моей функции __autoload, создав список переданных параметров. Класс, загруженный с неправильным именем, будет обнаружен быстро, и я смогу это исправить и снова включить APC.

Надеюсь, это кому-нибудь поможет.

У меня была эта ошибка, прежде чем она не имела отношения к APC, и она всегда помогала не только запустить кеш: очистить, но также проверить и убедиться, что все файлы были удалены из каталога кеша.

Я жил в той же ситуации на моих окнах разработки система с php 5.2.11 и несколькими версиями apc. Так же Ситуация как описано, со stat = 0 все работает, но когда я устанавливаю stat = 1, apache падает с ошибкой " не может redeclare class [некоторый класс] " ;. Код работает на разные системы Windows, кроме этого, в загружен рабочий сервер linux на месяцы. Я уверен на 100% нет ошибок, связанных с APC. Это началось на моей машине после того, как я переустановил свою ОС.

Я провел некоторое время, комментируя некоторые классы и понял, что он работает с некоторыми включаемыми файлами, но не с конкретные. Я проверил мой код там не заметно Разница в классовых различий.

Затем я сохранил все мои включаемые файлы с добавлением некоторых дополнительные пробелы с редактором Zend Studio. Это выглядит глупо знаю но работает !!! Я работаю над проектом с несколькими людьми и используя SVN, и все используют различные текстовые редакторы, такие как notepad ++, editplus и т. д.

Однако я не смог воспроизвести ошибку, пытаясь сохранить файл с несколькими различными редакторами с различными настройками, такими как ansi, utf8 с / без упорядочивания байтовых меток и т. д. Но я уверен моя проблема связана с форматом файла (кодировка, режим pc / unix). Я хотел бы воспроизвести ошибку и хочу дать более подробную информацию, но я попробовал свое решение на другом проект с той же проблемой, он тоже работает.

Я надеюсь, что смогу дать другую точку зрения на проблему.

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

Например, я получил ошибку:
[apc-error] Невозможно переопределить класс someClass

В файле A у меня было следующее:
require_once '/path/to/someClass.php';

В файле B, который находится в том же каталоге, что и someClass.php, у меня было следующее:
require_once 'someClass.php';

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top