Intereting Posts
PHP: как обновить переменную родительского класса из дочернего класса Что более эффективно для отправки обновлений WebSocket с изменением базы данных MySQL preg_replace, чтобы изменить URL-адрес относительно абсолютного Gearman: до сих пор нет способа получить пользовательские данные от фонового работника? Условие PHP, если текущая страница, затем ссылка выделена Как я могу конвертировать две или более тире в синглы и удалять все тире в начале и конце строки? Как использовать Ajax и JSON для создания выпадающего меню? Плагин wordpress: запрос после ID в плагине? контроллер по умолчанию внутри подпапки codeigniter 3 не работает Остановить скрипт от выполнения более 5 секунд Как использовать Java с PHP 5 Модель аутентификации для приложения Android Удаление якорей из текста Трассировка, откуда приходит код (PHP) Simplexml_load_string ($ string) возвращает пустой объект, но $ string содержит xml? код ниже

Прерывистая ошибка абстрактного класса PHP

Я немного борюсь с этим и не могу понять, может быть, у кого-то есть или, может быть, здесь есть более глубокая проблема с Slim, PHP, Apache и т. Д. После работы всего несколько часов, моя установка Slim начнет давать это на всех маршрутах:

Неустранимая ошибка: Class Slim \ Collection содержит 1 абстрактный метод и поэтому должен быть объявлен абстрактным или реализовать оставшиеся методы (IteratorAggregate :: getIterator) в F: \ Projects \ example \ server \ vendor \ slim \ slim \ Slim \ Collection.php on строка 21

Как ни странно, этот вопрос уходит, если я перезапущу Apache. (В течение нескольких часов).

Я нашел это, когда у кого-то была аналогичная проблема два года назад, и тот, кто помогал им, без помощи вообще: https://community.apachefriends.org/viewtopic.php?p=250966&sid=96ef58aaeb7fe142a7dcdfd506a8683f

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

PHP версии 7.0.12, Windows 7, x86 PHP Build

Это произошло снова через несколько часов с другим, но похожим сообщением об ошибке:

Fatal error: Class Pimple \ Container содержит 1 абстрактный метод и поэтому должен быть объявлен абстрактным или реализовать оставшиеся методы (ArrayAccess :: sqlserver) в F: \ Projects \ example \ server \ vendor \ pimple \ pimple \ src \ Pimple \ Container. php в строке 34

Этот вопрос имеет схожую проблему и «решает» ее, перезагружая PHP, но это явно не является реальным решением, и у меня нет opcache: PHP 7, Symfony 3: Fatal error 1 abstract method и поэтому должен быть объявлен аннотация или реализовать оставшиеся методы

Какие-нибудь догадки? Помните: это сообщение в файлах, которые я не писал, и уходит на перезапуск Apache. Есть ли какое-то кэширование с PHP 7, которое может вызвать это?

Редактировать 3/10/17:

Да, я открыл билет с Slim. Я также видел это в не-тонком файле (Pimple), поэтому я не думаю, что это тонкая проблема. https://github.com/slimphp/Slim/issues/2160

Как я уже сказал, мой опкаш отключен. Я подтвердил, что это верно как в файле php.ini, так и в phpinfo ().

Я думаю, вы столкнулись с этой ошибкой opcache . Это не совсем то же самое, но, вероятно, связано.

После вызова функции opcache_reset () мы сталкиваемся с некоторыми странными ошибками. Это происходит случайным образом на серверах (10 из 400 серверов)

Некоторые буквы заменены другими, класс, кажется, уже объявлен .. и т. Д.

Пример ошибок, вызванных после opcache_reset ():

  • PHP Неустранимая ошибка: класс XXX содержит 1 абстрактный метод и поэтому должен быть объявлен абстрактным или реализовать оставшиеся методы (YYY :: funczzz) в /dir/dir/x.php в строке 20

Билет закрыт, потому что разработчикам не хватает информации для его воспроизведения. Если вы можете придумать самый маленький воспроизводимый случай, я рекомендую сообщить об этом . Создайте очень маленькое Slim-приложение, а затем используйте JMeter или другой инструмент, чтобы сделать много запросов. Опубликуйте свои выводы.

Между тем единственным обходным решением может быть отключить opcache в php.ini:

 opcache.enable=0 

Конечно, это резко повредит работе. Пока он не будет исправлен, вам придется выбирать между производительностью или периодическим перезапуском Apache.

Если отключение кеша не работает, единственной причиной, о которой я мог думать, является проблема с прерывистым компилятором. Кэшированная или не скомпилированная версия должна иметь ошибку. Открытие воспроизводимого билета с помощью PHP-разработчиков или отладка исходного кода PHP будет единственным способом продвижения, если это является причиной.

Если вы разрабатываете Windows, я бы рекомендовал вам НЕ использовать XAMPP или WAMPP и попробовать настоящий сервер разработки с использованием Linux на виртуальной машине.

Попробуйте установить Vagrant и Virtualbox, а затем перейдите на сайт puphpet.com, который может создать вам конфигурацию виртуальной машины. Разархивируйте загрузку, cd в папку, введите vagrant вверх. Затем просто укажите свой хост на виртуальной машине. Ставлю, если у вас есть реальная среда разработки, эта ошибка исчезнет. Другой вариант – Docker, но у него немного кривая обучения.

Проблема заключается не в вашем коде (или вашем коде поставщика), а в вашей платформе.

У меня была такая же проблема с использованием CodeIgniter и PHP 7.1.x.

Я обновился до PHP 7.2, и проблема больше не возникала.