php configure fast cgi

php 與 apache 最常協同工作的方式是採用在 apache 上掛載 mod_php 模組,在執行 apache 的時候呼叫這個模組來編譯 php 網頁。所以接收工作與回應的模式大都是 apache 在控制(這邊指的是行程的數量…與生命週期等等),預設情況 apache 會有一個 process pool 接到要求就從 pool 中叫一個起來工作,如果工作超過 pool 的 process 量的話則 fork 新 process 來處理,則會佔用大量的記憶體,尤其是 apache 是採用 process 不是 thread 的關係(一個 30M 200個 request 就需要 6G)。

common gateway interface 是一個讓網頁伺服器與程式銜接的介面,叫做 interface 就是代表各種語言只要實做了這個介面就能跟網頁伺服器溝通。而 fast cgi 則是 cgi 的擴展擁有許多更良好的特性,可以是一個不中斷程式持續的接收工作,而 apache 接到工作以後不是採用 php 模組的方式呼叫編譯,而是將要求轉送至已在運行的 fcgi 程式中。

透過 fast cgi 的方式運作與 spawn cgi 來管控數個設定如: php_cgi  行程的數量。透過管理 php_cgi 行程池,減低 apache 載入 php 模組所耗費的記憶體,應能加速 apache fork 行程的速度,因為少載入了一個肥大的 mod_php module。這樣的話假設實際環境使用者要求個網頁有 1個php 9個資源的情況,10個要求只有1個需要呼叫 php_cgi ,這樣 10 個 php_cgi 可以處理 100 個 apache process。

Continue reading…

jpgraph 2.2 中文支援

很久以前的一篇文章…庫存一下…

官方網站 http://www.aditus.nu/jpgraph/

使用2.2版 官方連結 http://hem.bredband.net/jpgraph2/jpgraph-2.2.tar.gz

src/jpgraph.php 內

6256行左右有 $txt = $this->langconv->Convert($txt,$this->font_family);

似乎是將簡體中文轉成 utf-8 而我網站內使用的是 utf-8 而且我用的是繁體中文,所以註解掉這行。

63行部份有定義字型的位置,我網站內使用的是Linux 而我又不是伺服器管理者動不到原先字型的目錄,所以將字型之置換於 jpgraph 安裝目錄下所以改成這樣。

if (!defined('TTF_DIR')) {
   if (strstr( PHP_OS, 'WIN') ) {
      $sroot = getenv('SystemRoot');
      if( empty($sroot) ) {
         $t = new ErrMsgText();
         $msg = $t->Get(12,$file,$lineno);
         die($msg);
      }
      else {
         DEFINE('TTF_DIR', $sroot.'/fonts/');  //windows下的位置
      }
   } else {
      DEFINE('TTF_DIR','/home/mlwmlw/www/jpgraph/'); //unix下的位置
   }
}

JPG-CONFIG.INC
此檔控制一部分字型的選擇,內有此行定義繁體中文字型的字體

//JPG-CONFIG.INC
DEFINE('CHINESE_TTF_FONT','simhei.ttf');

可使用 FF_CHINESE aka FF_BIG5 不過這似乎此檔不是關鍵定義字型的部份,在網路上找到的文件選中文程式中設定都是 FF_SIMSUN,FS_BOLE

接著看 jpgraph_ttf.inc.php 注意此文件內的設定字體陣列,發現了 jpGraph 定義字型的關鍵程式,

我們要改的部份240行

//jpgraph_ttf.inc.php
/* Chinese fonts */
FF_SIMSUN => array(FS_NORMAL	=>'simsun.ttc',
FS_BOLD	=>'simhei.ttf',
FS_ITALIC	=>'',
FS_BOLDITALIC	=>'' ),
FF_CHINESE => array(FS_NORMAL	=>CHINESE_TTF_FONT,
FS_BOLD	=>'DFFN_M9.TTC',
FS_ITALIC	=>'',
FS_BOLDITALIC	=>'' ),

字型規則

FF_*** 選擇主要類別,FS 選擇字型,每個FF定義了每個字型的對應屬性,我將 CHINESE 內的 NORMAL 與 BOLD 放置了兩個我需要的字體,
之後程式在 SET_FONT 時就看要那個字體就應對著選擇 FF_CHINESE,[FS_NOMAL OR FS_BOLD]。

這樣在跑應該就能有中文了。

程式碼顏色凸顯 用於 office

原由:

時常有需要做投影片裡面都會放到程式,有很多工具可以做,只是都是單純 html,而貼到 PowerPoint 上就會有一些跑掉,

找到最適合的工具是 highlight ,他支援的很完整,語言、樣式,還有介面完善的GUI與API。GUI部份其實很完整了,但是因為他是用 pre 包覆的,所以貼到 Office 換行跟空白都會有些跑掉。而且輸出到剪貼簿的格式也不是 html,要自己在存成 html 來複製再貼。

他另外也有一個類別給 PHP 跟 Python,內部實做其實只是用 pipe 去發指令收回應。

所以我寫了個小程式整理一下輸出的結果,讓貼到 Office 後格式儘量不要跑掉…。

隨便做的說明:


轉換結果範例:

 1 //Examle
 2 public class Fibonacci {
 3     public static long fib(int n) {
 4         if (n <= 1) return n;
 5         else return fib(n1) + fib(n2);
 6     }
 7 
 8     public static void main(String[] args) {
 9         int N = Integer.parseInt(args[0]);
10         for (int i = 1; i <= N; i++)
11             System.out.println(i + “: “ + fib(i));
12     }
13 }

程式網址:

Syntax highlight for Office