我可以在 Windows 和 Ubuntu24.04 上安装和使用 Microsoft 的 sqlsrv 和 sqlsrv_pdo 驱动程序包,但对于 MacOS 总是无法在运行时加载连接到驱动程序!甚至任何 php 屏幕错误日志记录都无法像启用的 php 文件中那样工作:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$serverName = '1nnnnn'; // Or your server name
$connectionOptions = array(
"Database" => 'Ifffffff', // Your database name
'Uid' => 'ddddddd',
'PWD' => 'passwoooord',
);
//echo "???"; // when this two commented lines are uncommented the site shows ???
//exit(); // when this two commented lines are uncommented the site shows ???
$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
die(print_r(sqlsrv_errors(), true));
}
echo "Connection successful!";
?>
XAMPP/Apache 适用于任何 php,但在调用 sqlsrv_connect 时,浏览器显示“无法打开”,并且 php_error_log 文件中的错误为:
dyld[8251]:断言失败:(this->magic == kMagic),函数loadAddress,文件Loader.cpp,第163行。
驱动程序文件位于正确的位置:
@MacBook-Pro-von-Ha---en no-debug-non-zts-20210902 % ls
opcache.so pdo_dblib.so pdo_sqlsrv.so pgsql.so sqlsrv.so
在 php.ini 文件中加载扩展名:
extension=sqlsrv.so
extension=pdo_sqlsrv.so
给出的正确访问权限:
-rwxr-xr-x@ 1 root admin 26720 6 Apr 2023 pdo_dblib.so
-rwxr-xr-x@ 1 root admin 333216 11 Sep 15:42 pdo_sqlsrv.so
-rwxr-xr-x@ 1 root admin 117680 6 Apr 2023 pgsql.so
-rwxr-xr-x@ 1 root admin 336880 11 Sep 17:14 sqlsrv.so
已安装 ODBC
g@MacBook-Pro-von-Ha---en no-debug-non-zts-20210902 % odbcinst -j
unixODBC 2.3.12
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /Users/hjbeling/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
问题解决了! 我终于按照微软推荐的方式安装了 php、sqlsrv 驱动程序和 apache:
[https://learn.microsoft.com/de-de/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver16#installing-on-macos]
第 4 步结束时很棘手:
echo "LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so" >> /usr/local/etc/httpd/httpd.conf
(echo "<FilesMatch .php$>"; echo "SetHandler application/x-httpd-php"; echo "</FilesMatch>";) >> /usr/local/etc/httpd/httpd.conf
如果我的格式不好,我很抱歉。也许 Safari 无法很好地处理编辑器代码设置,或者更确切地说,是我作为 stackoverflow 上的新海报做错了。
无论如何 libphp7.so 是错误的,httpd.conf 中正确的行是:
LoadModule php_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp.so
<FilesMatch .php$>
SetHandler application/x-httpd-php
</FilesMatch>