Archive

‘PHP’ 分類過的Archive

Apache + mod_fastcgi + php-fpm 設定

2010年7月28日 pigo 尚無評論

前言

這篇是有人叫我分享的 , 順便測一下 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

閱讀全文…

Categories: Linux, PHP Tags:

PHP FPM ?

2010年7月22日 pigo 尚無評論

很久沒有上官方網站看文件 , 今天晚上莫名其妙從官方網站看到一個叫 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 已經正式出來了

Categories: PHP Tags:

我很納悶…怎麼一堆 PHP 程式設計師不知道要怎麼防 SQL Injection

2010年6月22日 pigo 18 則評論

從 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) );

其實我是已經受夠了 !! 不知道是台灣的書籍太爛 , 還是學校裡面老師教的太爛 , 這種最簡單的防止方式居然都沒人知道 ?

閱讀全文…

Categories: MySQL, PHP Tags:

實作多日 , 一個簡單的 Comet Chat Demo

2010年4月5日 pigo 4 則評論

網址 : http://testcode.pigo.idv.tw/NetServ/CxClient/demo/simplechat/

非常簡單的 chat , 沒有用到任何資料庫及檔案讀寫 , 完全透過 Comet Exchange Server 作資料交換 , 完全即時聊天

Script Language 採用 PHP , Comet Exchange Server 採用 C# 開發

改天我弄好一點會放出完整的 Source Code

原先我是要先做 Comet Http Server 的 , 但我現在先做了 Comet Exchange Server (簡稱 CxServer)

CxServer 主要構想是可以讓 HTTP Server CGI 之間可以做資料交換 , CGI 部分任何語言都可以開發 , 如 php , asp.net 等 , 然後 CGI 和 Browser 在不斷線的情況下接收其它 CGI 傳遞的資料並且將資料再傳遞給 Browser , 在應用方面就可以玩很多即時性的  , 如即時聊天 , 即時 web game , 即時股票看盤 , 即時監控系統等等都可以利用這種資料交換特性而實作出來

而在系統相容方面 , 由於採用 C# 開發 , 所以只要有 .NET 環境即可 , 我目前的 DEMO 連同 CxServer 都是跑在 Linux OpenVZ 下的虛擬 CentOS 及 mono 的平台 , 所以沒有所謂移植性問題 , 唯一的相容性問題就是 ,  CxServer 的封包協定中由於有有些欄位是 Int16 或 Int32 , 這在編碼成封包的時候會按照硬體(CPU)而有所謂 little endian 或 big endlian , 如果 CxServer 及 CxClient 是不同類型的 CPU 可能會發生問題而已

當然後續我會繼續實驗封裝好通訊協定及 API , 目前只先開發 PHP 版的 CxClient API , 想說再過一些日子我完全實作好封包協定好 , 才會開始進行其它語言的 CxClient API

Categories: Mono C# VB, PHP Tags:

介紹 Netbeans 執行 PHPUnit (單元測試)

2010年2月20日 pigo 尚無評論

前言

Netbeans 6.8 出來之後 , 我覺得已經非常好用了 , 尤其在程式碼的自動完成的方面已經改成和 Zend Studio 一樣 , 不需要按甚麼 ALT+J 了 , 而且 Netbeans 的反應速度就是比 Zend Studio 來的快 , 現在我也都改用 Netbeans 了 , 而本篇是稍微介紹一下如何用 Netbeans 來執行 PHP 的單元測試

PHPUnit 介紹

PHPUnit 其實是個 PHP 寫成的 Framework , 主要功能就是自動對我們所寫的PHP程式做輸入輸出的檢查

程式寫久的人應該都知道動一髮牽全身的道理 , 我自己也常常更動了某個物件的程式碼之後 , 結果很多相關連的物件或網頁就跟著就出錯了 , 但我們不可能每次更動程式之後 , 就去用瀏覽器慢慢的測試可能發生的狀況 , 人的記憶有限 , 誰會知道這個物件有那些網頁會用到 , 也因此我們需要一個方便的工具來幫我們自動測試 , 而 PHPUnit 就可以讓我們自行撰寫測試的條件 , 當我們所寫的測試條件隨著時間累積的越多時 , 就可以避免一定程度的錯誤發生了

閱讀全文…

Categories: PHP Tags: ,

PHP libevent vs stream_select 性能測試

2010年1月12日 pigo 尚無評論

PHP 下要做 Socket 多工目前只有 select 或用超慢的 fork 方式 , 但學過 Socket Programing 的人都知道 select 在大量連線下的效能會很差 , 而在很早之前我曾在 PECL  看見有個 event 的 extension 是利用 Kernel 來處理 I/O 事件 , 舉凡 File , Socket 都可, 當時那套 event extension 是利用 Linux epoll 或 FreeBSD kqueue 的 Kernel API 直接幹的 , 現在則有另一套 libevent 的 extension 出現在 PECL 上 , 這個 extension 就是用同名 C  寫的 libevent 去實做 , libevent 也是會用到 epoll 及 kqueue 但提供了一組函數介面讓程式設計師不用去管 OS  是什就可以設計出高效能的多工程式 , 因此我特地抓下來玩一玩 , 並且寫了簡單的性能測試

由於 PHP libevent 需要搭配C 的 libevent 1.4 以上版本 , 所以並非每個 Linux 套件都有 , 例如我的 CentOS 的 libevent 版本就比較舊 , 因此要自行編譯 , 以下就說明 CentOS 5.4 下成功編譯 PHP libevent 的步驟

閱讀全文…

Categories: PHP Tags:

新版 FCKEditor for wordpress

2009年10月27日 pigo 尚無評論

之前曾經介紹一篇如何修改 FCKEditor 搭配 WP-Codebox 

http://www.pigo.idv.tw/archives/161

現在 Dean’s FCKEditor for WordPress plugin 已經不是使用 FCKEditor , 而是用新名稱的 CKEditor 下去改的 ' "

這一版的變動很大 , 因此之前所介紹的如何修改 Style 的方式也不同 , 不過仍是很簡單 , 花了我一些時間而已

首先先安裝好新版的 plugin 之後 , 去這個 plugin 下找 ckeditor/plugins/stylescombo/styles/default.js

不難發現原本使用 XML 結構已經改成以 javascript 資料型態來取代

閱讀全文…

Categories: PHP Tags: ,

一個考題 , 用一個迴圈印出下列結果

2009年10月26日 pigo 8 則評論

之前有一家公司出的考題 , 用一個迴圈寫出下列結果

*
**
***
****
*****
******
*****
****
***
**
*

閱讀全文…

Categories: PHP Tags: