在 CentOS 7 上通过 PHP 连接到远程 SQL 服务器
Connecting to remote SQL Server through PHP on CentOS 7
我已经遵循 this 解决方案来解决似乎完全相同的问题,但是我并没有像我希望的那样取得成功。
我为 PDO_ODBC、unixODBC 和 FreeTDS 包设置了所需的配置文件:
首先在/etc/freetds.conf
中指定主机:
[mssql]
host = DBHost
port = 1433
tds version = 7.3
然后通过在 /etc/odbcinst.ini
中指定 FreeTDS 驱动程序位置:
[freetds]
Description = Ms SQL database access with Free TDS
Driver64 = /usr/lib64/libtdsodbc.so.0
Setup64 = /usr/lib64/libtdsS.so.2
FileUsage = 1
UsageCount = 1
然后在/etc/odbc.ini
中指定DSN:
[mssql]
Description = mssql server
Driver = FreeTDS
Database = CET_PhonesDB
ServerName = mssql
TDS_Version = 7.3
最后是我的 PHP:
try {
$pdo = new PDO('odbc:mssql', 'dbuser', 'dbpass');
}
catch(Exception $e){
echo $e->getMessage();
}
哪个 returns: "SQLSTATE[08S01] SQLConnect: 20009 [unixODBC][FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist".
我已经尝试使用 $tsql -S mssql -U dbuser -P dbpass
(测试 FreeTDS)和 $isql mssql dbuser dbpass
(测试 unixODBC)进行故障排除,两者都连接成功。这让我相信问题出在 PDO_ODBC 或 PHP 配置中的其他东西。非常感谢任何帮助:)
我遇到了同样的问题,并通过使用自定义端口解决了它:port = XXXXX in freetds.conf。此端口应在 SQL Server Configuration Mgnt 中配置
SQL 服务器网络配置 -> TCP/IP(已启用) -> IP 地址 -> IPAll -> TCP 动态端口
https://msdn.microsoft.com/en-us/library/ms177440.aspx
因此,我通过命令行 运行 连接我的 PHP 脚本,将问题缩小到 Apache 服务器:$php /var/www/html/repo/index.php
并成功建立了连接。
一位同事建议 SELinux 可能会干扰 httpd,果然 运行ning $setenforce 0
允许我的 PHP 正确地 运行 通过网络请求它们浏览器。
由于永久禁用 SELinux 是一个非常糟糕 的想法,我做了一些摆弄和挖掘,感谢 this 手册我发现 $sudo setsebool -P httpd_can_network_connect 1
允许 Apache 运行 的脚本创建它们自己的网络连接。现在 SELinux 应该让 httpd 执行的任何 PHP 脚本创建网络连接。
我已经遵循 this 解决方案来解决似乎完全相同的问题,但是我并没有像我希望的那样取得成功。 我为 PDO_ODBC、unixODBC 和 FreeTDS 包设置了所需的配置文件:
首先在
/etc/freetds.conf
中指定主机:[mssql] host = DBHost port = 1433 tds version = 7.3
然后通过在
/etc/odbcinst.ini
中指定 FreeTDS 驱动程序位置:[freetds] Description = Ms SQL database access with Free TDS Driver64 = /usr/lib64/libtdsodbc.so.0 Setup64 = /usr/lib64/libtdsS.so.2 FileUsage = 1 UsageCount = 1
然后在
/etc/odbc.ini
中指定DSN:[mssql] Description = mssql server Driver = FreeTDS Database = CET_PhonesDB ServerName = mssql TDS_Version = 7.3
最后是我的 PHP:
try {
$pdo = new PDO('odbc:mssql', 'dbuser', 'dbpass');
}
catch(Exception $e){
echo $e->getMessage();
}
哪个 returns: "SQLSTATE[08S01] SQLConnect: 20009 [unixODBC][FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist".
我已经尝试使用 $tsql -S mssql -U dbuser -P dbpass
(测试 FreeTDS)和 $isql mssql dbuser dbpass
(测试 unixODBC)进行故障排除,两者都连接成功。这让我相信问题出在 PDO_ODBC 或 PHP 配置中的其他东西。非常感谢任何帮助:)
我遇到了同样的问题,并通过使用自定义端口解决了它:port = XXXXX in freetds.conf。此端口应在 SQL Server Configuration Mgnt 中配置 SQL 服务器网络配置 -> TCP/IP(已启用) -> IP 地址 -> IPAll -> TCP 动态端口 https://msdn.microsoft.com/en-us/library/ms177440.aspx
因此,我通过命令行 运行 连接我的 PHP 脚本,将问题缩小到 Apache 服务器:$php /var/www/html/repo/index.php
并成功建立了连接。
一位同事建议 SELinux 可能会干扰 httpd,果然 运行ning $setenforce 0
允许我的 PHP 正确地 运行 通过网络请求它们浏览器。
由于永久禁用 SELinux 是一个非常糟糕 的想法,我做了一些摆弄和挖掘,感谢 this 手册我发现 $sudo setsebool -P httpd_can_network_connect 1
允许 Apache 运行 的脚本创建它们自己的网络连接。现在 SELinux 应该让 httpd 执行的任何 PHP 脚本创建网络连接。