直到几天前,这一点一直在起作用.我们正在使用以下代码构建一个停靠器容器,但这是在try "PECL INSTALL SQLSRV"时发生的错误.正在try 从此容器中的PHP连接到MSSQL服务器.有比我更聪明的人有什么 idea 吗?

杜克文件:

FROM  --platform=linux/amd64 php:8.0-fpm

RUN apt-get update && apt-get -y install nano apt-utils libxml2-dev gnupg \
    && apt-get install -y zlib1g-dev \
    && apt-get install -y libzip-dev \
    && docker-php-ext-install zip 

RUN apt-get -y install libicu-dev gcc g++ make autoconf libc-dev pkg-config libssl-dev apt-transport-https libgss3 

# Install MS ODBC Driver for SQL Server
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
    && curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \
    && apt-get update

# Automatically accept the terms from Microsoft
RUN apt-get install -y unixodbc unixodbc-dev odbcinst locales
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17
RUN apt-get -y install gcc g++ make autoconf libc-dev pkg-config
RUN apt-get update 
RUN pecl install sqlsrv
RUN pecl install pdo_sqlsrv
RUN docker-php-ext-enable sqlsrv pdo_sqlsrv

错误:

#0 41.16 In file included from /usr/include/sql.h:19,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/xplat.h:30,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/typedefs_for_linux.h:23,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/xplat_winnls.h:24,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/FormattedPrint.h:24,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/core_sqlsrv.h:41,
#0 41.16                  from /tmp/pear/temp/sqlsrv/php_sqlsrv_int.h:25,
#0 41.16                  from /tmp/pear/temp/sqlsrv/conn.cpp:24:
#0 41.16 /usr/include/sqltypes.h:56:10: fatal error: unixodbc.h: No such file or directory
#0 41.16    56 | #include "unixodbc.h"
#0 41.16       |          ^~~~~~~~~~~~
#0 41.16 compilation terminated.
#0 41.18 make: *** [Makefile:209: conn.lo] Error 1
#0 41.19 ERROR: `make' failed

我已经try 了从7.0到8.1的所有版本的PHP,有没有带FPM的都有.我还try 了msodbcsql和unixodbc/unixodbc-dev的几个版本,以及sqlsrv和pdo_sqlsrv的几个版本.

推荐答案

驱动器为5.10.0或5.10.1的Debian 10和11会出现此问题

使用驱动程序5.9.0和Debian 10,PHP 7.4,但repo Microsoft Debian 9.它起作用了!

在Debian 10中,php 8.1将存储库从Debian 10更改为Debian 9.它将创建Docker脚本,我还没有测试它是否会连接到数据库,我相信是的.

变化 https://packages.microsoft.com/config/debian/10/prod.list个 至 https://packages.microsoft.com/config/debian/9/prod.list

Php相关问答推荐

将变体设置字段添加到WooCommerce中的特定变量产品

使用列入黑名单的单词和自定义业务逻辑的组合将特定的子字符串包装在HTML标记中

将客户重定向到自定义感谢页后的空白页

在Laravel中从动态嵌套数组中获取值

在WordPress中从CPT中删除插件

允许客户定义特定WooCommerce产品的价格

如何使用定制的StateProvider设置JsonLd@上下文?

如何使用 PHP 创建简化的 twig 替换?

启用 WooCommerce 我的帐户付款方式,允许客户添加付款方式

根据页面以及是否在促销,向 WooCommerce 中显示的价格添加前缀

根据小计向 WooCommerce Checkout 添加佣金

通过ajax发送数据到下拉列表未完全设置为所选

在 mysql 上的 PDO 中启用自动提交并将自动提交设置为关闭

PHP 在数组中搜索值

如何通过帖子自定义元数据进行查询

防止使用woocommerce_checkout_process下单

Shopware 6.4.20店铺激活问题

如何在 Laravel 中修改嵌套数组的键?

Laravel 测试 assertJsonMissing 不适用于唯一的键.为什么?

Laravel 响应 html 默认页面忽略控制器