Я ради эксперимента решил попробовать воспользоваться отладчиком и поотлаживать расширение к PHP.
Сделал всё по инструкции - сделал checkout из репозитория, установил инструменты. PHP успешно скомпилировался с отладочными символами, ошибок в процессе не было.
Но теперь у меня происходит очень странная вещь: при открытии в браузере скрипта, который обращается к БД через PDO, всё работает. Также на странице с выводом phpinfo() присутствует расширение pdo_mysql. То есть всё, как и нужно.
Но при попытке запустить этот же скрипт из командной строки я получаю ошибку о том, что расширение pdo_mysql.so не может быть загружено. И правда, его нет ни в одном каталоге из перечисленных.
Но откуда оно тогда берётся при работе скрипта в браузере (SAPI, PHP как модуль апача)?
Я догадываюсь, что это что-то связанное со статической и динамической линковкой, но я в этом ничего не понимаю от слова совсем. Объясните пожалуйста чайнику, как настроить всё правильно.
И да, связана ли моя проблема с тем, что я PHP с поддержкой отладки компилировал?
alex ~ php -c /etc/php/8.1/apache2/php.ini --ini
PHP Warning: PHP Startup: Unable to load dynamic library 'curl' (tried: /usr/lib/php/20210902/curl (/usr/lib/php/20210902/curl: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/curl.so (/usr/lib/php/20210902/curl.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'curl' (tried: /usr/lib/php/20210902/curl (/usr/lib/php/20210902/curl: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/curl.so (/usr/lib/php/20210902/curl.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'fileinfo' (tried: /usr/lib/php/20210902/fileinfo (/usr/lib/php/20210902/fileinfo: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/fileinfo.so (/usr/lib/php/20210902/fileinfo.so: undefined symbol: _emalloc_large)) in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'fileinfo' (tried: /usr/lib/php/20210902/fileinfo (/usr/lib/php/20210902/fileinfo: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/fileinfo.so (/usr/lib/php/20210902/fileinfo.so: undefined symbol: _emalloc_large)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'mbstring' (tried: /usr/lib/php/20210902/mbstring (/usr/lib/php/20210902/mbstring: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/mbstring.so (/usr/lib/php/20210902/mbstring.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'mbstring' (tried: /usr/lib/php/20210902/mbstring (/usr/lib/php/20210902/mbstring: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/mbstring.so (/usr/lib/php/20210902/mbstring.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20210902/mysqli (/usr/lib/php/20210902/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/mysqli.so (/usr/lib/php/20210902/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20210902/mysqli (/usr/lib/php/20210902/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/mysqli.so (/usr/lib/php/20210902/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20210902/pdo_mysql (/usr/lib/php/20210902/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/pdo_mysql.so (/usr/lib/php/20210902/pdo_mysql.so: undefined symbol: mysqlnd_get_client_info)) in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20210902/pdo_mysql (/usr/lib/php/20210902/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/pdo_mysql.so (/usr/lib/php/20210902/pdo_mysql.so: undefined symbol: mysqlnd_get_client_info)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20210902/pdo_sqlite (/usr/lib/php/20210902/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/pdo_sqlite.so (/usr/lib/php/20210902/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20210902/pdo_sqlite (/usr/lib/php/20210902/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/pdo_sqlite.so (/usr/lib/php/20210902/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Configuration File (php.ini) Path: /usr/local/lib
Loaded Configuration File: /etc/php/8.1/apache2/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
При чём я не понимаю, почему он ищет в /usr/lib/php/20210902, я явно указывал в php.ini другую папку для расширений, и он это игнорирует. Впрочем, проблема в том, что я этих модулей вообще ни в одной папке не вижу. Но под апачем он откуда-то их берёт
ThunderCat, я перепроверил - в этой папке есть файлы .so, но не все, которые у меня включены. Но он ругается на возможность загрузить даже те, которые там есть :(