今日公司遇到這個問題 , Client 端網頁為 UTF-8 編碼, 採用 Linux+PHP 架構想連接 MS SQL Server 2008 , 結果遇上亂碼問題 , 過去曾有解決過這個問題,但時隔多日早就忘了 , Try 過甚麼 php.ini 的 mssql.charset 設定都沒用。
回家後定下心來,回想過去怎麼作的,順便找找資料。當然終於被我找到了,大部分的解決方式是修改 /etc/freetds.conf 設定檔不然就用 iconv 函數自己寫一堆程式來轉編碼 >< …,但時隔這麼多年,PHP 沒有在 Linux 上對 MSSQL 支援有長進,仍然是要改設定檔嗎 ? 看來是的,真是雪特,除了Win32 環境有微軟提供的 php native driver 外,Linux 上真的沒辦法了。
但我靈光忽現,我直接跑到 FreeTDS 官網看文件,終於讓我找到關鍵的ㄧ個環境變數。
這個環境變數名叫 FREETDSCONF ,這個環境變數的用意就是讓人可以指定設定檔的路徑,這麼一來,我們就不需要有管理者權限,只要自行編輯一個設定檔並且利用 PHP 的 putenv() 函數即可讓 freetds 動態載入設定檔了。接著說明作法如下 :
假設我們的程式放在 /home/pigo 好了,我們編寫一隻 test.php 及編寫自己的 freetds 設定檔叫 test.conf , 那麼 PHP 程式碼是這麼下的 :
<?php
$conf_path = dirname(__FILE__) . "/test.conf"; // 定義FreeTDS設定檔的真實路徑
putenv("FREETDSCONF=$conf_path"); // 這行才是關鍵 , 設定環境變數
$server = "192.168.0.100"; // 這是假設的 SQL Server 的 IP
$link = mssql_connect($server, 'sa', '1234');
if(false === $link) die("connect error");
if(false === mssql_select_db("mytestdb" , $link)) die("select db error");
$rows = mssql_query("SELECT * FROM mytable");
$row = mssql_fetch_array($rows);
var_dump($row); // 把結果印出來看看 , 應該就是 UTF-8 的中文了
?> |
然後 test.conf 一樣放在同一個目錄 , 內容如下
[global]
tds version = 8.0
text size = 64512
client charset = UTF-8 |
這樣就好了 , 簡單了吧 , 根本不需要有管理員的權限用程式就可以解決了。
後記 :
此方式只在 CentOS 5.6 試過 , 而官方的 freetds 是 0.64 , 版本太舊不適用 , 因此要額外使用 yum 以 epel 提供的 freetds 的版本升級至 0.91 以上才有用。
SL Linux 是 RHEL 6.0 的翻版 , 所以核心是 2.6.32 , 因此這個版本本身就俱備 TProxy 的功能可以做 socket 的通透代理 , 意思就是說 , 在做 Proxy 時 , 傳遞給目標主機時 , 仍然會把來源真實 IP 帶過去 , 目標主機得到的不會是 Proxy Server 的 IP .
好了 , 廢話不說 , 下圖是一個實驗性的 Web Loading Balance 簡單配置架構 , 我將以此架構來做 Haproxy 通透代理

