Невозможно загрузить "pdo_sqlite" - PullRequest
0 голосов
/ 01 марта 2020

Я работаю над сайтом, который должен взаимодействовать с базой данных SQLite. Это мой первый проект, использующий PHP, и я сталкиваюсь с некоторыми проблемами. Пока у меня есть:

config. php:

...
$connection = new SQLiteConnection();
$connection->connect();

И в SQLiteConnection , $connection->connect() делает в значительной степени следующее:

try {
    $rootDir = $_SERVER["DOCUMENT_ROOT"];
    $this->pdo = new PDO("sqlite:".$rootDir.self::DATABASE_PATH);
    $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Exception: '".$e->getMessage()."' at line ".$e->getLine();
}

Однако каждый раз, когда я запускаю config.php, я получаю следующую ошибку:

Исключение: «не удалось найти драйвер» в строке 22 * ​​1018 *

Это строка, где я инициализирую PDO.


Я испробовал множество решений:

  • Очистка и переустановка php-common, php-sqlite3, и другие
  • Раскомментирование этих строк в моем файле php.ini (в /etc/php/7.2/cli):
extension=pdo_sqlite
extension=sqlite3
  • Раскомментирование и установка каталога расширений в том же php.ini файле:
sqlite3.extension_dir = "ext"
  • Перезапуск службы apache2 (sudo service apache2 restart)

При запуске php -m я получаю модули в списке, но с предупреждением:

$ php -m
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.so: undefined symbol: php_pdo_unregister_driver)) in Unknown on line 0
PHP Warning:  Module 'sqlite3' already loaded in Unknown on line 0
[PHP Modules]
...
PDO
pdo_sqlite
...
sqlite3
...

Но когда я просматриваю содержимое каталога, эти файлы, кажется, присутствуют:

$ ls -al /usr/lib/php/20170718
total 6372
drwxr-xr-x 2 root root    4096 Mar  1 11:40 .
drwxr-xr-x 4 root root    4096 Mar  1 11:38 ..
...
-rw-r--r-- 1 root root  113048 Feb 11 15:55 pdo.so
-rw-r--r-- 1 root root   31096 Feb 11 15:55 pdo_sqlite.so
...
-rw-r--r-- 1 root root   52648 Feb 11 15:55 sqlite3.so
...

Когда я смотрю в его родительский каталог, я вижу:

$ ls -al /usr/lib/php/
total 40
drwxr-xr-x   4 root root 4096 Mar  1 11:38 .
drwxr-xr-x 144 root root 4096 Mar  1 11:38 ..
drwxr-xr-x   2 root root 4096 Mar  1 11:40 20170718
drwxr-xr-x   3 root root 4096 Mar  1 11:38 7.2
-rw-r--r--   1 root root 4845 Jan 17  2018 php-helper
-rw-r--r--   1 root root 9534 Jan 17  2018 php-maintscript-helper
-rwxr-xr-x   1 root root 2922 Jan 17  2018 sessionclean
* 1 057 * Может ли быть проблема из-за присутствия 20170718 и 7.2 (я не совсем уверен в разнице)? В каталоге 7.2 нет файлов .so.

1 Ответ

0 голосов
/ 01 марта 2020

При перезагрузке компьютера (и, следовательно, используемой мной среды IDE IntelliJ) я получил другую ошибку при запуске файла config.php - мне нужно было установить php-cgi.

Я так и сделал и больше не получает исключение при запуске config.php. Я полагаю, что я уже решил эту проблему, и для ее применения потребовался перезапуск IDE .


Второй проблемой, которая все еще оставалась, было предупреждение:

PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.so: undefined symbol: php_pdo_unregister_driver)) in Unknown on line 0
PHP Warning:  Module 'sqlite3' already loaded in Unknown on line 0

И я решил это, используя ответ здесь :

Это означает, что в одном из ваших * есть расширение = ... или строка zend_extension = ... 1024 * конфигурационных файла (php .ini или другого, близкого к нему), который пытается загрузить это расширение.

Пытаясь найти решение ранее, я раскомментировал несколько строк в php.ini файл. Простое комментирование их назад решило проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...