看板 PHP 關於我們 聯絡資訊
原文恕刪 我有嘗試灌了 debian 8 的 VM 並實作出所有功能 以下是我做的努力 分享看看 環境: debian 8 with debian gnome desktop and ssh server wget 1.16 php 7.2 sql server : 在另一台電腦用 docker microsoft/mssql-server-linux 為 sql server 2017 版本 針對一些關鍵環節: (1) : 在執行這一行的時候遇到問題 : wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg : 系統回復 : wget: not an http or ftp url: https://packages.sury.org/php/apt.gpg 我使用 wget 時看了一下版本為 1.16 比原po 推文說明的 1.18 版本要舊 推測 wget https 失敗是因為少灌了憑證的套件 ca-certificates 參考這篇: http://tinyurl.com/yc4u3uuu (2) php 灌 sql server 驅動 sqlsrv 使用 php-pear 的 pecl 安裝,需要相依套件為 php-pear php7.2-dev unixodbc-dev 這裡最重要的是找到合適的套件庫 原po使用的 https://packages.sury.org/php/ 已足夠 同時參考原po 推文中的連結安裝 http://tinyurl.com/yce2xf5r (3) 安裝 ms 的 odbc driver 參考 http://tinyurl.com/yan5dnyx 使用微軟提供的套件庫 https://packages.microsoft.com/config/debian/8/prod.list 在 linux debian 8 安裝 msodbcsql17 (4) php 程式使用 PDO 注意 dns 即可,附上官網說明 http://php.net/manual/ru/ref.pdo-sqlsrv.connection.php 操作步驟: sudo apt-get install curl apt-transport-https lsb-release ca-certificates sudo wget -O /etc/apt/trusted.gpg.d/php.gpg \ https://packages.sury.org/php/apt.gpg sudo echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | \ sudo tee /etc/apt/sources.list.d/php.list sudo apt-get update sudo apt-get install php-pear php7.2 php7.2-dev sudo apt-get install unixodbc-dev sudo pecl install sqlsrv pdo_sqlsrv 若權限不夠 直接開vim 寫入就好或是使用root sudo su echo -e "; priority=20\nextension=pdo_sqlsrv.so" > \ /etc/php/7.2/mods-available/pdo_sqlsrv.ini echo -e "; priority=20\nextension=sqlsrv.so" > \ /etc/php/7.2/mods-available/sqlsrv.ini exit sudo phpenmod sqlsrv pdo_sqlsrv sudo su curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/debian/8/prod.list > \ /etc/apt/sources.list.d/mssql-release.list exit sudo apt-get update sudo ACCEPT_EULA=Y apt-get install msodbcsql17 之後再使用 php -m 或是 <?php phpinfo();?> 驗證使否有安裝成功就好,有出現 sqlsrv、pdo_sqlsrv 就ok 連線測試程式 <?php try { $username = 'SA'; $password = '<your_sa_password>'; $dsn = "sqlsrv:Server=ip,1433;Database=testdb"; $pdo = new PDO($dsn, $username, $password); foreach($pdo->query('select @@version') as $result) { var_dump($result); } $pdo = null; } catch (PDOException $e) { echo $e->getMessage(); } 結果: https://imgur.com/LVUBJJp ------------------------------------------------------------- 後記: 同樣的站台之前有在 centOS 上完成安裝,步驟差異很多卻簡單不少 因為我使用remi軟體庫 而這只有在 rpm 的體系才有支持 架站灌軟體回到原點最痛苦的就是 : 相依套件與軟體灌不完全的問題 微軟如果沒有提供可以在linux上跑的driver與軟體庫,真的沒轍 而這案例有提供相關的軟體庫與套件,多方比對官方網站跟google的訊息 加上自己的經驗完成的,我不認為在linux 上跑 MS 的東西是爆坑 只是有沒有可靠的套件庫與 MS 的 sql server目前對linux支持到什麼程度而已 我不會在正式環境或是專案用linux 跑 sql server 但是使用linux 架站 php 裝上sql server 的驅動是我覺得值得嘗試的功能 非常有趣也討論看看 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.168.11 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1534644573.A.1C1.html
hiigara: 推一個 08/19 10:24
※ 編輯: ri3567 (118.168.168.11), 08/19/2018 10:29:03
shadowjohn: 嗯,只有會跟不會這二件事,哪來的爆坑XD 08/20 08:55
pttrAin: 其實就後來修文講的…sqlsrv沒有32位元版本 '_` 08/22 23:35
pttrAin: 我模糊的記憶中似乎有看到討論能不能把64位元的sqlsrv 08/22 23:36
pttrAin: 裝到32位元的debian,但暫時沒時間去嘗試就是 orz 08/22 23:37
pttrAin: 然後我用的方法有遇到一個問題,讀不到型別為char的中文字 08/22 23:38
pttrAin: 坑爆就是找不到資料可以照著做就搞定 08/22 23:39
pttrAin: 當然我對linux熟悉度不夠也是問題就是 '_>` 08/22 23:40
pttrAin: mosquitto with websocket跟php連sqlserver這兩件事情 08/22 23:43
pttrAin: 我參考的頁面至少五十個以上,綜合其中一些做法才成功 08/22 23:43
pttrAin: 不過我是有硬體韌體的限制,不然坑可能也不會這麼大 ~_~ 08/22 23:45
pttrAin: ca-certificates <- 有裝過,在我的case是沒效 08/22 23:46