閱讀全文…
RHEL 6.0 出了好一陣子了 , CentOS 才剛出 5.6 … 進度很慢 , 其實 CentOS 5.6 並沒有多大的改變 , 反而最近用了 SL Linux 6.0 , 我發覺真是個好物 , 怎說 ?
SL Linux 其實也是 RHEL 的 clone , 另外有一套是 Oracle 出的就是叫 Oracle Linux , 當然我對 Oracle 不是很感興趣 , 所以就沒去玩 , SL Linux 和 CentOS 一樣也是 Free Download , 原本公司為了作 haproxy + TProxy , 遷就於 Kernel 版本要至少 2.6.28 則先採用了 Ubuntu Server 10 , 但是穩定性不佳 , 這裡所指的穩定性是指 CPU Loading 很低 , 但 haproxy 吞吐量很不穩 , 忽快忽慢的 , 一時也無法由 log 中查出原因
直到我換成 SL Linux 6.0 (RHEL 6.0 clone) 之後 , 速度跟飛的一樣 , 我都沒有自行編譯 haproxy , 而採用 epel 內建的 , 然後試著跑 haproxy + TProxy 超級順的 , 由於慣用 CentOS 久了 , 使用起 SL Linux , 完全沒有上手的問題 , 且我測試過在 Proxmox VE 下開一個 SL Linux 的 KVM 出來 , 沒發現過有 KVM 的錯誤訊息 , 而 ubuntu 或 centos 5.5 則偶爾會出現
蠻好的 , 希望大家也試試看 , 互相交流一下使用心得
CentOS 5.6 終於出來啦 ! 目前看義守大學上的 ftp 尚未 mirror 好 , 但依照以下 mail list 網址的說明還是可以下載到
http://lists.centos.org/pipermail/centos-announce/2011-April/017282.html
這次改版有很多不一樣的 , 和我們這行最有關的就是 PHP 的部分多出了個 php53 的套件 , 以往要自己安裝 PHP 5.3 要使用非官方版本 , 現在則有官方版本 , 可喜可賀了
相關的 Release Note 請參考
http://wiki.centos.org/Manuals/ReleaseNotes/CentOS5.6
最近看見 MariaDb 出了 5.2.3 的版本
這個版本已經是 Stable 版了 , 相容 MySQL 5.1 , 大概說一下這一版的特色
-
MariaDb 一開始就以 XTraDb 取代InnoDb Engine , 相容於 InnoDb , 但效能更好 , 在 phpMyAdmin 中建立一個 InnoDB 就等於是 XtraDb 了
-
以 Aria Table 取代 MyISAM 為預設 Table (原本的 MyISAM 也可以用) , 若原始資料仍是 MyISAM , 但在很多情況下 MySQL 會開啟 tmp table , 這時候會用 Aria , 效能會比原本的 MySQL 更佳
-
內建 SphinxSE , 所以就不用自己去 patch mysql 就可以搭配 Sphinx 讓 MySQL 具備強大的中文全文搜尋功能了
-
可以無痛升級 , 目錄完全相容mysql , 各種工具也完全和 mysql 一樣
網站上提供了各種版本 , 包括 CentOS , Win32 , 我的 CentOS Linux 在升級時是下載 CentOS 版的 RPM
先將舊版的 MySql 停掉 , 備份整個 MySQL Data 目錄 , 然後用 yum 去移除 mysql-server 等相關套件
接著 , 用 rpm 安裝之後大概就沒問題了 , 這中間 , 會有一些套件衝突 , 例如 php-mysql , 當遇到衝突時 , 用 yum 去移除 , 然後再用 rpm 安裝 mariadb 的 rpm , 最後再用 yum 去安裝之前發生衝突的套件 , 過程中沒發現甚麼問題
現在這個網站也運做了約一星期 , 狀況良好
OpenVPN Bridge 橋接模式下最大的優點也是最大的缺點就是 VPN 用戶的電腦可以看到遠端 VPN Server 同一網段的網芳 ~
這為何說是缺點呢 ??? 因為在 Bridge 模式中 , Client 與 Server 等於是同一網段 , 不管甚麼封包都會互通有無 , 尤其是 NetBios 封包 , 試想 ~ 若遠端的辦公室有 20 台電腦 … 大家都在搶網芳的 Master Browser 主控權 , 這樣封包一直廣播 , 自然對 VPN 頻寬消耗更多 , 因此最好還是阻擋 NetBios 廣播的封包
閱讀全文…
前言
話說專案控管軟體在軟體開發上常常配合著版本控管一起使用 , 如 Python 寫 Trac ,Ruby 寫的 Redmine 等都有 SVN 檔案庫瀏覽的功能 , 有玩過 SVN 的人應該會知道 SVN 可以搭配 Apache 一起使用 , 其實就我感覺最惱人的便是 SVN 上的使用者管理 , 之前我都是呆呆的用 htpasswd 建立密碼檔 , 但這有個問題 , 就是 SVN 的使用者要改密碼就必須透過我來改 , 當然了 , 也有現成的 Web Interface 軟體可以裝來針對 htpasswd 修改密碼 , 不過這對系統的複雜度就增加了
今天偶然想起 Apache 有 mod_auth_mysql 可以用 , 既然 Apache 可以使用 mysql 來做身分確認 , 那麼若把 mod_auth_mysql 參數設定成可以存取 Redmin 原本的使用者資料 , 那這樣任何參與專案開發的人就可直接上 Redmine 改密碼就好了 , 而且也可以做到對該使用者停權 , 都可以透過 Redmine 上的用戶管理介面來做 , 這樣可以簡化系統複雜度 , 也讓管理變得輕鬆 , 所以本篇就來好好介紹一下 mod_auth_mysql 的用法 .
閱讀全文…
前言
這篇是有人叫我分享的 , 順便測一下 php-fpm 和 Apache 搭配起來的效能及穩定度 , 由於 php-fpm 是自帶的 FastCGI Process Manager , 所以和原本的 php fastcgi 有所不同 , php-fpm 若要搭配 Apache 只能以 mod_fastcgi 來運作 , 原本 Apache 有開發 mod_fcgid , 但 mod_fcgid 本身算是個 FastCGI Process Manager , 只能執行本地端 FastCGI , 而 php-fpm 可以用 Unix Socket 或 TCP 模式讓任何具備執行外部 FastCGI 程序的 WebServer 連接 , 因此 lighttpd 或 Ngix 等都可以 , 唯獨世上次爛的 Apache 要外掛 mod_fastcgi , 最爛的當然是 IIS 了 , 哈 …
運作環境
- CentOS 5.5 64bit 及內建的 Apache 2.2 套件
- PHP 5.3.3 , 此版本有內建 php-fpm 了 , 過去的版本皆須 patch 才有 php-fpm
- 硬體 : Core I5 4 核心的 , RAM 2GB
閱讀全文…
近期迴響