Мне нужно работать над 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?