今日公司遇到這個問題 , 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 以上才有用。
之前一直都是用 Dean's FCKEditor for wordpress
直到換了這套名字就叫 CKEditor for wordpress 感覺還不錯
http://wordpress.org/extend/plugins/ckeditor-for-wordpress/
我為何要換這套呢
因為最近我的爛網站加掛了WordPress Mobile Edition 這個 Plugin , 主要是為了讓手機的介面比較簡單 , 這個手機版外掛裝起來挺簡單的 , 我大概花了不到一分鐘就裝好了 , 在我的 Samsung S2 i9100 下看還正常 , 就是佈景醜了點 , 但有比沒有好
而 WordPress Mobile Edition 裝了之後 , 我發現原本回文用的文字編輯區無法在手機上使用 , 於是才換了 CKEditor for wordpress , 這套似乎會判別裝置 , 若是手機 , 會自動把所見即得關掉 , 就只能回正常的文字 , 而若是控制台內編輯文章 , 也是純文字 , 不過會有多出一些 HTML Tag 按鈕幫助編輯還不賴的 ^^
有興趣裝的朋友可以去裝看看 , 官方網站上有兩套同名的 , 我就是用我附上的網址的那套 , 這套評價似乎較高 , 個人沒比較過差異 , 至於之前可能有介紹到如何增加 style 搭配 WP-Codebox , 請看這篇 http://www.pigo.idv.tw/archives/415/
在這次安裝這個 CKEditor for wordpress , 修改方式也有變動
- 要進入後台 , 看左下角最下面有 CKEditor 的設定 , 先選 basic setting , 然後把 Post/Page editor options 的 toolbar 設定 Full , 這樣全部的功能就會打開
- 在 wordpress 目錄的 wp-content\plugins\ckeditor-for-wordpress 下, 直接開 ckeditor.styles.js , 可以自行增加 style , 就參照我之前貼的 http://www.pigo.idv.tw/archives/415/ , 自己意會修改一下就和原本一樣了
- 修改後 , 可能發現 CKEditor 沒有看見新增的變動 , 那是快取問題 , 就 …. 想辦法清快取吧 , 不然先用別的瀏覽器試試看有沒有變動查明原因
官網今天釋出了 PHP 5.4 Alpha 1
當中有介紹一些新特性
- Added: Traits language construct
- Added: Array dereferencing support
- Added: DTrace support
Traits 有點類似多重繼承可以把很多物件的某些功能合併 , 但其實又不是那樣 , 這個特性我不想多做介紹 , 因為我不喜歡 , 目前沒有 IDE 支援 , 要是寫起來都跑不出 auto complite 就很鳥了 哈哈
而 DTrace Support 我還不清楚是甚麼 , 但 Array deferencing support 我就挺喜歡了
舉個 sample code
1
2
3
4
5
| function test() {
return array('a','b','c');
}
echo test()[1]; // 這樣會印出 b |
這種語法 , C# 早就有了 , 是很方便的語法 , 不知道這樣特性會不會稍微減少記憶體用量就是了 , 希望有 , 有空再來試試看
網址 :
http://www.patternsforphp.org/doku.php?id=lazy_initialization
這不同於以往看到的 lazy loading 每次都要呼叫 __set 或 __get 來判斷是否有初始化的作法 , 這種做法只會呼叫一次 __set 或 __get , 我按照上述的作法寫了一段 code 來測試效能 , 在我的 I5 CPU 處理器上測得的效能差異有 5 倍之多
以下是範例程式 閱讀全文…
其實我是在下面網址看到
http://www.chazzuka.com/blog/?p=58
於是自己寫了段測試 , 發現超驚人的
輸出結果 , 效能竟相差20倍以上 , isset() 你真好用 , 以前都不知道你的好耶
0.000623
0.016440
前言
這篇是有人叫我分享的 , 順便測一下 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
閱讀全文…
很久沒有上官方網站看文件 , 今天晚上莫名其妙從官方網站看到一個叫 FPM 的東西
http://www.php.net/manual/en/install.fpm.php
按照上面的說法 , 不就是 FastCGI Process Manager 嗎 ?
怪了 , 原本 PHP 不就已經有支援 FastCGI 了 ?
仔細給他看一看 , 從 Google 上找一下 FPM 關鍵字後 …. 媽的 … 我的天 , 原來 FPM 這東西不得鳥 , 下面才是真正的 FPM 官方網站
http://php-fpm.org
原來 FPM 這東西可以解決 PHP FastCGI 甚至 mod_php 權限控管的不足
例如 , 可以 setuid , chroot , 這對於在一台主機中有多個 VirtualHost 中的權限控管非常有幫助
而且 FastCGI 跑的效能及記憶體用量都比 Apache + mod_php 好很多 , 現在 PHP 5.3.3 後會內建 FPM 這個功能
其他的特點也不錯 , 如自動控制行程數量 , 這點 lighttpd 就做的挺爛
想試的人可以去試試看了 … 因為今天 PHP 5.3.3 已經正式出來了
從 5 月份到 6 月份這段期間面試了好多個 PHP 程式設計師 , 包括也曾開職缺面試資訊主管
我都會問一個問題 , SQL Injection 怎麼防 ?
我說真的 , 大概面試了 10 來位 , 沒有一個人能夠脫口而出 , 不知道 SQL Injection 的程式設計師不會就算了 , 知道的人居然沒有一個人知道 PHP 原本就有功能可以過濾掉特殊字元 , 甚至還會回答用 str_replace 方法來過濾 , 所以我很想給看到這篇的人知道
如果你是用 mysql function , 那就是用 mysql_real_escape_string 去過濾
如果你是用 PDO , 就是用 bind value 作法
例如
1
2
3
4
5
| $sql = "SELECT * FROM users WHERE user_id=?";
$sth = $pdo->prepare($sql);
$sth->execute( array($user_id) ); |
其實我是已經受夠了 !! 不知道是台灣的書籍太爛 , 還是學校裡面老師教的太爛 , 這種最簡單的防止方式居然都沒人知道 ?
閱讀全文…
近期迴響