首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Linux 環境下 PHP 連線 SQL Server 完整部署指南

     編輯:關於SqlServer

企業常面臨跨平台整合需求:既有 SQL Server 資料庫運行於 Windows,但 Web 應用部署於 Linux/PHP 架構。本文詳細記錄基於 FreeTDS 實現 Linux PHP 連接 SQL Server 的完整編譯安裝與配置流程,解決 ODBC 驅動缺失的核心難題。

核心架構

PHP → FreeTDS (TDS 協議實作) → SQL Server (TDS 7.0/8.0 協議)

FreeTDS 是開源的 Tabular Data Stream (TDS) 協議庫,使 Linux/Unix 能原生使用 TDS 協議與 SQL Server、Sybase 通訊。

軟體版本與來源

  • FreeTDS: freetds-0.53.tgz (來源: ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/)
  • PHP: 4.x/5.x 源碼包(需重新編譯加入 Sybase 模組支援)

分步部署流程

1. 編譯安裝 FreeTDS(關鍵:指定 TDS 7.0 版本)

cd /tmp
tar zxvf freetds-0.53.tgz
cd freetds-0.53
./configure --prefix=/usr/local/freetds --with-tdsver=7.0
make
make install

關鍵參數:--with-tdsver=7.0 強制使用 TDS 7.0 協議(對應 SQL Server 7.0/2000,預設埠 1433)。若省略將預設編譯為 TDS 5.0(埠 4000),導致連線失敗。

2. 重新編譯 PHP 加入 Sybase/FreeTDS 支援

cd php-source-directory
./configure --with-apxs --with-mysql ... --with-sybase=/usr/local/freetds
make
make install

注意:--with-sybase 指向 FreeTDS 安裝路徑,而非 --with-mssql(舊版 PHP 以 Sybase 模組支援 FreeTDS)。

3. 配置 FreeTDS 連線定義

編輯 /usr/local/freetds/etc/freetds.conf:

[sqlserver]
    host = 192.168.1.100  # SQL Server IP 或主機名
    port = 1433
    tds version = 7.0

支援 Windows 域帳號或 SQL Server 混合模式認證,詳見配置檔說明。

4. 啟用 PHP MSSQL 擴展

編輯 php.ini,取消註解:

extension=mssql70.so

5. PHP 連線測試腳本

<?php
$link = mssql_connect("sqlserver", "username", "password")
    or die("無法連線資料庫: " . mssql_get_last_message());
echo "連線成功,Link ID: $link";
?>

此處 "sqlserver" 對應 freetds.conf 中的區塊名 [sqlserver]。

6. 疑難排查:啟用詳細日誌

編輯 freetds.conf,取消註解:

dump file = /tmp/freetds.log

重新執行測試腳本,分析 /tmp/freetds.log 定位協議握手、認證、字碼頁轉換等階段的錯誤細節。

已知限制與對策

  • 中文支援:早期 FreeTDS/PHP MSSQL 擴展對 UTF-8/Big5 支援有限。建議資料庫欄位使用 NVARCHAR,PHP 端用 iconv() 或 mb_convert_encoding() 明確轉碼。
  • PHP 版本:PHP 5.3+ 建議改用 Microsoft 官方 sqlsrv 或 PDO_SQLSRV 驅動(需安裝 ODBC Driver for Linux),效能與穩定性優於 FreeTDS 方案。
  • 防火牆/SELinux:確保 Linux 允許輸出 1433 埠,SQL Server 允許遠端連線且防火牆開放 1433 埠入站。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved