2017-08-31 79 views
1

我用nginx/php5.6安裝Centos7。 MS SQL 2008 R2正在另一臺服務器上工作。 MSSQL絕對允許TCP連接,自定義(非域)用戶,防火牆被禁用,我可以使用HeidiSQL連接到它並從另一臺Windows機器進行設置。 我可以從Centos遠程登錄到MSSQL(我看到日誌錯誤「網絡數據包有效載荷中指定的長度與讀取的字節數不匹配;連接已關閉,請與客戶端庫的供應商聯繫」。 MSSQL日誌,所以這裏沒有錯誤)。從Centos7到mssql的連接錯誤

我無法使用php_mssql或sqlcmd從centos連接到mssql;

在SQLCMD:

Microsoft (R) SQL Server Command Line Tool 
Version 13.1.0007.0 Linux 

[[email protected]***]# /opt/mssql-tools/bin/sqlcmd -S *** -U *** 
Password: 
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login timeout expired. 
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : TCP Provider: Timeout error [258]. . 
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Unable to complete login process due to delay in prelogin response. 

在PHP互動:

php > mssql_connect('***:***', '***','***'); 
PHP Warning: mssql_connect(): Unable to connect to server: *** in php shell code on line 1 

我也試過TSQL/freetds的:

/etc/freetds.conf has section 
[myserver] 
     host = *** 
     port = *** 
     client charset = UTF-8 
     tds version = 8.0 //also tried 7 

[[email protected]*]# tsql -S myserver -U *** 
Password: 
locale is "en_US.UTF-8" 
locale charset is "UTF-8" 
using default charset "UTF-8" 
5 //begins to count, i could't understand what does it mean 

還試圖清理這一切,並安裝php7.0與sqlsrv擴展 - 同樣的問題;

有一些網絡很奇怪 - Centos serv和MSSQL位於不同的網絡中,我無法從該服務器ping通mssql,但可以telnet,我在連接嘗試期間使用ip而不是主機名,所以不要認爲這是一個大問題。

現在我不知道該在哪裏挖掘,有什麼建議嗎?

+0

您是否嘗試過使用[PDO with dblib driver](http://php.net/manual/en/ref.pdo-dblib.php)?在使用php 5.6和MSSQL Server 2k8的debian上工作得很好... – Ayak973

+0

@ Ayak973謝謝你的想法,是的,同樣的錯誤。但是問題解決了,這是由於網絡配置錯誤造成的,我不明白它是如何實現的 - 建立telnet連接,但無法正常連接,但我們的IT人員在不到半個小時的時間內修復了這個問題。 – NiPh

回答

0

這是由於網絡配置錯誤導致的,我不明白怎麼可能 - 做telnet連接,但連接失敗,但我們的IT人員在不到半個小時的時間內修復了這個問題。