轉載自 http://www.jaceju.net/resources/webmvc/

 

透視 WebMVC

Jace Ju 2007/03/16

前言

以往我所開發的 Web 專案,大部份都是把核心放在操作 HTML ;就算後來使用了 Smarty ,卻還是迷失在視覺為重的設計觀點裡,使得後續開發與維護都變得非常麻煩。後來我自己歸納出問題發生的原因,絕大部份在於我接觸的專案常常是「畫面先行」。

「畫面先行」是由視覺設計人員來主導專案的架構,而這個架構則通常是因應客戶在網站流程上的要求而建立的;這也使得我在開發程式時就必須地採用他們決定好的頁面來套用程式,最後的結果就是導致重複的業務邏輯遍布在整個專案裡。

以 Smarty 為核心

不過就算使用了 Smarty ,這種問題也還是沒有得到更進一步的解決。原因就在於我只是把 PHP 程式和 HTML 頁面拆開,而實際上同樣的業務邏輯卻沒有能夠包裝起來重複使用。直到我接觸了物件導向的觀念後,我才驚覺這種設計真的是不堪一擊。

於是我很認真地使用物件導向來封裝我的業務邏輯,並天真地以為讓它們能夠 reuse 後,程式的複雜度就會降低;但是逐漸地我發現到,我花在修改這些物件的時間竟然變得比以前長,我必須不斷地為它加入不同的判斷條件,好讓它應付所有可能發生的變化。可是這不是我所希望發生的結果呀!到底為什麼會變成這樣呢?

我發現很多時候我讓物件在發生錯誤時,自行丟出一個訊息給瀏覽器,或是透過 Smarty 將這些訊息包裝成畫面。但是過了幾個月之後的改版,這個物件的重用性變得越來越差,而且也變得越來越大。另外它跟 Smarty 的耦合性也太高,畢竟有時候我根本不想在這個時候使用 Smarty 丟出畫面,而是想讓上一層程式自己去決定!

後來我歸納出這一切問題的原因,都是我錯把 Smarty 當成主角 - 也就是網站架構的核心!

剛接觸 Smarty 時,我同時也耳聞了 MVC 這個設計模式。不過那時剛剛接觸物件導向,也還不瞭解什麼是設計模式;只知道使用 Smarty 的前輩們倡導大型的應用項目都應該朝向 MVC 的架構去設計。雖然我那時仍不清楚 MVC 的核心概念,然而這個開發方式卻帶給我一個很大的思考空間:為什麼要把一個應用程式分成三個部份?而在 Web 上這種開發方式也行得通嗎?在參考過一些書籍,這些問題仍似有若無的存在我的心中,所以我的程式架構依然沒有什麼改進。

直到在寫「 PHP Smarty 樣版引擎」這本書時,我也剛好讀到了「深入淺出設計模式」這本好書;而該書對 MVC 模式的介紹,正好解開我長年以來的疑惑。

原來真正的 MVC 是將「資料處理邏輯」、「程式流程」與「資料呈現」三者分離,而 Smarty 只是扮演了「資料呈現」的角色而已!

不過懂是懂了,但要如何將這個概念融入 Web 開發中,這點讓我覺得很頭痛。雖然發現很早就有人把 MVC 帶進 PHP 裡了,只可惜用的人不多,文件也比較少。所以在我的書中的 MVC 架構用得非常簡陋,只能說是 WebMVC 的雛形而已。而這時 Ruby on Rails 剛好在網路界萌芽,號稱將 MVC 帶入了 Web 開發中;並且首開先例,用影片來示範一個 Blog 系統的誕生,所以我也不可免俗地去抓回來玩看看 (我想很多寫 Java 的人大概就是這點所吸引) 。可惜我一看到 Ruby 那個奇怪的語法,就覺得看不下去了,所以只是照本宣科地把範例作一作,最後不了了之 (後來想一想真是可惜) 。

直到又過了好一陣子,在 CakePHP 、 Code Igniter 等號稱 PHP 界的 Rails 開發框架出現後,我便興致勃勃地去下載回來研究。而參考了它們的範例後,這時我才猛然醒悟!原來 Web 上的 MVC 架構是長成這個樣子!後來為了專案需要,更把 LifeType 的程式碼追了一遍,這才發現 WebMVC 竟是如此彈性而富有變化!

由於深刻體認到物件導向所帶給我的衝擊,我不得不承認以往我所嚮往的開發方式仍然有很大的改進空間。所以我想就從架構的改進開始,讓自己重頭去認識新的 Web 開發方式。

James Wu 發表在 痞客邦 留言(1) 人氣()

sed -e '12d' xxx # 將第 12 行清掉

sed -e '1,5d' xxx # 將第 1 ~ 5 行清掉

sed -e '1,5d' -e 's/test/check/' # 第 1 ~ 5 行清掉, 並將 test 取代成 check

