Предупреждение Laravel Homestead PHP: запуск PHP: невозможно загрузить динамическую библиотеку sqlsrv.so и pdo_sqlsrv.so

Мне нужно работать над Symfony v4.2, который подключается к внешней базе данных MS SQL Server. Ошибка, которую я получаю:

Попытка вызвать функцию sqlsrv_configure из глобального пространства имен.

Я знаю, что об этом уже есть сообщения, но ни один из них не посвящен Laravel Homestead, который работает на Ubuntu 20.04.2.

Я использую Homestead v12.3.1, Settler v11.3.0.

До сих пор я понял, что должен установить расширения sqlsrv и pdo_sqlsrv.

Я только что сделал это. В данном случае, с учетом того, что в Laravel Homestead есть несколько версий PHP, которые можно переключать:

$ sudo update-alternatives --config php:

There are 7 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
  0            /usr/bin/php8.0   80        auto mode
  1            /usr/bin/php5.6   56        manual mode
* 2            /usr/bin/php7.0   70        manual mode
  3            /usr/bin/php7.1   71        manual mode
  4            /usr/bin/php7.2   72        manual mode
  5            /usr/bin/php7.3   73        manual mode
  6            /usr/bin/php7.4   74        manual mode
  7            /usr/bin/php8.0   80        manual mode

Как видите, сейчас я использую 7.0... на самом деле это может быть любой.

Что я сделал для установки расширений, так это выполнил следующие команды:

$ sudo apt-get install unixodbc-dev Справочник

И следующее, согласно эта другая ссылка:

$ sudo pecl install sqlsrv

$ sudo pecl install pdo_sqlsrv

И выход был:

Build process completed successfully
Installing '/usr/lib/php/20200930/sqlsrv.so'
install ok: channel://pecl.php.net/sqlsrv-5.9.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=sqlsrv.so" to php.ini


Build process completed successfully
Installing '/usr/lib/php/20200930/pdo_sqlsrv.so'
install ok: channel://pecl.php.net/pdo_sqlsrv-5.9.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=pdo_sqlsrv.so" to php.ini

Верно

$ ls -lah /usr/lib/php/20200930/

Эти sqlsrv.ini и pdo_sqlsrv.ini существуют.

Но затем, когда я искал эти недавно установленные расширения

$ php -m | grep sqlsrv

$ php -m | grep pdo_sqlsrv

результат был пустой.

Затем я перезапустил службу php-fpm следующим образом:

$ sudo systemctl restart php7.0-fpm

$ php -m

Но я получил эти предупреждения:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/pdo_sqlsrv.so' - /usr/lib/php/20200930/pdo_sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/sqlsrv.so' - /usr/lib/php/20200930/sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/pdo_sqlsrv.so' - /usr/lib/php/20200930/pdo_sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0

Затем я изменил каталог на

$ cd /etc/php/7.0/mods-available

и $ ls -lah

и отредактировал оба

sqlsrv.ini

; priority=20
extension=/usr/lib/php/20200930/sqlsrv.so

pdo_sqlsrv.ini

; priority=30
extension=/usr/lib/php/20200930/pdo_sqlsrv.so

файлы.

И я получаю ту же ошибку.

Более того, даже если я изменю файлы на:

sqlsrv.ini

; priority=20
extension=sqlsrv.so

pdo_sqlsrv.ini

; priority=30
extension=pdo_sqlsrv.so

Теперь я получаю немного другую ошибку в каталоге:

$ php -m

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/pdo_sqlsrv.so' - /usr/lib/php/20151012/pdo_sqlsrv.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 '/usr/lib/php/20151012/sqlsrv.so' - /usr/lib/php/20151012/sqlsrv.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 '/usr/lib/php/20151012/pdo_sqlsrv.so' - /usr/lib/php/20151012/pdo_sqlsrv.so: cannot open shared object file: No such file or directory in Unknown on line 0

Похоже, он просто не может загрузить библиотеки :(

Согласно этот ответ

$ find / -name 'sqlsrv' 2>&1 | grep -v 'Permission denied'

возвращает ( ссылка на команду ):

/usr/share/php/docs/sqlsrv
/var/lib/php/modules/7.1/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.1/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.1/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.1/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.4/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.4/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.4/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.4/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.3/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.3/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.3/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.3/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.0/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.0/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.0/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.0/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/5.6/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/5.6/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/5.6/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/5.6/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.2/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.2/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.2/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.2/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/8.0/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/8.0/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/8.0/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/8.0/phpdbg/enabled_by_admin/sqlsrv

$ find / -name 'sqlsrv.so' 2>&1 | grep -v 'Permission denied'

/usr/lib/php/20200930/sqlsrv.so

$ find / -name 'pdo_sqlsrv.so' 2>&1 | grep -v 'Permission denied'

/usr/lib/php/20200930/pdo_sqlsrv.so

Еще одна попытка, которую я сделал, была в соответствии с и еще одним ответом, где я выполнил:

$ pear config-set php_ini /etc/php/7.0/fpm/php.ini

И я получил:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/pdo_sqlsrv.so' - /usr/lib/php/20200930/pdo_sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/sqlsrv.so' - /usr/lib/php/20200930/sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/pdo_sqlsrv.so' - /usr/lib/php/20200930/pdo_sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
config-set succeeded

Но я все еще получаю те же предупреждения.

Вот небольшое объяснение и там, но я не понимаю :(

Что еще мне нужно сделать, чтобы PHP загрузил эти расширения sqlsrv.so и pdo_slqsrv.so здесь, в Laravel Homestead?

Есть ли другие альтернативы, где я могу использовать приложение Symfony 4.2 с включенным расширением sqlsrv? Может виртуальная машина? Любые идеи? Может ли кто-нибудь пролить свет на то, чтобы это приложение Symfony 4.2 было запущено и работало и могло подключаться к MS SQL Server 2017?


person Pathros    schedule 04.08.2021    source источник