[PHP]如何使用 flush() 跟 ob_flush()

比如說我們想要緩衝網頁資料,如利用 sleep() 這個函式,那我們不想要等整個 php 執行完畢才輸出畫面,那就是需要緩衝輸出,在 酷學園 的這篇 http://phorum.study-area.org/index.php/topic,52757.0.html 有討論到,所以我實際去測試一下,大概如下:

";
flush();
sleep(2);

for ($i=10; $i>0; $i--)
{
    echo $i . "


"; ob_flush(); flush(); sleep(1); } ob_end_flush(); ?>
我覺得相當不錯用,大家可以參考看看。酷學園那篇,我測試好像沒有這種效果,Orz,不知道我測試錯誤,還是啥的地方搞錯 http://blog.goalercn.com/blogview.asp?logID=348
php 

[Linux] CentOS 5.1 安裝 Lighttpd + PHP5 + FastCgi + eaccelerator

昨天網站無緣無故被擋掉,原因是我的流量網站太大,囧,因為是架設 web site,測試一下效能,我發現 =http://httpd.apache.orgapache[/url] 沒辦法撐住流量跟線上人數,所以只好換成 =http://www.lighttpd.netLighttpd[/url] 發現效果不錯,所以又去安裝了 CentOS 版本,我是去參考底下這篇:Installing Lighttpd With PHP5 And MySQL Support On CentOS 5.0,這一篇我覺得寫的還ok,但是因為 Centos 如果你想用 yum 安裝 =http://www.lighttpd.netLighttpd[/url] 就要先裝 rpmforge-release package 這個東西,這樣才可以找到。 首先先看你的版本再來抓:

RHEL5 / CentOS-5 i386: http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm x86_64: http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm RHEL4 / CentOS-4 i386: http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.i386.rpm x86_64: http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm RHEL3 / CentOS-3 i386: http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el3.rf.i386.rpm x86_64: http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el3.rf.x86_64.rpm RHEL2.1 / CentOS-2 i386: http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el2.rf.i386.rpm

[Read More]

[FreeBSD]Lighttpd + php5 + 解決 wordpress Permalinks mod_write

今天轉換跑道了,最近玩 Apache 玩的很不順,因為只要線上人數一多,就會吃很多記憶體,導致必須重新開 Apache,所以今天來玩看看 lighttpd試試看,看看結果如何,其實轉換到 lighttpd 需要注意很多事情,那就是 Lighttpd 並不支援 .htaccess 檔案,所以 mode_rewrite 功能要設定到 Lighttpd.conf 裡面,然後也去找看看 Lighttpd 的 virtual host 的寫法,然後還有一點就是 wordpress 的 Permalinks 的問題,算是今天都解決了,底下來寫一下作法:

[Read More]

[FreeBSD]Apache 噴出 signal Segmentation fault (11)

最近在玩 FreeBSD 伺服器的加強效能,其實我自己試了很多套:eAcceleratorPear APC,跟 Zend Optimizer,這三套都是可以加速php的速度,當你的 apache 效能遇到瓶頸,就可以選用這三個來改善網頁瀏覽速度,不過應該沒有人三個都用吧,畢竟三個東西,感覺都是cache幫助,所以達成我們所想要的要求,有時候並不是全部安裝就是代表你的伺服器一定會超快,因為我的經驗是三個不能同時裝,只要裝了兩個都會出問題,這是我這幾天測試的結果,只要裝了Pear APC,就不能裝Zend Optimizer跟eAccelerator了,因為我的 httpd 的 log 會噴出底下訊息:

signal Segmentation fault (11) 跟 pid 15879 (httpd), uid 80: exited on signal 11

[Read More]

[PHP]解決網站被 SQL injection 攻擊

其實這個安全性的問題,在目前台灣網站都存在這樣的問題,大家平常用 $_POST,$_GET 用得很順利,但是沒有想過帳號密碼被 SQL injection 破解,當網站被破解了,基本上你損失就是相當嚴重,網路上也有很多攻擊方式,不過這方法是最常被拿出來講的,我自己有一套解決方式,除了比較重要的地方,就是輸入帳號密碼的地方要加強防護之外,加上數字驗證碼,還要 check 帳號的特性,我底下是我驗證帳號密碼機制

if($user_name == '' || $user_passwd == ''){
    	ErrMsg("帳號或密碼不得空白");
    }
    if (!preg_match('/^\w+$/', $user_name)){
    	ErrMsg("請勿攻擊本站台");
    }
[Read More]
MySQL  php  sql 

基本優化 tuning apache 跟 tuning mysql 跟 php 效能

最近在玩優化 Apache 跟 MySQL 部份,然後就在 google 上面找一些資料,當然對我自己的網站當然改變不少,速度有增快許多,所以來紀錄一下,其實都是還蠻基本的改 config 檔案就可以了 1. apache 部份 for FreeBSD

#
# 利用 ports 安裝
# 在安裝 Apache 時,加入此參數 WITH_MPM=XXXX 即可。 
#
cd /usr/ports/www/apache22 ; make WITH_MPM=worker install clean
如果是要裝在 Linux 機器的話,可能要自己編譯,在 Apache 2.0 有很多效能上得改變,所以原本預設是 prefork
#
# 編譯加上 
# 
./configure --with-mpm=worker
在 Ubuntu 底下作法很奇怪,利用 apt-get 方式不能安裝 mpm worker,因為你安裝 php 的時候他會幫你移除,然後裝上 prefork,所以很奇怪,這部份我還不知道怎麼解決。 [Read More]

[FreeBSD] 安裝 PHP APC 加速網頁速度

最近在維護自己的機器,發現網站每秒 request 只要10幾次就會感覺吃很多資源,然後莫名 CPU 飆高到100%,後來只好去找怎麼去 tuning Apache,MySQL,PHP,至於改善 apache 跟 MySQL 我先不講了,我之後會在寫,我先處理了加速 PHP 的部份,我是安裝了 APC(Alternative PHP Cache),來改善執行 PHP 的速度,這個程式必須先安裝好 PECL(PHP Extension Community Library),再來安裝 APC 就沒問題了。 1. 首先安裝 APC

#
# 先切換到該軟體下面
#
cd /usr/ports/www/pecl-APC/; make install clean
[Read More]

[PHP] 好用的 PEAR – PHP Mail and Mail_Mime

今天在寫期末的 Project,我的專題是寫無線 802.1X 認證,搭配 FreeBADIUS Server,然後我在搭配網頁整合認證機制,然後我在做使用者帳號申請部份,需要靠 Email 認證,但是我去看官網,介紹好像也沒什麼,在寄信的時候常常會遇到亂碼,不然就是寄信 html 部份會有問題,或者是不能附加檔案之類的,然後網路上找不到一個好用的 class ,所以就用了 PEAR::Mail_MimePEAR::Mail,這兩個套件還不錯用,如果想寄單純的信件,就用 PEAR::Mail 這個就可以了,如果要搭配 html 網頁,就要搭上 PEAR::Mail_Mime

[Read More]
mail  PEAR  php 

[FreeBSD] 安裝 memcache for php 多重伺服器共享 Session

今天來玩看看 memcache 看看,話說 memcache 是個非常好用的東西,可以參考官網作法 連結,其實我在前一個工作,就有老闆問我說,像公司作這麼多網站,有沒有辦法統整成一個,然後底下各種服務,只需要登入過一次就好,而不必重複登入,畢竟會讓使用者覺得很煩,所以就有了 memcache 這東西出來,底下就來介紹 FreeBSD 的安裝方式

  • 安裝方法: 安裝 ports 的套件 memcache 跟 pecl-memcache
cd /usr/ports/databases/memcached; make install clean
cd /usr/ports/databases/pecl-memcache; make install clean
然後他會把 extension=memcache.so 寫到 /usr/local/etc/php/extensions.ini 然後你只需要重新啟動 apache 即可,還有把 memcached 服務打開 所以請下底下指令
echo "memcached_enable=\"YES\"" >> /etc/rc.conf
/usr/local/etc/rc.d/memcached start
/usr/local/etc/rc.d/apache22 restart
[Read More]

[PHP] 善用 ignore_user_abort() 函式

話說最近在為了上傳圖片經過縮圖的時間來煩惱,只不過我在想,為甚麼我上傳圖片還要等待縮圖時間才可以,然而無名小站,只需要上傳時間,縮圖是在它機器背景執行,後來發現一個函式非常好用,那就是

ignore_user_abort(true);

http://tw2.php.net/manual/tw/function.ignore-user-abort.php 無名在上傳圖片的php檔案,肯定有加上這個函式,他的好處是使用者如果關掉瀏覽器,但是php還是會繼續執行,也就是無名可以把檔案上傳之後,重新導向到使用者的相簿,程式可以如下

ignore_user_abort(true);
set_time_limit(0);
for($i = 1; $i < 6; $i++){
if($_FILES['userfile' . $i]['size']){
/*
上傳圖檔寫在這裡
*/
}
}
//上傳好導向相簿
if($_POST['mode'] == 'add'){
header("Location:index.php");
}
/*
然後這裡在進行縮圖,他就會在背景中執行
*/
if($_POST['mode'] == 'add'){
for($i = 1; $i < 6; $i++){
convert_sh($upload_floder,$file_name[$i],$small_size[$i]);
}
}
?>
其實 ignore\_user\_abort(true); 根本就是變相的 unix 底下的 crontab ,還蠻好用的,好處很多,不過用的地方要注意就是了,並不是每個php檔案都需要用這個函式。
php