Невозможно загрузить расширение pdo_sqlite.so

Я пытаюсь установить pdo-sqlite ext для Cli.

Я пытался бежать sudo apt-get install php5-sqlite и он говорит, что ext уже в курсе, но когда я бегу php -m это не появляется в списке.

В моей /usr/lib/php/ папке у меня есть 2 папки с именами 20131226 и 20160303. Последняя (20160303) содержит pdo_sqlite.so, но когда я пытаюсь добавить это в файл php.ini, я получаю ошибку

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/pdo_sqlite.so' - /usr/lib/php/20160303/pdo_sqlite.so: undefined symbol: zend_fetch_resource2_ex in Unknown on line 0

Я использую Ubuntu 14.04 и PHP 5.6.

Кто-нибудь может помочь с этой проблемой? Также кто-нибудь может объяснить, почему расширения php хранятся в этих разных пронумерованных папках и как php знает, в какую из них искать? Благодарю.

6 ответов

Решение

У вас есть (по крайней мере, часть) две разные версии php, и они конфликтуют. Возможно, вы захотите очистить версию, которую вы не используете, чтобы избежать дальнейших проблем. Возможно, будет проще просто стереть оба, а затем переустановить тот, который вы хотите. Также убедитесь, что ваш php.ini имеет свои extension_dir установка, указывающая на правильный каталог для версии, которую вы храните.

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

Я считаю, что 20131226 для PHP версии 5.6 и 20160303 для PHP версии 7.

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

Насколько я выяснил, в неисправном файле /usr/local/lib называется libsqlite3.so.0 что указывает на libsqlite3.so.0.8.6, Я переименовал файл на тот случай, если он был нужен для чего-то. С помощью команды:

cd /usr/local/lib

sudo mv libsqlite3.so.0 ./libsqlite3.so.0.back

Но вы также можете удалить его:rm libsqlite3.so.0

Тема, которая приводит меня к ответу: ссылка

Это решило мои проблемы, и я надеюсь, что они решат и ваши:)

Я попытался удалить библиотеку, как упоминалось в предыдущих комментариях, и это работало в течение короткого времени, затем проблема возникла снова, поэтому я сделал следующее, когда я удалил библиотеку при выполнении ldd /usr/lib/php/20190902/pdo_sqlite. Оказалось:

libsqlite3.so.0 => lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007fd35803b000)

и эта ссылка указывает в том же каталоге наlibsqlite3.so.0.8.6

поэтому замените ссылку в /usr/local/lib, чтобы она указывала на эту библиотеку следующим образом

sudo ln -sf /lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 /usr/local/lib/libsqlite3.so.0

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

Вы можете попробовать установить php версии 5:

sudo apt install php5-sqlite3

или для другой версии:

PHP 7.1

sudo apt install php7.1-sqlite3

PHP 7.2

sudo apt install php7.2-sqlite3

PHP 7.3

sudo apt install php7.3-sqlite3

и другая версия по вашему желанию....

Кажется, это один из немногих хитов SO на PHP Startup: Unable to load dynamic library 'pdo_sqlite'. В моем случае я фактически не использую sqlite, но тем не менее вижу эту ошибку в своих журналах Apache.

Проблема оказалась в CGI-скрипте, который устанавливал LD_LIBRARY_PATH(по несвязанной причине) перед вызовом PHP. Это каким-то образом испортило PHP, возможно, заставив его искать в указанном LD_LIBRARY_PATH вместо системных путей. Отключение LD_LIBRARY_PATH перед вызовом PHP устранило проблему.

У меня было то же самое, для меня проблема была в /etc/php/7.2/apache2/php.ini, outcomment был удален, поэтому pdo_sqlite был загружен (или пытался) оттуда.

Модули теперь загружаются из /etc/php/7.2/apache2/conf.d/

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