awk '!(NR>=1 && NR<=5){print $0}' xxx # 將第 1 ~ 5 行清掉

James Wu 發表在 痞客邦 留言(0) 人氣()

xargs 可以用來連續執行同一個指令, 然後把另一個指令輸出的結果當成這個指令的參數:


例如清除暫存檔時:
$ find -name “*~” | xargs rm

或者作檔案內容的搜尋:
$ find -name “*.php” | xargs grep -l test

上面這個例子是以目前目錄開始, 找出所有內含 test 的 *.php 檔.

------------------------------------------------------------------------

果然人老人記憶會變差 趕快把一些東西記錄下來

James Wu 發表在 痞客邦 留言(1) 人氣()

PPPOE Config

pon dsl-provider 建立 DSL連線

poff 中斷連線

================================

eth static IP set


auto eth0
iface eth0 inet static
address 192.168.50.10
netmask 255.255.255.0
================================

APT LIST

 


deb http://ftp.tw.debian.org/debian/ lenny main non-free
deb-src http://ftp.tw.debian.org/debian/ lenny main


deb http://security.debian.org/ lenny/updates main non-free
deb-src http://security.debian.org/ lenny/updates main


deb http://volatile.debian.org/debian-volatile lenny/volatile main non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main
========================================================

James Wu 發表在 痞客邦 留言(2) 人氣()

【長度單位】

CSS可使用長度單位
單位 單位說明 範例
pt Point,就像是Word裡面的Point一樣大小 font-size:10pt
px Pixels,依您螢幕解析度而決定大小 font-size:10px
pc Pica,6個Pica是一英吋 font-size:10pc
mm 公厘,用過尺...這個設定值完全不會因為其他設定而改變 font-size:10mm
cm 公分,不會因為使用者設定而改變 font-size:10cm
% 百分比,大部分是指所在位置寬度或者長度百分比 font-size:10%

James Wu 發表在 痞客邦 留言(1) 人氣()

  • Nov 30 Mon 2009 12:14
  • 星座

行星 太陽 月亮 水星 金星 火星 木星 土星 天王星 海王星 冥王星 上升
星座 獅子座 水瓶座 獅子座 天秤座 天秤座 巨蟹座 處女座 天蠍座 射手座 天秤座 水瓶座
宮位 第七宮 第一宮 第七宮 第八宮 第八宮 第六宮 第七宮 第九宮 第十宮 第八宮 第一宮
角度 25度 25度 25度 10度 8度 26度 2度 12度 15度 14度 23度

James Wu 發表在 痞客邦 留言(0) 人氣()

轉錄自 http://km.tceb.edu.tw/~wsx/php/ch7-3.htm


  Cookie函數
 
 

 

 

 在PHP中,要使用Cookie的指令只有一個

setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])
 
換個寫法:setcookie("Cookie變數名稱","Cookie數值","期限","路徑","網域","安全")

 除了Cookie的「變數名稱」參數一定要有之外,其餘可省略;參數的說明如下表:

參數名稱
參數說明
Cookie名稱(Name) Cookie的名稱,以PHP來說,就是變數的名稱,例如 cookiename 就好比 $_COOKIE['cookiename']
Cookie值(Value) 就是Cookie名稱的值
留存時間(Expire) Cookie的留存時間,以「秒」為單位,例如要留存30天,那就要用「time( )+30*24*60*60」(
time( )函數表示取得現在的時間+30天*24小時*60分*60秒) ;如果沒有設定,當瀏覽器關掉時,cookie也跟著結束。
路徑(path) 指在哪些目錄下的檔案可以使用Cookie
網域名稱(Domain) 用來設定哪些網域可以使用Cookie
安全性(Secure) 如果結合HTTPS安全傳輸協定(SSL),就是「1」,一般則為「0」。

 

 使用setcookie( )函數時,得先注意下列事項:

  1.  
    1. 與session_start( )函數的狀況一樣,在使用setcookie( )函數時,之前都不可以有任何的結果輸出,例如不可以在setcookie( )之前使用echo 輸出變數或將setcookie ( )嵌入在網頁中,其他html語法先輸出,否則會出現錯誤訊息。
    2. 如果 php.ini 的「register_globals」設為 on,只要在cookie有效期限用,可以直接使用 $變數輸出變數的內容,但如果設成 off ,則需要用 $_COOKIE["名稱"]$HTTP_COOKIE_VARS["名稱"] 方式取得內容。
    3. 如果沒有設定留存時間,雖然有指定cookie名稱及數值,但因為一設定就過期,結果是無法讀取您寫入的 Cookie。
    4. 如果要刪除cookie的話,直接把要刪除cookie名稱的值設定為空白即可。

James Wu 發表在 痞客邦 留言(0) 人氣()

轉錄自 http://km.tceb.edu.tw/~wsx/php/ch7-2.htm


 

