通过CentOS 7上的PHP连接到远程SQL Server
我跟着this解决了什么似乎是完全相同的问题,但是我没有像我期望的那么多的成功。在/etc/freetds.conf
通过CentOS 7上的PHP连接到远程SQL Server
-
首先由specifiying主机: 我设立了PDO_ODBC,unixODBC数据所需的配置文件和freetds的包
[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();
}
返回:“SQLSTATE [08S01]的SQLConnect:20009 [unixODBC数据] [freetds的] [SQL服务器]无法连接:Adaptive Server的不可用或不存在“。
我试过使用$tsql -S mssql -U dbuser -P dbpass
(测试FreeTDS)和$isql mssql dbuser dbpass
(哪个测试unixODBC)进行故障排除,它们都成功连接。这导致我相信问题出在PDO_ODBC或PHP配置中的其他东西。任何帮助非常感谢:)
所以我缩小到Apache的问题服务器,通过运行我的PHP脚本通过命令行:$php /var/www/html/repo/index.php
并且连接成功完成。
一位同事建议SELinux可能会干扰httpd,并且确保运行$setenforce 0
允许我的PHP在通过Web浏览器请求时正常运行。
由于禁用了SELinux permenantly是非常糟糕想法,我做了一些摆弄和挖掘,并感谢this手册我发现$sudo setsebool -P httpd_can_network_connect 1
允许的运行Apache创建自己的网络连接的脚本。现在SELinux应该让任何由httpd执行的PHP脚本创建网络连接。
我有同样的问题,并通过使用freetds.conf中使用自定义端口:端口= XXXXX解决它。此端口应在SQL Server配置MGNT SQL Server网络配置进行配置 - > TCP/IP(启用) - > IP地址 - > IPAll - > TCP动态端口 https://msdn.microsoft.com/en-us/library/ms177440.aspx