Невозможно загрузить расширение 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/