“无法加载动态库'pdo_sqlsrv.so'”“ Cenos7 PHP7.2.10

时间:2018-10-08 15:13:45

标签: php linux

我忽略了这个问题Linux - PHP 7.0 and MSSQL (Microsoft SQL)

我确信MS确实在此页面中告诉我要做的事情 installing-the-drivers-on-red-hat-7 但是,当输入“ php -v”时,我会提示错误:

  

PHP警告:PHP启动:无法加载动态库   'pdo_sqlsrv.so'(尝试:/usr/lib64/php/modules/pdo_sqlsrv.so   (/usr/lib64/php/modules/pdo_sqlsrv.so:未定义符号:   php_pdo_register_driver),/ usr / lib64 / php / modules / pdo_sqlsrv.so.so   (/usr/lib64/php/modules/pdo_sqlsrv.so.so:无法打开共享对象   文件:没有这样的文件或目录)),位于第0行的未知

     

PHP 7.2.10   (CLI)(内置:2018年9月15日07:10:58)(NTS)版权所有(c)1997-2018   PHP Group Zend Engine v3.2.0,版权所有(c)1998-2018 Zend   技术领域       Zend OPcache v7.2.10,版权所有(c)1999-2018,由Zend提供   技术

我从不修改php.ini,

  

[user @ tssvr php.d] $ pwd

     

/etc/php.d

     

[user @ tssvr php.d] $ ls

     

20-sqlsrv.ini ctype.ini fileinfo.ini gmp.ini mbstring.ini pdo.ini shmop.ini tokenizer.ini xmlwriter.ini   30-pdo_sqlsrv.ini curl.ini ftp.ini iconv.ini mysqli.ini pdo_mysql.ini simplexml.ini xml.ini xsl.ini   bz2.ini dom.ini gd.ini intl.ini opcache-default.blacklist pdo_sqlite.ini sockets.ini xmlreader.ini zip.ini   calendar.ini exif.ini gettext.ini json.ini opcache.ini phar.ini sqlite3.ini xml_wddx.ini

     

[user @ tssvr php.d] $ cat 20-sqlsrv.ini

     

extension = sqlsrv.so

     

[user @ tssvr php.d] $ cat 30-pdo_sqlsrv.ini

     

extension = pdo_sqlsrv.so

看来sqlsrv.so很好,但是pho_sqlsrv.so不能正常工作,尽管我注意到出现了两个'so':'pdo_sqlsrv.so.so', 有人可以帮我解决这个问题吗,非常感谢。

3 个答案:

答案 0 :(得分:1)

加载模块的正确顺序是:

extension=pdo.so
extension=pdo_sqlsrv.so
extension=sqlsrv.so

可以将它们放入一个.ini文件中,也可以使用编号的.ini文件。

按字母顺序(默认)加载它们将无效。

答案 1 :(得分:0)

我在 Ubuntu 18.04 和 20.xx 上遇到了同样的问题。我终于让它在 Ubuntu 18.04 上运行了,并且很确定这也可以在 20.xx 上运行。

这适用于 PHP 7.1,因此如果您不使用 7.4 或 8.0,则必须在 pecl 中指定版本。

pecl install sqlsrv-5.7.0preview
pecl install pdo_sqlsrv-5.7.0preview
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.1/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.1/mods-available/pdo_sqlsrv.ini
phpenmod -v 7.1 sqlsrv pdo_sqlsrv
service apache2 restart

让一切正常工作的技巧是 printf 和 phpenmod 命令。您还需要将扩展​​名添加到 php.ini 文件中。不确定顺序是否真的很重要,但驱动程序似乎没有使用 pecl 安装程序正确安装。

重新启动 apache 后,我现在可以看到 php.ini 中列出了 pdo_sqlsrv,我的 php 应用程序可以连接到本地 Microsoft SQL 服务器。

顺便说一句,我在 Windows 的 WSL2 上进行了这项工作。

答案 2 :(得分:-1)

输入终端linux centos 7:

  1. php --ini
  2. find /etc/php.d/20-pdo.ini
  3. 编辑文件并附加extension=sqlsrv.so extension=pdo_sqlsrv.so

注意:在extension extension=sqlsrv.so , extension=pdo_sqlsrv.so中评论/etc/php.ini

  1. 重新启动系统
  2. php -m-您会看到已加载的模块