Модуль php Swoole: неопределенный символ: spl_ce_Countable проблема

Я пытаюсь установить swoole на мою машину

первый:

pecl install swoole

Тогда мне нужен модуль PHP

cd swoole         
phpize             
./configure        
make               
sudo make install  

Сценарий создает файл swoole.so в моей папке, поэтому я добавляю его в свой php.ini:

extension=/usr/lib/php/20151012/swoole.so

Когда я пробую php -v, я получаю:

Предупреждение PHP: Запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib/php/20151012/swoole.so' (пробовал: /usr/lib/php/20151012/swoole.so (/usr/lib/php/20151012/swoole.so: неопределенный символ: spl_ce_Countable), /usr/lib/php/20170718//usr/lib/php/20151012/swoole.so.so (/ usr / lib / php / 20170718 // usr / lib / php / 20151012 / swoole.so.so: невозможно открыть общий объектный файл: такого файла или каталога нет)) в "Неизвестно" в строке 0 PHP 7.2.13-1+ubuntu16.04.1+deb.sury.org+1 (cli) (встроенный: 7 декабря 2018 08:07:08) ( NTS) Copyright (c) 1997-2018 PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies с Zend OPcache v7.2.13-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, Zend Technologies с Xdebug v2.6.1, Copyright (c) 2002-2018, Дерик Ретанс

Что это за ошибка: неопределенный символ: spl_ce_Countable?

Большое спасибо.

3 ответа

Решение

На моей машине было установлено несколько версий php. Но в версии 7.2 не было файла php-config.

sudo apt-get install php7.2-dev

это решило мою проблему

Благодаря @ Альваро Гонсалес

В большинстве случаев такая ошибка возникает, когда вы пытаетесь загрузить расширение, которое зависит от других расширений, которые либо еще не загружены, либо не включены. Поэтому рекомендуется загружать его через phpenmod. Некоторые дистрибутивы Linux, такие как Debian или Ubuntu, используют PHP mods-availableдля загрузки расширений PHP.

Вы можете создать файл вручную для имени расширения, например openswoole.iniв следующем каталоге /etc/php/<PHP_VERSION>/mods-availableсо следующими данными

      ; Configuration for Open Swoole
; priority=30
extension=openswoole

Или вы можете запустить команды ниже, не забудьте изменить <PHP_VERSION>к вашей версии php

      sudo bash -c "cat > /etc/php/<PHP_VERSION>/mods-available/openswoole.ini << EOF
; Configuration for Open Swoole
; priority=30
extension=openswoole
EOF"


sudo phpenmod -s cli openswoole


php -m | grep openswoole

У меня была такая же проблема, поэтому, пожалуйста, прочитайте внимательно.

Если модули php загружаются из папки, доступной модам, не добавляйтеextension=swoole.soвручную в php.ini, вместо этого вам нужно добавитьswoole.iniфайл в папку, доступную модам PHP.

      ;configuration for php common module
;priority=20
extension=swoole.so

и включите его с помощьюsudo phpenmod swoole

Что произойдет, если вы вручную добавите Extension=swoole.so в php.ini, он подключится раньше всех необходимых расширений. Например, если вы добавили --enable-sockets и т. д. для установки swoole, а расширение swoole загружается до расширения сокетов, произойдет сбой, поэтому после того, как я удалил расширение=swoole.so из php.ini, добавил файл swoole.ini в php. папку, доступную для модов, и включил ее с помощью sudo phpenmod swoole, swoole работает правильно.

Скопировано с: https://github.com/swoole/swoole-src/issues/3952#issuecomment-782765934 .

Другие вопросы по тегам