session 函式

 


 
當PHP在使用Session的功能之前,由於 php.ini 的一些設定值會影響session函數的使用,所以應先了解 有關session在php.ini 的有關設定:

參數名稱
預設值
說明
參數可變更性
session.save_path
/tmp
session檔案存放路徑 可任意修改
session.name
PHPSESSID
session 的名稱(類似cookie的變數名稱) 可任意修改
session.save_handler
files
處理session存取的模式(預設:檔案) 可任意修改
session.auto_start
0
自動啟動(預設:關) 可任意修改
session.gc_probability
1

「垃圾收集」(garbage collection,資源回收筒)的處理機率

可任意修改
session.gc_maxlifetime
1440
「垃圾收集」(garbage collection,資源回收筒)被處理前的存活週期(預設:1440「秒」) 可任意修改
session.serialize_handler
php
處理連續資料方式的模式,本功能只有 WDDX 模組或 PHP 內部使用。內定值為 php。 可任意修改
session.cookie_lifetime
0
session使用cookie的存活週期;以「秒」為單位(預設:隨瀏覽器關閉即消失) 可任意修改
session.cookie_path
/
session使用cookie的路徑(預設:與domain相同或根路徑) 可任意修改
session.cookie_domain
session使用cookie的網域名稱 可任意修改
session.cookie_secure
session使用cookie的安全性 可任意修改
session.use_cookies
1
session使用cookie的功能(預設:啟用) 可任意修改
session.use_only_cookies
0
僅使用cookie方式來傳遞session,不可利用URLs方式(預設:關) 可任意修改
session.referer_check
 
session在重新整理時檢查session是否還存在 可任意修改
session.entropy_file
 
特別設定 session 值的檔案 可任意修改
session.entropy_length
0
特別設定 session 值的長度(預設:關) 可任意修改
session.cache_limiter
nocache
使用cache限制器(預設:不用要cache) 可任意修改
session.cache_expire
180
使用cache存活時間 可任意修改
session.use_trans_sid
0
使用sid值(session id)傳送模式(基於安全,預設:關閉) 須在php.ini
或ttp.conf修改
url_rewriter.tags
a=href,
area=href,
frame=src,
input=src,
form=fakeentry
網址(url)重新導向的標籤(tag) 可任意修改

 如果要改變這些設定,可直接修改 php.ini 再重新啟動 Web Server,也可以利用 ini_set( )函數來設定,設定方式如下:

ini_set ("參數名稱", "新的參數值");
 

 使用Session時,不外乎三個程序:

第一:啟動session功能 ─ 使用 session_start( ) 函數

第二:註冊session變數 ─ 使用 session_register( ) 函數
    (或用$_SESSION、$HTTP_SESSION_VARS )

第三:清除session變數或檔案 ─ 使用 session_unregister( )session_destroy( )函數

 當然,如果想知道session的狀況,例如:

取得 session 的id值(與session檔案名稱,就是sess_後面接的32字元) ─ 使用 session_id ( )函數

查看要傳遞的變數是否已被註冊 ─ 使用 session_is_registerd( ) 函數

James Wu 發表在 痞客邦 留言(0) 人氣()

一、連結資料庫
      

         1. 建立連線:
            $link = mysql_connect("Mysql主機名稱", "帳號", "密碼")
                        or die("無法連接資料庫: " . mysql_error( ));
         2. 選擇資料庫:
            mysql_select_db("資料庫名稱") or die("無法選擇資料庫");

      
      

二、執行SQL語法
      

         1. 建立SQL語法
            (查詢) $query = "SELECT * FROM my_table";
            (新增) $query = "INSERT INTO my_table (c1,c2,...) VALUES ( value1,value2, ...)";
            (修改) $query = "UPDATE my_table SET c1='abc' WHERE id='100' ";
            (刪除) $query = "DELETE FROM my_table WHERE id='100' ";

         2. 送出SQL語法到資料庫系統
            $result = mysql_query($query) or die("無法送出" . mysql_error( ));

      

      

三、取得執行SQL語法後的結果 (指查詢部份)
      

      while ( $row = mysql_fetch_array($result) ) {
         echo $row[0]."<BR>";
      }

      
      

四、釋放與Mysql的連線
      

    mysql_free_result($result);

James Wu 發表在 痞客邦 留言(0) 人氣()

鳳山分局10月底查獲一起搶案,嫌犯涉及多起搶奪案,清方清查贓物時,一台數位相機一直找不到失主,後來發現相機電池上有一個姓名貼,警方利用 Facebook搜尋,真找到被害人,且被害人上網與姓名貼上使用的都非本名。警方根據被害人遭搶時間地點,追查監視畫面,發現搶嫌當時騎贓車犯案,一舉 又清出一件搶案一件竊案。

James Wu 發表在 痞客邦 留言(0) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