Модуль 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 .