[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
Continue reading “[FreeBSD] 安裝 PHP APC 加速網頁速度”

[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 Continue reading “[PHP] 好用的 PEAR – PHP Mail and Mail_Mime”

[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
Continue reading “[FreeBSD] 安裝 memcache for php 多重伺服器共享 Session”

[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] header下載檔案 搭配資料庫

剛剛在 ECstart 看到有人詢問 header檔案下載錯誤 發現網站義工有回答到這個function,所以就紀錄下來了
function dl_file($file){

   //First, see if the file exists
   if (!is_file($file)) { die("404 File not found!"); }

   //Gather relevent info about file
   $len = filesize($file);
   $filename = basename($file);
   $file_extension = strtolower(substr(strrchr($filename,"."),1));

   //This will set the Content-Type to the appropriate setting for the file
  switch( $file_extension ) {
     case "pdf": $ctype="application/pdf"; break;
     case "exe": $ctype="application/octet-stream"; break;
     case "zip": $ctype="application/zip"; break;
     case "doc": $ctype="application/msword"; break;
     case "xls": $ctype="application/vnd.ms-excel"; break;
     case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
     case "gif": $ctype="image/gif"; break;
     case "png": $ctype="image/png"; break;
     case "jpeg":
     case "jpg": $ctype="image/jpg"; break;
     case "mp3": $ctype="audio/mpeg"; break;
     case "wav": $ctype="audio/x-wav"; break;
     case "mpeg":
     case "mpg":
     case "mpe": $ctype="video/mpeg"; break;
     case "mov": $ctype="video/quicktime"; break;
     case "avi": $ctype="video/x-msvideo"; break;

     //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
     case "php":
     case "htm":
     case "html":
     case "txt": die("Cannot be used for ". $file_extension ." files!"); break;

     default: $ctype="application/force-download";
   }

   //Begin writing headers
   header("Pragma: public");
   header("Expires: 0");
   header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
   header("Cache-Control: public");
   header("Content-Description: File Transfer");
   
   //Use the switch-generated Content-Type
   header("Content-Type: $ctype");

   //Force the download
   $header="Content-Disposition: attachment; filename=".$filename.";";
   header($header );
   header("Content-Transfer-Encoding: binary");
   header("Content-Length: ".$len);
   @readfile($file);
   exit;
}

[PHP] 如何切割中文標題

今天看到酷!學園討論區,php版有人問說要如何切割中文字,結果我自己以前弄的一個function就貼了上去,如下
function cut_word($text, $num){
if(strlen($text) > $num) {
   for($i=0;$i< $num;$i++) {
      $ch=substr($text,$i,1);
      if(ord($ch)>127) $i++;
      }
      $text= substr($text,0,$i).".";
   }
   return $text;
}
Continue reading “[PHP] 如何切割中文標題”

FreeBSD + Lighttpd + php + mysql 安裝過程

http://gslin.org/2004/10/12/61/
系統環境 :FreeBSD 6.0-RELEASE 安裝過程如下:
  1. mysql-server-5.0.24a
  2. php5-5.1.6
  3. lighttpd-1.4.11_1
先安裝 lighttpd
cd /usr/ports/www/lighttpd/ make config [X] OPENSSL Enable SSL support [ ] OPENLDAP Enable LDAP support [X] MYSQL Enable MYSQL support [X] IPV6 Enable IPV6 support [X] CML Enable Cache Meta Language support make install clean
安裝 mysql cd /usr/ports/databases/mysql50-server make install clean WITH_CHARSET=utf8 WITH_LINUXTHREADS=yes 安裝 php cd /usr/ports/lang/php5 cd /usr/ports/lang/php5-extensions/ make config 選擇你想要的 extensions 灌好之後 就可以用了 然後打開 家目錄設定 userdir.path = “public_html” userdir.basepath = “/home/” 重點來了 如果執行網頁 http://localhost/phpinfo.php 出現 550 error 則你忘記執行fastcgi php-cgi -v PHP 5.1.6 (cgi-fcgi) (built: Sep 19 2006 22:42:28) (DEBUG) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies 然後執行 php-cgi -b 127.0.0.1:81 & 即可 port部份 隨機bind一個即可 lighttpd 設定檔