<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8393763371862766007</id><updated>2011-11-28T08:32:53.943+08:00</updated><category term='Zend Framework'/><category term='演算法與資料結構'/><category term='jQuery'/><category term='css'/><category term='ubuntu'/><category term='心得'/><category term='mysql'/><category term='joomla'/><category term='php'/><category term='evolution'/><title type='text'>php &amp;&amp; mysql</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>73</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-8474000910686318756</id><published>2009-07-16T15:26:00.001+08:00</published><updated>2009-07-16T15:29:17.092+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='joomla'/><title type='text'>jommla的MVC之一</title><content type='html'>http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Developgin a Model-View-Controller Component Part 1&lt;br /&gt;&lt;br /&gt;軟體開發框架是應用程式的基礎，開發人員能夠應用開發框架進行程式開發，joomla 1.5的開發框架釋放了強大的威力，所有的joomla的程式碼都經過嚴格的檢查並及程式碼的減量，這件文件會將使用框架，開發程式的過程展示出來。&lt;br /&gt;&lt;br /&gt;這件文件只展示了如何開發一個hello world的component，在以後的教學文件中，這套開發框架將用來開發完整及多功能的程式，以便展現joomla的MVC設計模式。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Requirements&lt;br /&gt;&lt;br /&gt;joomla1.5以上的版本&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Introduction to Model-View-Controller&lt;br /&gt;&lt;br /&gt;component背後的觀念相當簡單，可是一旦功能不斷增加或進行使用介面的客製化，程式碼會立刻變得複雜。&lt;br /&gt;&lt;br /&gt;Mode-View-Controller是一種軟體設計模式，可以有效的組織程式碼，分離商業邏輯及畫面的顯示邏輯，這種設計模式背後的觀念是這樣的，把商業邏輯及顯示邏輯放在不同區塊，當改變顯示邏輯的時候，就不需要修訂商業邏輯的程式碼。&lt;br /&gt;&lt;br /&gt;MVC component由三個部份組成，底下會簡短說明，如果要更完整的了解，參閱文件最後的相關連結。&lt;br /&gt;&lt;br /&gt;Model&lt;br /&gt;&lt;br /&gt;model負責包裝應用程式的資料，他會提供管理、操作及存取資料的方法，在我們的範例中，model將包含新增、移除及更新資訊的功能，他也包含了抓取資料庫資料的功能，通常，底層的資料存取應該被包裝在model中，如果應用程式後端的資料儲存系統由平面文字改成資料庫，model就應該是唯一需要變動的部份，而不是view或controller。&lt;br /&gt;&lt;br /&gt;View&lt;br /&gt;&lt;br /&gt;view負責從model中取出資料，與使用者互動，web應用程式的view就是html頁面，view從model中抓取資料，將資料填入template中，呈現給使用者，view並不會使資料被修改，他只會顯示從model中抓來的資料。&lt;br /&gt;&lt;br /&gt;Controller&lt;br /&gt;&lt;br /&gt;controller負責回應使用者的需求，web應用程式中，使用者的需求就是送出需求的頁面，controller會根據使用者的要求，使適當地回應，抓取model中的資料，並將model的資料送給view，controller 並不會在model中顯示資料，他只會觸發model中的method，並將model中的資料傳送給view，以便顯示有用的資訊。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Joomla! MVC Implementation&lt;br /&gt;&lt;br /&gt;在joomla中，MVC設計模式使用三個類別：JModel、JView及JController，如果還需要與這三個類別更多的相關資訊，請參閱API手冊。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a Component&lt;br /&gt;&lt;br /&gt;這份文件的component，只需要五個檔案&lt;br /&gt;&lt;br /&gt;site/hello.php - component的大門(進入位置)。&lt;br /&gt;site/controller.php - 基本的controller&lt;br /&gt;site/views/hello/view.html.php - view檔案&lt;br /&gt;site/views/hello/tmpl/default.php - 輸出的樣板檔&lt;br /&gt;hello.xml – 這個xml檔告訴joomla如何安裝這個component&lt;br /&gt;&lt;br /&gt;進入點的檔案名稱必須與component的名稱相同，例如，如果你的component叫做"Very Intricate Name Component”，在安裝時，joomla會自動建立com_veryintricatenamecomponent目錄，進入點的檔案必須命名為veryintricatenamecomponent.php ，不然，這個component就不能運作，一些特殊字元，如底線'_'，在joomla中有特殊意義，必須避免在joomla的component名稱或檔案中使用這些特殊字元。&lt;br /&gt;&lt;br /&gt;這邊的site目錄就是component目錄。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating the Entry Point&lt;br /&gt;&lt;br /&gt;joomla永遠透過單一進入點執行程式：前台應用程式的index.php或是後台程式的administration/index.php，應用程式會載入需要的component，根據url或post的資料，載入相關的component。&lt;br /&gt;&lt;br /&gt;index.php?option=com_hello&amp;view=hello&lt;br /&gt;&lt;br /&gt;這會載入我們的主要檔案，這可以當做component的單一入口點：components/com_hello/hello.php，這個檔案的程式碼相當有代表性。&lt;br /&gt;&lt;br /&gt;site/hello.php(site就是components/com_hello)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;/**&lt;br /&gt; * @package    Joomla.Tutorials&lt;br /&gt; * @subpackage Components&lt;br /&gt; * components/com_hello/hello.php&lt;br /&gt; * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1&lt;br /&gt; * @license    GNU/GPL&lt;br /&gt;*/&lt;br /&gt; &lt;br /&gt;// No direct access&lt;br /&gt;defined( '_JEXEC' ) or die( 'Restricted access' );&lt;br /&gt; &lt;br /&gt;// Require the base controller&lt;br /&gt; &lt;br /&gt;require_once( JPATH_COMPONENT.DS.'controller.php' );&lt;br /&gt; &lt;br /&gt;// Require specific controller if requested&lt;br /&gt;if($controller = JRequest::getWord('controller')) {&lt;br /&gt;    $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';&lt;br /&gt;    if (file_exists($path)) {&lt;br /&gt;        require_once $path;&lt;br /&gt;    } else {&lt;br /&gt;        $controller = '';&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;// Create the controller&lt;br /&gt;$classname    = 'HelloController'.$controller;&lt;br /&gt;$controller   = new $classname( );&lt;br /&gt; &lt;br /&gt;// Perform the Request task&lt;br /&gt;$controller-&gt;execute( JRequest::getVar( 'task' ) );&lt;br /&gt; &lt;br /&gt;// Redirect if set by the controller&lt;br /&gt;$controller-&gt;redirect();&lt;br /&gt;&lt;br /&gt;第一行是安全性檢查。&lt;br /&gt;&lt;br /&gt;JPATH_COMPONENT是目前component的絕對路徑，在我們的範例裡是components/com_hello，DS是系統的路徑分隔符號，不是斜線就是倒斜線，這由開發框架自動設定，開發人員不必因為轉換作業系統而去煩腦這些事。&lt;br /&gt;&lt;br /&gt;載入基本的contorller以後，再檢查是不是還需要其他的controller ，這個component裡，我們只需要基本的controller，但這段程式碼還是留著，以後會用到。&lt;br /&gt;&lt;br /&gt;JRequest::getVar()可以在url或post表單中接收變數，如果url是index.php?option=com_hello&amp;controller=controller_name，我們可以在component中存取變數，如echo JRequest::getVar('controller');&lt;br /&gt;&lt;br /&gt;現在 ，我們有了基本的controller—HelloController在com_hello/controller.php中，如果有需要， HelloControllerController1可以新增到com_hello/controller1.php中，controller的命名規則是這樣：{Componentname}{Controller}{Controllername}。&lt;br /&gt;&lt;br /&gt;當controller建立後，controller會以url指定的網址執行工作，index.php?option=com_hello&amp;task=sometask，如果沒有指定task，就會執行預設的task，預設的task是display，當設定為display時，變數view可以決定要顯示的內容，其他task是save, edit, new...。&lt;br /&gt;&lt;br /&gt;controller可以重導頁面，通常一項task，如save完成後，最後一項程式敘述是最後的重導頁面。&lt;br /&gt;&lt;br /&gt;主要進入點程式(hello.php)會將控制權交給controller，controller會執行request中指定的task。&lt;br /&gt;&lt;br /&gt;我們並沒有在程式中使用php程式的結束符號：?&gt;，這樣的用法可以避免，程式碼輸出時產生不必要的空白，這是joomla1.5預設的寫法，被應用到純php的程式檔。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating the Controller&lt;br /&gt;&lt;br /&gt;我們的component只有一項工作—向世界打招呼，所以，controller非常簡單，不需要操作任何資料，我們需要做的就是載入適當的view，我們的controller中只有一個method：display()，大部份的功能都已內建在JController類別中，我們要做的全部事情只是呼叫JController::display()方法。&lt;br /&gt;&lt;br /&gt;site/controller.php基本類別的程式碼如下：&lt;br /&gt;&lt;?php&lt;br /&gt;/**&lt;br /&gt; * @package    Joomla.Tutorials&lt;br /&gt; * @subpackage Components&lt;br /&gt; * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1&lt;br /&gt; * @license    GNU/GPL&lt;br /&gt; */&lt;br /&gt; &lt;br /&gt;// No direct access&lt;br /&gt; &lt;br /&gt;defined( '_JEXEC' ) or die( 'Restricted access' );&lt;br /&gt; &lt;br /&gt;jimport('joomla.application.component.controller');&lt;br /&gt; &lt;br /&gt;/**&lt;br /&gt; * Hello World Component Controller&lt;br /&gt; *&lt;br /&gt; * @package    Joomla.Tutorials&lt;br /&gt; * @subpackage Components&lt;br /&gt; */&lt;br /&gt;class HelloController extends JController&lt;br /&gt;{&lt;br /&gt;    /**&lt;br /&gt;     * Method to display the view&lt;br /&gt;     *&lt;br /&gt;     * @access    public&lt;br /&gt;     */&lt;br /&gt;    function display()&lt;br /&gt;    {&lt;br /&gt;        parent::display();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;JController類別的建構子一定會註冊display()方法，除非用別的方法另外註冊，display會被設定為預設task。&lt;br /&gt;&lt;br /&gt;這段程式碼中的display()方法並不必要，因為它只是呼叫parent constructor，不過，這倒是很好的線索，讓我們發現controller裡頭發生了什麼事情。&lt;br /&gt;&lt;br /&gt;Jcontroller::display()會從request中決定view及layout，並載入view，設定layout，當你在component中建立選單，menu manager會讓administrator可以選擇view，指定layout，view是指一群資料的組合，layout決定view如何組合排列。&lt;br /&gt;&lt;br /&gt;在我們的component中，我們只有單一的view，叫做hello，及單一的layout(default)。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating the View&lt;br /&gt;&lt;br /&gt;view的工作非常簡單，他抓取要顯示的資料，再把資料送到template，資料送到template是使用JView::assignRef 方法。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;site/views/hello/view.html.php的程式碼如下：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;/**&lt;br /&gt; * @package    Joomla.Tutorials&lt;br /&gt; * @subpackage Components&lt;br /&gt; * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1&lt;br /&gt; * @license    GNU/GPL&lt;br /&gt;*/&lt;br /&gt; &lt;br /&gt;// no direct access&lt;br /&gt; &lt;br /&gt;defined( '_JEXEC' ) or die( 'Restricted access' );&lt;br /&gt; &lt;br /&gt;jimport( 'joomla.application.component.view');&lt;br /&gt; &lt;br /&gt;/**&lt;br /&gt; * HTML View class for the HelloWorld Component&lt;br /&gt; *&lt;br /&gt; * @package    HelloWorld&lt;br /&gt; */&lt;br /&gt; &lt;br /&gt;class HelloViewHello extends JView&lt;br /&gt;{&lt;br /&gt;    function display($tpl = null)&lt;br /&gt;    {&lt;br /&gt;        $greeting = "Hello World!";&lt;br /&gt;        $this-&gt;assignRef( 'greeting', $greeting );&lt;br /&gt; &lt;br /&gt;        parent::display($tpl);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating the Template&lt;br /&gt;&lt;br /&gt;joomla的template及layout是一般的php檔案，可以用來排列從view中傳來的資料，由JView::assignRef 方法指定的變數，可以在template中使用$this-&gt;{propertyname}變數，進行存取。&lt;br /&gt;&lt;br /&gt;我們的template非常簡單，我們只要顯示從view中傳來的祝福語，這個檔案是site/views/hello/tmpl/default.php：&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt; &lt;br /&gt;// No direct access&lt;br /&gt; &lt;br /&gt;defined('_JEXEC') or die('Restricted access'); ?&gt;&lt;br /&gt;&lt;h1&gt;&lt;?php echo $this-&gt;greeting; ?&gt;&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Wrapping It All UP – Creating the hello.xml File&lt;br /&gt;&lt;br /&gt;你可以手動安裝component，使用ftp拷貝檔案，再手動修改資料庫，建立package，由joomla做安裝會是比較有效率的做法，package包含了不同的資訊。&lt;br /&gt;&lt;br /&gt;基本的component描述(名稱)、版權敘述&lt;br /&gt;&lt;br /&gt;需要拷貝的檔案&lt;br /&gt;&lt;br /&gt;選擇性的：一個php檔案，進行安裝及反安裝的操作&lt;br /&gt;&lt;br /&gt;選擇性的：一個sql檔案，進行資料庫資料的安裝及移除&lt;br /&gt;&lt;br /&gt;檔案格式是xml，底下是hello.xml的檔案內容&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;br /&gt;&lt;install type="component" version="1.5.0"&gt;&lt;br /&gt; &lt;name&gt;Hello&lt;/name&gt;&lt;br /&gt; &lt;!-- The following elements are optional and free of formatting constraints --&gt;&lt;br /&gt; &lt;creationDate&gt;2007-02-22&lt;/creationDate&gt;&lt;br /&gt; &lt;author&gt;John Doe&lt;/author&gt;&lt;br /&gt; &lt;authorEmail&gt;john.doe@example.org&lt;/authorEmail&gt;&lt;br /&gt; &lt;authorUrl&gt;http://www.example.org&lt;/authorUrl&gt;&lt;br /&gt; &lt;copyright&gt;Copyright Info&lt;/copyright&gt;&lt;br /&gt; &lt;license&gt;License Info&lt;/license&gt;&lt;br /&gt; &lt;!--  The version string is recorded in the components table --&gt;&lt;br /&gt; &lt;version&gt;1.01&lt;/version&gt;&lt;br /&gt; &lt;!-- The description is optional and defaults to the name --&gt;&lt;br /&gt; &lt;description&gt;Description of the component ...&lt;/description&gt;&lt;br /&gt; &lt;br /&gt; &lt;!-- Site Main File Copy Section --&gt;&lt;br /&gt; &lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;      to copy FROM in the package to install therefore files copied&lt;br /&gt;      in this section are copied from /site/ in the package --&gt;&lt;br /&gt; &lt;files folder="site"&gt;&lt;br /&gt;  &lt;filename&gt;controller.php&lt;/filename&gt;&lt;br /&gt;  &lt;filename&gt;hello.php&lt;/filename&gt;&lt;br /&gt;  &lt;filename&gt;index.html&lt;/filename&gt;&lt;br /&gt;  &lt;filename&gt;views/index.html&lt;/filename&gt;&lt;br /&gt;  &lt;filename&gt;views/hello/index.html&lt;/filename&gt;&lt;br /&gt;  &lt;filename&gt;views/hello/view.html.php&lt;/filename&gt;&lt;br /&gt;  &lt;filename&gt;views/hello/tmpl/default.php&lt;/filename&gt;&lt;br /&gt;  &lt;filename&gt;views/hello/tmpl/index.html&lt;/filename&gt;&lt;br /&gt; &lt;/files&gt;&lt;br /&gt; &lt;br /&gt; &lt;administration&gt;&lt;br /&gt;  &lt;!-- Administration Menu Section --&gt;&lt;br /&gt;  &lt;menu&gt;Hello World!&lt;/menu&gt;&lt;br /&gt; &lt;br /&gt;  &lt;!-- Administration Main File Copy Section --&gt;&lt;br /&gt;  &lt;files folder="admin"&gt;&lt;br /&gt;   &lt;filename&gt;hello.php&lt;/filename&gt;&lt;br /&gt;   &lt;filename&gt;index.html&lt;/filename&gt;&lt;br /&gt;  &lt;/files&gt;&lt;br /&gt; &lt;br /&gt; &lt;/administration&gt;&lt;br /&gt;&lt;/install&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;如果你仔細觀察這個檔案，你會發現需要拷貝的檔案，有一些並沒有討論到，例如index.html檔案，這個檔案是避免目錄下的檔案被全部列出，攤在使用者面前，一些伺服器沒有設定好，就會有這個問題，index.html檔案內容如下：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;這是一個非常簡單的空白頁面。&lt;br /&gt;&lt;br /&gt;另一個檔案是hello.php，這是admin section的進入點，暨然我們沒有admin section的進入點，他呈現的內容會跟index.html相同。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-8474000910686318756?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/8474000910686318756/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=8474000910686318756' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8474000910686318756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8474000910686318756'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/07/jommlamvc.html' title='jommla的MVC之一'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-2925532263482737362</id><published>2009-05-20T15:15:00.000+08:00</published><updated>2009-05-20T15:16:46.187+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='心得'/><title type='text'>驚喜挪威</title><content type='html'>驚喜挪威這本書的作者是吳祥輝，整本書籍以吳祥輝的個人觀點，將台灣的狀況與挪威做對照，書籍起頭以台灣家庭常見的政黨藍綠對決起頭，結尾以挪威及台灣的親切民情結尾，整本書籍探討的不僅是挪威的狀況，也對台灣的現況做了許多的思考及研究。&lt;br /&gt;&lt;br /&gt;書中介紹了許多挪威的歷史人物，其中有文學家、音樂家、政治人物，最讓我訝異的是著名的挪威文學家，他們的雕像佇立在挪威的市區，供許多人瞻養，這真是難得，跟台灣人愛跟政治人物沾上邊的習性，天差地別，台灣人的婚喪喜慶，總是需要政治人物來充場面，挪威人對文學家、音樂家的尊重，讓人感覺份外不同，著名的音樂家出殯時，城中一半的人口竟出門相迎，這充份展現對音樂家的尊重，國家人民的氣質跟習性大不相同。&lt;br /&gt;&lt;br /&gt;挪威的社會福利好，物價高，挪威人的平均薪資約十八萬台幣月薪，不過東西也貴，一個漢堡要價台幣500元，搭一次電車要價200多元台幣，而且交通運輸的時間很短又很貴，不像台灣三更半夜還在發車或坐飛機，基本上只有白天才有辦法搭乘大眾運輸系統，而且只到五點多，過了這個時段，抱歉，下次請早，不然就租車吧！相較起來，台灣真是方便太多了。&lt;br /&gt;&lt;br /&gt;挪威人似乎沒有顧客至上的概念，東西標價沒有在講折扣的，難怪他們這麼一板一眼，不像台灣價錢的彈性是可以談的，沒有定死不變的道理，無怪乎，台灣做什麼東西都講求彈性、速度，因為比較知道變通，不過這樣也可能走短線，沒有辦法建立紮實基礎。&lt;br /&gt;&lt;br /&gt;政治上的意識型態及挪威人的個性在書上也被一一提起，作者求真求善求美的個性也在書中表露，也對台灣的政治現狀做了批判及省思，也對台灣人的國家記憶不全症做了回顧及探討，作者以自己的角度出發，對台灣現有的價值觀及生活模式做了一場深度之旅。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-2925532263482737362?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/2925532263482737362/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=2925532263482737362' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2925532263482737362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2925532263482737362'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/05/blog-post.html' title='驚喜挪威'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-3789349528984867621</id><published>2009-05-19T14:26:00.000+08:00</published><updated>2009-05-19T14:27:22.501+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>digitalus</title><content type='html'>&lt;a href="http://digitaluscms.com/"&gt;http://digitaluscms.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這個專案是以Zend Framework及jQuery做為基礎構建的cms管理系統，整個系統的程式碼有一種熟悉的感覺，因為Zend Framework及jQuery正好是我最熟悉的兩套開發框架，Zend Framework是Zend官方團隊所維護及發展的，最能展現PHP物件導向的威力，jQuery是最受歡迎的javascript開發框架，兩者的結合正好可以當做我研究的對象。&lt;br /&gt;&lt;br /&gt;架好後，整套系統運作很順暢，只是專案的討論區上人氣稀疏，套件中有的功能並沒有全部實做，上open source的cms網站上看，這個專案並沒有被列為cms的選擇之一，想想也對，雖然專案有Zend Framework及jQuery的加持，但功能並不完整，最嚴重的缺點，就是套件必須安裝在apache上的根目錄上，這是在開什麼玩笑，難不成為了安裝這個套件，得弄一個虛擬主機，如果以子目錄安裝，圖片都不會出現，有的功能也不能使用，這應該是路徑的問題，其實不難解決，更動的程式碼應該不會太多。&lt;br /&gt;&lt;br /&gt;整個套件的發展潛力十足，很容易安裝，大概十分鐘就裝好了，邊看網站上的tutorial，邊操作，只須二三個小時就能上手了，功能不複雜，非常簡單易用，套件以mysql為資料庫，資料庫引擎使用innodb，這點我非常欣賞，一堆的cms都是使用MyISAM資料庫引擎，這真的不是一個好的選擇。&lt;br /&gt;&lt;br /&gt;digitalus雖然潛力十足，但前途未明，不知道未來走向如何，拿來研究，改進自己的程式碼應該不錯，但是如果套用在上線的程式上，就太可怕了，整個套件的用法應該會再變動，程式寫法也還會做變化，先看看再說，免得被當做試驗品。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-3789349528984867621?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/3789349528984867621/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=3789349528984867621' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3789349528984867621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3789349528984867621'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/05/digitalus_19.html' title='digitalus'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-589966719874427660</id><published>2009-05-18T14:51:00.002+08:00</published><updated>2009-05-18T14:54:50.466+08:00</updated><title type='text'>digitalus</title><content type='html'>&lt;a href="http://digitaluscms.com/"&gt;http://digitaluscms.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;陳瑩光老師給的網址，這個cms專案是用Zend Framework及jQuery撰寫的，看了一下程式碼，有一種熟悉的感覺，這真是太好了，不用再重頭學新的語法，過去投資的時間及精神不用新來過，本來是想用joomla來玩一些應用，不過這套專案應該會更符合需求，符合我自己的開發需求。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-589966719874427660?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/589966719874427660/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=589966719874427660' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/589966719874427660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/589966719874427660'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/05/digitalus.html' title='digitalus'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-2668651410328291595</id><published>2009-05-17T23:59:00.004+08:00</published><updated>2009-05-18T00:07:30.108+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP is NOW</title><content type='html'>&lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;&lt;/style&gt;    &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.ibuildings.com/blog/archives/1554-PHP-is-NOW.html"&gt;PHP is NOW&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href="http://www.ibuildings.com/blog/archives/1554-PHP-is-NOW.html"&gt;&lt;span style="font-size:100%;"&gt;資料來源&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;a href="http://www.ibuildings.com/blog/archives/1554-PHP-is-NOW.html"&gt;&lt;span style="font-size:100%;"&gt;http://www.ibuildings.com/blog/archives/1554-PHP-is-NOW.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;原始作者&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://blog.calevans.com/"&gt;Cal Evans&lt;/a&gt;&lt;br /&gt;Director of PCE&lt;br /&gt;Cal Evans &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;是&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Ibuildings&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;公司的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;專業發展中心的主管，他已經在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;IT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;產業&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;26&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;年了，過去&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;9&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;年，專注於&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;及&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;MySQL&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;領域。 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Cal &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;是&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;書籍及文章的作者，並且在世界上許多的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;會議場合演講， &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Cal &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的部落格在 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://blog.calevans.com/"&gt;http://blog.calevans.com&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;翻譯&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;羅仁治&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;正在轉折點上，目前有許多的因素促使&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的應用加廣加深，並把&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;scripting language&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的標籤撕掉，成為企業開發時的正式工具。&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.ibuildings.com/blog/archives/1554-PHP-is-NOW.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;許多&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;社群的開發者在過去幾年已經將&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;視為正式的開發工具，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Digg, Expedia, Yahoo &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;及 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;facebook&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;這些公司在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的討論會議上一再證實&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;是一項有用的工具，另一些公司，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.ladbrokes.com/"&gt;Ladbrokes&lt;/a&gt;, &lt;a href="http://five.tv/"&gt;Channel Five&lt;/a&gt;, &lt;a href="http://fiat.com/"&gt;Fiat&lt;/a&gt;, &lt;a href="http://panasonic.com/"&gt;Panasonic&lt;/a&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;以及 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://bbc.co.uk/"&gt;BBC&lt;/a&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;他們不但使用&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;做為系統背後的整合性程式語言，也將他應用在正式地，企業等級地交易流程系統中。在數目不斷成長地大型開發商中，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;己經從為何使用的思考邏輯變成了為何不使用的問題。&lt;/span&gt;&lt;/p&gt;   &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;開放源碼的經濟效益&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;許多因素的匯聚造成了這個轉折點，目前的世界經濟局勢是最大的影響因素，在泡沫經濟期間，公司很容易花費六位數或七位數的代價購買私有軟體，這可看出&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;IT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;系統缺乏投資報酬率，經濟狀況好的時候，經理人依據老闆專業術語數量的平方做為採購依據，換一個有趣的方式說明，就是在經濟狀況好時，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;IT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;系統能不能跟上潮流是判斷的依據，而不是根據最低的貢獻度。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;當狀況轉壞時，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;IT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;預算緊縮，新科技必須展現在公司財務報表中的貢獻度，而不是順應潮流。&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;在軟體經濟時代，開放原始碼及&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;與私有軟體相較，有許多優勢，當然，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;最大的優勢就是不須授權費用，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的延伸功能 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PEAR PECL &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;以及以&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;搭建的開發框架都是免費的，暨然不用授權費，維護費及購買費用，以更少的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;IT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;預算就可以做更多事情。&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;即使經濟情勢呈現下滑的走勢，免費仍然不是佈署&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的決定性理由，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;有自己的方式增加附加價值，從簡單的類別庫到系統的佈署都有公司提供支援或服務，許多公司，像&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.zend.com/"&gt;Zend&lt;/a&gt;, &lt;a href="http://phparch.com/"&gt;php|architect&lt;/a&gt;,&lt;/span&gt; &lt;a href="http://nusphere.com/"&gt;&lt;span style="font-size:100%;"&gt;NuSphere&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;會替別的公司或開發人員，開發須支付費用的開發工具或服務，這樣的方式，與開放原始碼公司 &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;a href="http://ellislab.com/"&gt;EllisLab&lt;/a&gt;, &lt;a href="http://sensiolabs.com/"&gt;Sensio Labs&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;及 &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;&lt;a href="http://acquia.com/"&gt;Acquia&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;的營運方式雷同，&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;免費，不代表跟&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;相關的所有東西都是免費的，當與&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;相關的產品或服務不是免費時，公司必須決定他們的標價是不是增加了公司的價值。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;這個工具變得更強大了&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;第二個因素是即將釋出的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php 5.3&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;版本，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP 5.3&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;目前在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;RC&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;階段，最終版本會在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;2009&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;年夏天公佈，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP 5.3&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;不像大部份的小改版，他是有許多新功能的大改版，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;物件模型的改變，強化的新語法，引擎的改善，使他比之前的版本快速穩定，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的核心開發成員花了很多時間強化穩定度，並加強&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;引擎—&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Zend Engine&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的功能，雖然每一個新的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;版本會帶來一些新功能，只有&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP 5.3&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;提供有價值的強化功能。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;有許多朋友&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;我們提到了&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;系統，也提到了供應者的深度及廣度，然而，造成這個轉折點的另一個因素，是&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;現在開始被許多大廠支援，他們對&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的成功有商業興趣，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;IBM&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;釋出了&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www-01.ibm.com/software/webservers/smash/"&gt;WebSphere sMash&lt;/a&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;也就是大家熟知的 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.projectzero.org/"&gt;ProjectZero&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;。&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;sMash&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;上的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;是在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;JVM&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;上執行的，而不是在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Zend Engine&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;上跑，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;sMash&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;上的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;並沒有包含所有的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;延伸套件，但己經可以執行許多的重要應用，像是&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.sugarcrm.com/"&gt;SugarCRM&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;及 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.phpbb.com/"&gt;phpBB&lt;/a&gt;. IBM&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;採用&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;ProjectZero&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;，代表對&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;語言的承諾及擔保，他們選擇&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;做為開發的語言不只代表他們對這個語言的強大信心，也對圍繞在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;四周的社群投下信任票。&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;微軟對&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的興趣每年都在增加，開始時是在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;2006&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;年，對事業伙伴&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Zend&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;感興趣，再來是每年發表的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Microsoft Web Developers Summit&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;都會有&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;，他們已經承諾，會讓&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;windows&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;上長期地健康發展，他們甚至雇用了一位全職的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;php&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;核心開發人員，強化&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;windows&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;上的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;，努力的成果，就是最近在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;FastCGI&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;上發表的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;在&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;windows&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;上的成熟度就跟&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;.net&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;或&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;java&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;相同，可以用來開發各種規模的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;web&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;應用程式。&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Oracle&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;長期支援&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;，了解並支援社群，鼓勵他們使用公司的旗艦產品，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Oracle&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;會透過&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;a href="http://blogs.oracle.com/opal/"&gt;Christopher Jones&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;定期釋出&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;核心的函式庫或程式碼，此外，他們也會對&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的會議提供財務或其他援助，像是即將到來的&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://phpconference.nl/"&gt;Dutch PHP Conference&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;就接受&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Oracle&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的援助。&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;最後一位但不是最不重要的一位朋友，是 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://adobe.com/"&gt;Adobe&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;。他們援助的計畫，像是 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://amfphp.org/"&gt;AMFPHP&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;及 &lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://framework.zend.com/manual/en/zend.amf.html"&gt;Zend_AMF&lt;/a&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;將&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;整合為&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Adobe&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;開發工具的一部份。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;結論&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;這三個因素相加，經濟情勢轉壞，下一個版本的強化，及大廠的支援，共同指出&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;2009&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;第二季到&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;2010&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;在企業開發領域占有一席之地，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;非常普及，穩定並有良好支援，如果你問到&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;IT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;經理人，採用新科技的三個因素是什麼，他們會至少說出其中的二個原因，這是&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的轉折點，對開發人員而言，這代表更多的機會，對&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;IT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;經理人來說，這開啟了許多不可能實行的專案另一道門，不論如何，&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;時代的到來，意味著人人有機會成功並互相分享。&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;Ibuildings&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;是&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的支援廠商，我們相信，回饋社群是我們的義務，他們給了我們機會站在領先地位，我們也是世界上&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;開發商的翹楚之一，不論你是才剛開始探索&lt;/span&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的可能性，或是找尋一位伙伴實現這些可能性，我們希望可以和你一起奮鬥，就像是許多公司一樣。&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:AR PL UMing HK,serif;"&gt;&lt;span style="font-size:100%;"&gt;(c) 2009 Ibuildings All rights reserved. Use by permission&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-2668651410328291595?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/2668651410328291595/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=2668651410328291595' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2668651410328291595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2668651410328291595'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/05/php-is-now.html' title='PHP is NOW'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-495833695169851698</id><published>2009-04-29T09:27:00.002+08:00</published><updated>2009-04-29T09:28:19.279+08:00</updated><title type='text'>人聲雜響  螢火點點</title><content type='html'>昨晚學校護士阿姨臨時召集大隊人馬，約大家晚上一起去看螢火蟲，約好的時間是六點集合，為了趕上集合時間，隨便抓了蛋糕跟玉蜀黍把肚子填飽，就趕去跟大家會合。&lt;br /&gt;&lt;br /&gt;車上阿賢跟佩宜與佩琦一直鬥嘴，阿賢一直被虧，不過他也一直虧自己，車上真是非常熱鬧，第一站停留的竟然是晚飯的地方，我心想，天啊！我趕什麼勁，早知道一口飯都不吃，美食當前，我根本沒辦法下嚥，我已經飽了。&lt;br /&gt;&lt;br /&gt;到目的地後，往山裡走，月光照射下，不難認路，產業道路兩旁螢火蟲一閃一滅，很多人會去抓螢火蟲，有一、二隻螢火蟲還會飛到我身上，不過都不會想把螢火蟲抓住，我只要欣賞就好了，遠遠看比較漂亮，喜歡慢慢走、慢慢看，看這些漂亮的燈火變化，聽人嬉鬧，拍照的愉悅笑聲。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-495833695169851698?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/495833695169851698/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=495833695169851698' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/495833695169851698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/495833695169851698'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/04/blog-post_29.html' title='人聲雜響  螢火點點'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-2601052884145217923</id><published>2009-04-28T00:43:00.000+08:00</published><updated>2009-04-28T00:44:43.483+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='心得'/><title type='text'>放鬆</title><content type='html'>晚上跟同事一起吃飯，雖然還是一樣沈默，大部份時間都是靜靜聽著同事的喧鬧鬥嘴，可是會有一種融入人群的感覺，逃避人群太久了，這樣跟人相處讓我漸漸可以放開，尤其對面的小女生講話一直不停，有時戰火還不時會延燒到這，話語非常直接，覺得很好玩。&lt;br /&gt;&lt;br /&gt;這個小女生非常活潑，飯後又邀大家到pub裡頭，這是我第一次到pub，裡頭燈光昏暗，她又招呼朋友快點到，她的個性大概很急吧!我是思考型的，事情總要想清楚後，計畫好後還不太敢動手，她是手機拿起來就直接按了，真是滿新奇的，十足的行動派，不知道要怎麼形容。&lt;br /&gt;&lt;br /&gt;回到家後，樓下留下一盞燈還亮著，爸媽都睡了，坐在電腦前，心中煩躁的情緒突然消失，一些解不開的程式設計的問題都暫時拋開，有一種放鬆的感覺，真舒服。這次大概不會有任何結果，不過心頭舒服，交個朋友還不錯，原來人有時也需要一些朋友之間互相的交流，以後有時麼聚會，管他是什麼性質，只要不是打官腔的飯局，都去，才會找到情緒的出口。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-2601052884145217923?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/2601052884145217923/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=2601052884145217923' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2601052884145217923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2601052884145217923'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/04/blog-post_28.html' title='放鬆'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-192244242168111138</id><published>2009-04-27T09:46:00.000+08:00</published><updated>2009-04-27T09:47:29.194+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='心得'/><title type='text'>蘇杭四日遊</title><content type='html'>全中運期間，苗栗市的學校做為選手村，學校放假，這段期間剛好可以做為旅行假期，讀書會的老師安排了蘇杭之旅，邀大家出遊，自己心中有事放不下來，本來是不太想去的，只是杜子老師喜愛旅遊，平常又非常關心讀書會的成員，受到杜子老師的感染後，就決定去了，體驗一下蘇杭風情及上海的繁華。&lt;br /&gt;&lt;br /&gt;踏上大陸的土地後，導遊招呼大家上了小巴，當地的全程導遊，單名一個雷字，喜愛中國古典文學，愛寫詩，是位性情中人，一路上，中國古典的詩詞歌賦不斷從他口中吐出，優美的景物在典雅的辭藻襯托下，彷彿成了一幕幕的電影場景，讓人回味當時的故事情節，白蛇傳的故事、蘇軾的才華洋溢、杭州的富庶過往，就在腦海中一一浮現，這些豐富的歷史故事，讓優美的景物頓時活了起來，讓人不禁想再三停留在這些景點當中。&lt;br /&gt;&lt;br /&gt;第一天及第二天早上，旅行社還安排了蘇州當地的地陪，這位地陪是一位嗆辣的女導遊，國學素養一樣很好，講話單刀直入，個性直率豪不掩飾，專業素養真是沒話說，杜子老師跟林老闆有時會故意脫隊，到處走走晃晃，這位女導遊就會毫不客氣地說教，車上的讀書會成員就會開始跟她抬槓，全車的人都一起哈哈大笑，這種測試人性的方式，真的滿好玩的，杜子老師並沒有生氣，跟她一起拍照，賠不是，這位導遊把我們當做小學生在帶，感覺上，很像我們在帶學生的方式。&lt;br /&gt;&lt;br /&gt;西湖的龍井茶莊，服務員介紹杭州最有名的龍井茶，席間，有人提到微婚條件，這位小姐直說「房卡、車鑰拿來」，還真直接，讓人體會到兩岸人民個性上的差異，只不過這位小姐已婚，這句話可能只是說說而已吧！杭州真是一座美麗的都市，遊覽車行經的每條路上，路旁或道路中央都會栽種樹木，這座城市的居民，每人可以分到１５棵樹木，真是超級幸福的，在綠樹環繞中，西湖悄悄地出現在視線中，第一眼看去，湖面廣闊，台灣的日月潭與之相比，簡直是小池塘，如果能在這住上幾天，肯定值得，壯闊的湖面，美麗的景緻，絕對能體驗湖光山色之美。&lt;br /&gt;&lt;br /&gt;上海市不愧是新興都市，高樓林立，城市規畫井井有條，到處都在大興土木，上海外灘的老樓房，有濃濃的歐洲風味，站在江邊看這些樓房，會懷疑自己真的是身在中國嗎？怎麼中國會有一個地方，建築風情像是歐洲大陸的風格，這種歷史情調，台北無法營造，外灘對面的高樓一棟棟矗立，城市規畫有條不紊，從高樓向下俯瞰，車流量龐大，許多地方都在塞車，繁華景緻猶勝台北，只是沒有雜亂無章的招牌或是破壞景緻的頂樓違建，果然有大國氣勢，大國崛起的企圖心令人讚嘆，城市規畫的氣度、規模，執行的魄力、膽識，思維的細膩、周全，大概難有其他城市可以匹敵吧，我不清楚細節，直覺上這真是一個快速向前飛躍的國家。&lt;br /&gt;&lt;br /&gt;蘇州留園停留的時間短暫，林園設計細膩，建築思想中體現人文概念，標準的中國園林建築，以前都不覺得中國建築特別漂亮，但這次的參觀後，真覺得美，台灣雖然也有園林設計，但規模這麼大，設計這麼繁複的，還沒看到，就像中國電影一樣，在沒看赤壁之前，總覺得中國古代軍隊的軍事實力沒什麼看頭，看過赤壁這種大手筆的戰爭片後，才會有震撼的感覺，雖然與好來坞相比，還有一段差距，但中國古代部隊強悍的作戰能力已經令我刮目相看。&lt;br /&gt;&lt;br /&gt;這次的旅遊，住宿飯店都是五星級的，在台灣還沒自費住過五星飯店，五星飯店的住宿品質果然不同，房間的設計細緻貼心，整體設計非常舒服，晶華開的五星飯店的分店，我比較欣賞，跟我喜歡的設計風格很像（simple、clear、clean），簡單、明白、乾淨是我設計網站時的設計座右銘，說起來簡單，但要做到，背後必須要有非常好的規畫能力及自我堅持，不然很容易就放棄的，這種風格做起來是困難重重的，不過使起來非常舒服，沒有負擔。&lt;br /&gt;&lt;br /&gt;回程的機上，和杜子老師坐在一起，他觀察到一個現象，飛機停妥後，所有人都離開位子，站在走道上，只剩下杜子老師、我(因為我出去的位置被杜子老師堵住了)和林老闆三個人還坐在位子上，杜子老師用了一個故事比喻這種現象：有一位雞農養了許多的雞，有一天，一隻老鷹飛過雞舍上空，被一隻小雞發現，立刻發出訊息警告所有的雞隻，雞舍立刻陷入一片騷動中，雞農被這陣騷動聲響驚動，跑動雞舍一看，整個雞舍的雞隻互相踐踏，死傷慘重，假若沒有任何雞隻發現老鷹在上空盤旋，就不會有這麼嚴重的死傷。杜子老師接著說：當人們說台灣完了、股市要崩潰了，其實是自己嚇自己，這就是人性，人習慣和團體一起行動，而不是做自己，要知道如何做自己是有難度的。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;從小到大，我們就被教育大陸是一個落後國家，如果到繁華的上海一趟，這種執著會立刻崩解，進步的上海，繁華程度絕對在台北之上，如果死抱著之前的想法，是一種自我封閉，其實自己心中還有許多的執著放不下，這種執著讓我脫離現實，沒辦法看清事情，放下心中的界限，不要限定什麼事情一定要怎麼處理，朋友間的關係必定要如何，這樣就會快樂一些吧&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-192244242168111138?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/192244242168111138/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=192244242168111138' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/192244242168111138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/192244242168111138'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/04/blog-post_27.html' title='蘇杭四日遊'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-2754384941582079783</id><published>2009-04-06T11:31:00.002+08:00</published><updated>2009-04-06T11:38:08.768+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>流量分析軟體</title><content type='html'>二套流量分析軟體&lt;br /&gt;&lt;br /&gt;1.google analytics&lt;br /&gt;&lt;br /&gt;申請一個帳號後就可以使用，申請流量服務時，只要將javascript程式碼貼在想要統計流量的網頁上，google就會幫你進行網頁流量的統計，不用再費心於伺服器的架設，程式的修改，非常方便。&lt;br /&gt;&lt;br /&gt;免付費的服務有一些限制，不過已經非常夠用了。&lt;br /&gt;&lt;br /&gt;2.piwik：http://piwik.org/&lt;br /&gt;&lt;br /&gt;phpMyVisites的更新版，要自行架設server，以php及mysql撰寫而成，功能非常不錯，有空可以研究研究。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-2754384941582079783?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/2754384941582079783/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=2754384941582079783' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2754384941582079783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2754384941582079783'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/04/blog-post.html' title='流量分析軟體'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-5527133122937670375</id><published>2009-03-08T22:25:00.000+08:00</published><updated>2009-03-08T22:26:52.879+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>為什麼使用jQquery</title><content type='html'>jQuery是一套以javascript開發的函式庫(開發框架)，但這套函式庫的用法及背後的觀念與javascript大不相同，jQquery的開發概念就以直覺、容易使用做為開發的目標，所以使用起來非常容易上手，只要熟悉jQuery的用法及使用概念，會被jQuery精簡的程式碼及直覺的設計方式吸引，jQuery是一套容易上手的javascript函式庫。&lt;br /&gt;&lt;br /&gt;網路上有非常多的javascript開發框架，許多的開放源碼套件都會採用這些開發框架，使用這些javascript​的開發框架，可以省去不少自行撰寫函式庫的時間，不用重頭再去撰寫功能相同功能的函式庫。jQquery、prototype、dojo這些javascript​的開發框架讓我們可以只使用jQuery或是prototype或是dojo的語法就與不同的瀏覽器溝通，而不同的瀏覽器表現的行為會是相同的，如果直接以javascript撰寫這些功能，就必須考慮不同的瀏覽器所表現出的結果會是不相同的，必須判斷瀏覽器的種類再分別撰寫相同的功能，使用jQeury這類開發框架，可以讓我們省去這道步驟，jQuery這類開發框架，已經幫我們處理掉這些問題，我們只要專心寫程式邏輯，而不用去考慮瀏覽器的種類及版本的問題，使用這類開發框架，可以輕易跨越瀏覽器的鴻溝，讓client程式天生就有跨越瀏覽器平台的基因。&lt;br /&gt;&lt;br /&gt;許多的開發框架，其實並不容易親近，看了dojo的文件，我覺得與原本的javascript相比，其實一樣麻煩，並沒有減少多少撰寫程式碼所需花的功夫。jQuery的設計原則就大不相同了，基本上，撰寫jQuery程式只要把握兩個原則，第一個原則就是要找到你要叫他做事情的瀏覽器物件，這個物件可能是一個文字輸入框、一個超連結，找這些瀏覽器物件的方式，是使用css的物件階層架構，第二個原則就是發生了什麼事件後，這些你找到的瀏覽器物件，要做什麼事，我們撰寫的邏輯，就是在選定的物件及事件內，寫程式，叫瀏覽器做事情，清楚明白，不用跟一堆迴圈奮戰，節省很多寫程式的時間。&lt;br /&gt;&lt;br /&gt;jQquery的plugin非常多，官方的ui plugin套件，功能非常強悍，許多client端的功能都已經做進去了，使用文件豐富，很容易上手，非官方的plugin更不得了，太多了，要用的功能不用自己重頭寫，找一找，非尚豐富的，許多的plugin也是非常有質感的，可以快速套用到自己的程式中。&lt;br /&gt;&lt;br /&gt;使用jQuery的人非常多，現在還有中文書籍可以參考，大陸的參考資料更多，線上文件也很豐富，我的第一個jQuery程式就是看線上文件寫出來的，如果不想買書，直接看線上文件也可以很容易學會這套易學易用的javascript開發框架。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-5527133122937670375?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/5527133122937670375/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=5527133122937670375' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5527133122937670375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5527133122937670375'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/03/jqquery.html' title='為什麼使用jQquery'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-503890281455092893</id><published>2009-02-25T22:00:00.002+08:00</published><updated>2009-02-25T22:05:40.121+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>Zend_File的功能</title><content type='html'>Zend Framework的文件上列出Zend_File的功能算非常完整的，看文件看得非常認真，想說，就用現成的套件就可以了，把文件都看完後，上線實做卻發現一堆的功能都是正在開發中，實際檢視原始碼，才發現天啊! 根本就沒有這些功能的程式碼，心裡真是圈圈叉叉。&lt;br /&gt;&lt;br /&gt;解決方式有兩個，自己寫一個物件或是在每段程式碼都代入上傳的程式碼，當然是寫一個物件，省得多寫一堆東西。煩啊!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-503890281455092893?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/503890281455092893/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=503890281455092893' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/503890281455092893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/503890281455092893'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/02/zendfile.html' title='Zend_File的功能'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-3133413640461025653</id><published>2009-02-23T16:26:00.002+08:00</published><updated>2009-02-23T16:41:40.451+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='心得'/><title type='text'>美麗的海灘</title><content type='html'>星期六看了一天的Zend Framework文件，眼睛不舒服，下午騎著摩托車到處亂晃，本來是想去水尾看海的，但是忘了怎麼走，因為那是高中時代的事了，東晃西晃，不知怎麼的就到了後龍海堤。&lt;br /&gt;&lt;br /&gt;站上海堤，出海口的幾座風力發電機，遠遠望去，感覺好舒服，最高處的風力發電機的位置應該就是著名的景點───好望角了，好望角人太多了，像是菜市場，人擠人的，想在那邊安靜的走一會，是不可能的。&lt;br /&gt;&lt;br /&gt;海堤下，是黑灰色的沙灘，不知道是不是因為眼睛太累的關係，第一次感覺黑灰色的沙灘是如此的美麗，冬天的夕陽照射下有一種含蓄沈靜的美，看著海，看著沙灘，自己一個人在沙灘上慢慢走，心頭很舒服，這時，腦中的Zend Framework的運作細節還是在運作，只是沒有剛接觸時的茫然感，而是一種紛亂的感覺，底層的運作細節、Adapter、Abstract、Interfacce、事件觸發等都在互相連結(也可能是互相糾結吧），自己覺得必須抽離這種感覺，免得神經發作。&lt;br /&gt;&lt;br /&gt;這個時候，很想跟另一個人一起散步說，不過，應該很難，心頭五味雜陳，內心的煩躁感只是稍微平歇，事情放心裡，很難過。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-3133413640461025653?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/3133413640461025653/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=3133413640461025653' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3133413640461025653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3133413640461025653'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/02/blog-post_23.html' title='美麗的海灘'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-5483325290552986491</id><published>2009-02-23T15:59:00.002+08:00</published><updated>2009-02-23T16:20:58.461+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='心得'/><title type='text'>心痛的感覺</title><content type='html'>很喜歡一個女生，有氣質又漂亮，只是似乎很不好追，幾次短暫的接觸，態度很冷的，令我直打哆嗦，大概是對我沒意思吧！心碎！！長這麼大，很少有這種感覺說，心頭酸酸的，想提起勇氣，又不想再經歷這種感覺，真是矛盾。&lt;br /&gt;&lt;br /&gt;換個方式好了，我個性直來直往的，大概嚇到人家了吧！用書面方式好了，避免去嚇人，希望有用，也省得再次體驗在冷凍庫的感覺，避免失落感再次浮現心中，這種感覺很難過的。&lt;br /&gt;&lt;br /&gt;不過，雖然很想再嚐試，但總是不能付諸行動說，這也很難過說，老天！怎麼辦？人生的十字路口，這需要用心經營的，不跨出去就不會有結果，哪怕只有過程，我都會覺得很快樂說，但是第一步很重要。&lt;br /&gt;&lt;br /&gt;不管了，等一下先去打球，晚上再慢慢從長計議。&lt;br /&gt;&lt;br /&gt;晚上再把要改寫的程式用workbench畫出來，規畫程式的架構，希望把不好的感覺淡化，這是我喜歡做的事，希望有效，思考程式的流程也可以讓我專注，忘掉這些，如果沒辦法，就只好轉移追求目標了，希望這種事不要發生。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-5483325290552986491?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/5483325290552986491/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=5483325290552986491' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5483325290552986491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5483325290552986491'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/02/blog-post.html' title='心痛的感覺'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-3720585092822711079</id><published>2009-02-18T15:46:00.004+08:00</published><updated>2009-02-18T15:57:23.559+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>clone virtualbox的磁碟系統檔</title><content type='html'>在virtual box中建立的ubuntu映像檔，使用VBoxManage命令可以建立另一個相同的映像檔，就不用重灌另一套ubuntu，在virtual box中如果要建立多個server同時運行的環境，就非常簡單了，只要用VBoxManage命令拷貝多個ubuntu映像檔就可以很方便的建立多個server，以便進行整個系統的實做。&lt;br /&gt;&lt;br /&gt;為了進行mysql replication的實做，我用virtual box的VBoxManage命令，另外烤貝了一份ubuntu映像檔，但烤貝的映像檔，網卡都動不了，後來使用dmesg|grep eth命令，發現系統竟然要我改設定檔的網卡代號，真神奇，原來映像檔的網卡代號是eth0,eth1，烤貝出來的映像檔，網路卡號就必須是eth2,eth3，不然網卡不會動，這真神奇。&lt;br /&gt;&lt;br /&gt;網卡設定好後，測試網路沒問題後，設定mysql的master及slave，實際上機跑起來，一切順暢，slave上都可以自動接收master的資料，這以後要做自動化的備份就比較方便了，不用手動做這些備份的煩人動作。&lt;br /&gt;&lt;br /&gt;再來，就要測試innodb database engine的各種狀況及dead lock的處理，一切沒問題後再寫程式，程式上線不能出問題，innodb的部份要小心測試，不然到時出錯，麻煩就大了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-3720585092822711079?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/3720585092822711079/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=3720585092822711079' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3720585092822711079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3720585092822711079'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/02/clone-virtualbox.html' title='clone virtualbox的磁碟系統檔'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-4193458306324791995</id><published>2009-02-09T10:46:00.004+08:00</published><updated>2009-02-09T11:20:21.319+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>php編輯器比較</title><content type='html'>目前我正在使用的php編輯器有兩套，一套是eclipse pdt，另一套是netbeans ide，這二套編輯器都是開放源碼軟體，不用付費就可以使用。eclipse pdt可以在www.zend.com的網站上下載使用，netbeans ide可以在www.netbeans.org網站上下載。&lt;br /&gt;&lt;br /&gt;這兩套軟體的操作概念都非常類似，所有相關的程式碼、檔案、圖片等等資源匯聚成一個專案，再針對專案撰寫程式，或進行設定。在進行程式碼撰寫前，必須先建立一個專案，專案其實就是一個目錄，將所有的程式碼、檔案等等資料放在這個專案裡(目錄)，以便進行專案的設定或管理。&lt;br /&gt;&lt;br /&gt;eclipse除了專案的概念外，他與netbeans還有一個不同點，eclipse有workspace的觀念，workspace其實也是一個目錄，所有的專案都必須放在這個workspace下，不然eclipse就會找不到相關的專案，如果放專案的位置與目前的workspace不同，就必須切換workspace的位置，才能使用專案。netbeans就沒有workspace的觀念，設定專案時，就必須指定專案的目錄位置，專案可以散落在各個不同的目錄。&lt;br /&gt;&lt;br /&gt;eclipse的檔案管理能力比較強悍，程式碼自動補齊的功能也比較完善，在eclipse中，可以直接匯入或匯出檔案，但在netbeans中就沒有這個功能，必須用檔案總管進行拷貝的動作，如果在eclipse中直接拷貝檔案是會出問題的，一定要用內建的檔案匯入匯出功能，eclipse會追蹤這些檔案訊息，如果直接拷貝，eclipse就無法追蹤了。&lt;br /&gt;&lt;br /&gt;eclipse的畫面比起netbeans，真是漂亮太多了，我不太喜歡使用netbeans，畫面感覺比較粗糙，沒那麼有質感，這二套軟體的鍵盤快速鍵，不太相同，轉換編輯器時會有一段適應期。&lt;br /&gt;&lt;br /&gt;eclipse的php檔案內如果含有html碼，如view檔案，這類php檔就會有排版用的html碼，eclipse的自動重排功能沒有辦法把html排得很整齊，他會把html和php程式碼混在一起，不重排還好，一重排簡直慘不忍睹，netbeans這方面的功能就好太多了。&lt;br /&gt;&lt;br /&gt;這二套編輯器都要花一段時間適應，操作上各有千秋，不過我比較喜歡使用eclipse，eclipse有免安裝的版本，下載後直接解壓縮後就能用了，netbeans就一定要安裝，不過安裝的速度很快，一直按下一步就好了，這二套軟體都是跨平台的，目前我家裡的作業系統是ubuntu，上班的地方是xp，這樣就不會有跨平台的問題了，這大概就是開放源碼的好處吧！轉移作業系統比較方便。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-4193458306324791995?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/4193458306324791995/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=4193458306324791995' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4193458306324791995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4193458306324791995'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/02/php.html' title='php編輯器比較'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-7565606865940424827</id><published>2009-01-27T13:40:00.002+08:00</published><updated>2009-01-27T13:45:55.804+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='演算法與資料結構'/><title type='text'>佇列</title><content type='html'>佇列是先進先出的資料結構，先塞進來的資料就必須先取出。&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;class Queue{&lt;br /&gt;  private $head=0,$tail=0;&lt;br /&gt;  private $max=100;&lt;br /&gt;  private $data=array();&lt;br /&gt;  private $error;&lt;br /&gt;&lt;br /&gt;  public function pop(){&lt;br /&gt;    if($this-&gt;head != $this-&gt;tail){&lt;br /&gt;      $this-&gt;head++;&lt;br /&gt;      if($this-&gt;head &gt;$this-&gt;max){&lt;br /&gt;        $this-&gt;head = $this-&gt;head -$this-&gt;max - 1;&lt;br /&gt;      }&lt;br /&gt;      $data = $this-&gt;data[$this-&gt;head];&lt;br /&gt;      unset($this-&gt;data[$this-&gt;head]);&lt;br /&gt;      return $data;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function push($data){&lt;br /&gt;    $original=$this-&gt;tail;&lt;br /&gt;    $this-&gt;tail++;&lt;br /&gt;    if($this-&gt;tail &gt;$this-&gt;max){&lt;br /&gt;      $this-&gt;tail = $this-&gt;tail - $this-&gt;max -1;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if($this-&gt;tail == $this-&gt;head){&lt;br /&gt;      $this-&gt;error='佇列已滿';&lt;br /&gt;      $this-&gt;tail=$original;&lt;br /&gt;      return false;&lt;br /&gt;    }else{&lt;br /&gt;      $this-&gt;data[$this-&gt;tail]=$data;&lt;br /&gt;      return true;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function showQueue(){&lt;br /&gt;    foreach($this-&gt;data as $key=&gt;$value){&lt;br /&gt;      echo $key.'=&gt;'.$value."\n";&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$queue=new Queue();&lt;br /&gt;&lt;br /&gt;for($i=0;$i&lt;=2000;$i++){&lt;br /&gt;  $queue-&gt;push($i);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;for($i=0;$i&lt;39;$i++){&lt;br /&gt;  $queue-&gt;pop();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;for($i=0;$i&lt;100;$i++){&lt;br /&gt;  $queue-&gt;push($i);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$queue-&gt;showQueue();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;程式碼解說:&lt;br /&gt;Queue::pop() 取出資料&lt;br /&gt;Queue::push() 塞進資料&lt;br /&gt;Queue::showQueue() 列出佇列內的所有資料&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-7565606865940424827?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/7565606865940424827/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=7565606865940424827' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7565606865940424827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7565606865940424827'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/01/blog-post_27.html' title='佇列'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-573738750977341590</id><published>2009-01-25T00:14:00.003+08:00</published><updated>2009-01-27T13:47:04.703+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>更改innodb預設的資料庫存放位置</title><content type='html'>ubuntu上預設存放innodb資料庫的位置是/va/lib/mysql，這真不是一個存放資料的好位置，如果作業系統是32位元的，單一檔案的上限是2G，最好是使用整個分割區當做innodb資料庫的存放位置，這樣就沒有2G的限制，因為這是分割區，而且效率會比較好。&lt;br /&gt;&lt;br /&gt;試了幾個方式都試不出來，花了一整天，真是煩人，不過用google上網找資料，二分鐘內就解決了，感謝google，用起來真方便說，參考網走如下:&lt;br /&gt;http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html&lt;br /&gt;&lt;br /&gt;整個步驟如下:&lt;br /&gt;1.開啟/etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;2.將/目錄名稱/ r,及目錄名稱/** rwk,加入以/va/lib/mysql開頭的指令行下面&lt;br /&gt;3./etc/init.d/apparmor reload&lt;br /&gt;4./etc/init.d/mysql restart&lt;br /&gt;&lt;br /&gt;這樣就可以將innodb的資料存放到不同位置，而不會產生錯誤訊息，使mysql無法啟動&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-573738750977341590?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/573738750977341590/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=573738750977341590' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/573738750977341590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/573738750977341590'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/01/innodb.html' title='更改innodb預設的資料庫存放位置'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-8269679221179345296</id><published>2009-01-24T12:18:00.000+08:00</published><updated>2009-01-24T12:20:47.919+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='心得'/><title type='text'>看山又是山</title><content type='html'>最近把Zend Framework的文件下載後，列印出來，讀讀這些paper，Zend Framework每個物件的用法雖然不同，但背後的運作邏輯卻是相通的，這是一種思考方式的轉變，將程式設計的方式由程序導向的方式轉變為以物件導向的方式進行思考，將傳統程式設計模式以直接解決問題的思考方式，轉變為以設計出架構，將問題分類為不同的階層及架構後，再設計出適當的物件，擺在不同的架構及階層中，再將問題解決。&lt;br /&gt;&lt;br /&gt;這種設計方式，站在程式計設師的角度來說，可是一點都不直覺，以設計電腦來做說明，為了讓電腦完成運算的功能，如果以傳統程序導向方式的思考方式，CPU、記憶體、硬碟這些東西，是完成運算的功能，就會把他們全部兜在一起，結果一台電腦中，所有的功能(CPU運算、記憶體的記憶功能、硬碟的儲存功能)就會全部混在一起，而不是分拆成不同的物件，程序導向只要單線思考，以完成功程式的功能即可，物件導向的思考方式就不同，必須將電腦折成CPU、記憶體、硬碟等物件，還要考慮這些物件怎麼連接，如何組合這些物件一起運作，除了要完成必要的功能，還要設計出一套能夠運作的架構，如CPU怎麼與主機板連接，怎麼與記憶體做協同運算。&lt;br /&gt;&lt;br /&gt;物件導向的思維邏輯，在於建立一套問題解決的架構，讓經驗可以被重複應用，而不是重複相同的程式編碼作業，就像電腦的設計一樣，將CPU、記憶體、硬碟分拆成不同的元件後，這套元件化的設計階層架構就可以被重複使用，不論CPU的速度是怎麼加快，記憶體的容量如何增長，電腦元件組合的階層架構還是不變的，這就是物件導向的思維方式，從實務經驗建立問題解決的架構。&lt;br /&gt;&lt;br /&gt;剛接觸物件導向時，由於只接觸概念部份，認為這真是直覺的方式，只要把程式分拆成一個個的元件，就可以完成程式設計，是非常容易的，就像初學畫的人要畫山一樣，只不過是畫一座山嘛！畫出那座山就好了，這應該就是看山是山的階段。&lt;br /&gt;&lt;br /&gt;等到實際撰寫程式碼，這跟傳統程式導向的方式大不相同，變得很複雜，為什麼不直接把功能做出來就好了，為什麼繞了一大圈解決問題，這就跟學畫當中的人心境相同，不過是畫一座山嘛！為什麼還有那麼多的畫法及理論。這是看山不是山的階段，滿腦子想的都是一些技巧及注意事項。&lt;br /&gt;&lt;br /&gt;比較熟悉物件導向的思考方式及程式撰寫風格後，會發現世界是那麼的美好，一個個的元件排列組合後就能完成各種程式的功能，這種方式比起傳統的開發方式，架構的彈性及威力不能相比。這就類似技巧比較成熟的畫家，要畫山時，只會想到山的美好，會想表現出山在自己心中的感覺，這就是看山又是山的階段吧！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-8269679221179345296?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/8269679221179345296/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=8269679221179345296' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8269679221179345296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8269679221179345296'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/01/blog-post_24.html' title='看山又是山'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-5256156996784048336</id><published>2009-01-23T15:52:00.002+08:00</published><updated>2009-01-23T16:01:01.009+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>virtual box灌ubuntu server出問題</title><content type='html'>環境&lt;br /&gt;作業系統:ubuntu desktop&lt;br /&gt;軟體:virtual box&lt;br /&gt;&lt;br /&gt;問題&lt;br /&gt;在ubuntu desktop上的virtual box上安裝完ubuntu server後，重新開機，會出現下面這行錯誤:&lt;br /&gt;&lt;br /&gt;this kernel requires the following features not present on your CPU&lt;br /&gt;&lt;br /&gt;用google找了一下，十分鐘內就找到解決辦法了&lt;br /&gt;&lt;br /&gt;網址:&lt;br /&gt;http://ubuntuforums.org/showthread.php?t=905497&lt;br /&gt;&lt;br /&gt;解法:&lt;br /&gt;1.開啟vitual box&lt;br /&gt;2.點選  機器-&gt;設定值-&gt;一般-&gt;進階&lt;br /&gt;3.enable PAE/NX 打勾&lt;br /&gt;4.重新啟動即ok&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-5256156996784048336?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/5256156996784048336/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=5256156996784048336' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5256156996784048336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5256156996784048336'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/01/virtual-boxubuntu-server.html' title='virtual box灌ubuntu server出問題'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-8466063492218095168</id><published>2009-01-22T19:05:00.002+08:00</published><updated>2009-01-22T19:14:35.286+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='演算法與資料結構'/><title type='text'>堆疊</title><content type='html'>堆疊是一種後進先出的資料結構，這種資料結構類似上部開口的杯子，把從球上方的開口丟進杯子後，就要從上方的開口處取出球。&lt;br /&gt;&lt;br /&gt;資料在堆疊中放進去的方式及取出的方式也是相同的，先丟進去的資料，必須等上層的資料都被取出後，才能取出。&lt;br /&gt;&lt;br /&gt;這是一種後進先出的方式，最後丟進去的資料，可以最先被取出來使用，最早被丟進去的資料，卻必須在所有資料取出後，才能取出。&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;    class Stack{&lt;br /&gt;&lt;br /&gt;        private $sp=-1;&lt;br /&gt;        private $spMax=100;&lt;br /&gt;        private $data=array();&lt;br /&gt;&lt;br /&gt;        public function pop(){&lt;br /&gt;            if($this-&gt;sp &gt;= 0){&lt;br /&gt;                $result=$this-&gt;data[$this-&gt;sp];&lt;br /&gt;                unset($this-&gt;data[$this-&gt;sp]);&lt;br /&gt;                $this-&gt;sp--;&lt;br /&gt;                return $result;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function push($data){&lt;br /&gt;            if($this-&gt;sp &lt; $this-&gt;spMax){&lt;br /&gt;                $this-&gt;sp++;&lt;br /&gt;                $this-&gt;data[$this-&gt;sp]=$data;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function setSpMax($max){&lt;br /&gt;            $this-&gt;spMax=(int)$max;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$stack = new Stack();&lt;br /&gt;$stack-&gt;push('a');&lt;br /&gt;$stack-&gt;push('b');&lt;br /&gt;&lt;br /&gt;echo $stack-&gt;pop();&lt;br /&gt;echo '&lt;br /&gt;'."\n";&lt;br /&gt;echo $stack-&gt;pop();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;程式碼說明:&lt;br /&gt;一個很簡單的類別，專門處理堆疊。&lt;br /&gt;&lt;br /&gt;Stack::pop() 取出資料&lt;br /&gt;Stack::push() 放進資料&lt;br /&gt;Stack::setSpMax() 設定堆疊能存放的資料筆數&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-8466063492218095168?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/8466063492218095168/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=8466063492218095168' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8466063492218095168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8466063492218095168'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2009/01/blog-post.html' title='堆疊'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-1442015049776243758</id><published>2008-12-30T22:24:00.000+08:00</published><updated>2008-12-30T22:25:34.171+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='心得'/><title type='text'>順其自然</title><content type='html'>最近在進行程式執行環境的設定，由於前輩留下許多的程式遺產及系統都是在windows系統下執行的，因此自己寫的程式也必須在windows下執行，為了讓自己的程式能夠在windows環境下執行，經歷了許多的苦頭，許多奇奇怪怪的問題總是百思不得其解，不過，到後來，問題找到解答了，也明白一句話，順其自然。&lt;br /&gt;&lt;br /&gt;選擇程式語言，經過了滿多的掙扎，走過了許多徘徊，難以抉擇的十字路口，最終還是選擇php，這理由很多。想過以basic，搭配.net或asp在windows上跑，這些程式語言的撰寫界面親切，而且中文資源眾多，比較好入門，不過新台弊要準備多一些，想到這就讓我打退堂鼓，我不想砸太多錢在這些軟體上，也不想上網抓非法軟體，因為太懶惰了，而且msdn的文件，就算是中文的也看不太懂，翻譯的不太順。php是開放原始碼的軟體，可以隨意散佈使用，不用揹負太多法律及金錢的壓力，比較適合我的個性。開源軟體當然不只php，也曾買了很多perl的書，不過到後來沒有看完。Perl也不錯，只是不像php那麼風行，比較少人用。就看你喜歡哪一種了。&lt;br /&gt;&lt;br /&gt;現在我明白，其實學哪套程式語言是沒有什麼差別的，只要學通一種，再學另一種程式語言，其實是很快的，所謂的很快是指基本的語法(80%的功能)，背後的精髓就另當別論，專精一二種，其實就夠了，其他的語言在你精通一二種程式語言後，就可以觸類旁通了。&lt;br /&gt;&lt;br /&gt;原來程式搭配的資料庫系統是mssql，這套跟php搭配，有點奇怪，因為mssql是微軟的，並非開放原始碼軟體，不過沒辦法，原來的系統是建構在mssql上的，總不能不用吧!為了使用mssql，還k了一個禮拜的書，寫了一堆mssql上的預儲程序來和php搭配使用，php最常搭配的資料庫是mysql，一般常見的應用系統都是以php搭配mysql，與mssql搭配使用的程式語言通常是.net的語言。&lt;br /&gt;&lt;br /&gt;原來的資料庫規畫跟我預期的有落差，沒有規畫primary key，foreign key，維護很不方便。不過，也沒辦法了，只好硬幹，以php搭配mssql及預儲程序，總是可以把程式寫出來的，不過在後續的執行環境設定上，讓我吃足苦頭，實際上線後，程式常當，為了找原因，讓我頭痛很久。&lt;br /&gt;&lt;br /&gt;後來找到一個解決辦法，在iis上設定應用程式集區，一個小時回收記憶體一次，要當就不會超過一個小時了，但終究不是一個好的解決辦法，而且回收記憶體，雖然對php的session不會有影響(php的session存在硬碟上)，但asp的session會全部清空，問題是這台機器上有一堆asp寫的程式。&lt;br /&gt;&lt;br /&gt;繼續找資料，才知道php雖然是thread safe的程式，但是許多的dll檔卻不是thread safe的程式，所以一旦碰到非thread safe的dll，php就會不穩定，雖然知道原因，但卻不知道是哪個dll是非thread safe的，但是要解決這個問題就必須以fastcgi的方式執行，這樣非thread safe的dll在這樣的環境下執行也不會有問題，只是在fastcgi下，mssql的dll檔根本跑不起來，這真是糟糕，沒辦法連資料庫，程式就沒作用。&lt;br /&gt;&lt;br /&gt;最後終於找到原因了，把php模組需求跟中心的同事說後，同事在linux上架完系統後，我的程式一樣不能連mssql，自己找了php manual後才發現原來win上的ntwdblib.dll檔是非thread safe的，不穩定的原凶就是它了，把php連接mssql的底層函式庫改成dblib就一切正常，找到原因後，心頭真是舒服，不過就要麻煩同事架linux系統了，這樣跑起來才會穩定，也不用再頭痛了。&lt;br /&gt;&lt;br /&gt;許多的事情順其自然是比較不會遇到這麼多的曲折，像這次以php搭配mssql就不是一個自然的搭配，開放原始碼搭配商業軟體，許多的問題，開放原始碼社群及微軟這家公司是沒有多餘的心力解決的，到時候就只能自求多福了，以最自然的方式進行，問題還是會比較少，因為這些問題都有人幫你解決了，只要專心寫程式就可以了，不用跟這些環境設定奮戰。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-1442015049776243758?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/1442015049776243758/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=1442015049776243758' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1442015049776243758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1442015049776243758'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/12/blog-post.html' title='順其自然'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-42746974118705294</id><published>2008-12-16T23:07:00.000+08:00</published><updated>2008-12-16T23:08:14.959+08:00</updated><title type='text'>php5.2.8不能載入php_mssql</title><content type='html'>php5.2.8有bug&lt;br /&gt;無法載入php_mssql及php_pdo_mssql&lt;br /&gt;搞了我好幾天，終於確定問題&lt;br /&gt;換用php5.2.6就ok了&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-42746974118705294?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/42746974118705294/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=42746974118705294' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/42746974118705294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/42746974118705294'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/12/php528phpmssql.html' title='php5.2.8不能載入php_mssql'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-8724730770950772686</id><published>2008-12-16T11:04:00.002+08:00</published><updated>2008-12-16T11:06:28.681+08:00</updated><title type='text'>ms sql2000的php driver</title><content type='html'>http://blogs.msdn.com/sqlphp/archive/2007/10/09/welcome.aspx&lt;br /&gt;&lt;br /&gt;上面的文章有說明，新版的mssql 2005 driver for php也支援 mssql 2000&lt;br /&gt;&lt;br /&gt;這真是好消息，有微軟的正式支援，總是比較安心，不會心裡毛毛的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-8724730770950772686?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/8724730770950772686/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=8724730770950772686' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8724730770950772686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8724730770950772686'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/12/ms-sql2000php-driver.html' title='ms sql2000的php driver'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-5534370967134879033</id><published>2008-12-13T00:05:00.001+08:00</published><updated>2008-12-13T00:05:35.735+08:00</updated><title type='text'>win上apache的效能</title><content type='html'>http://www.ithome.com.tw/itadm/article.php?c=50012&amp;s=2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-5534370967134879033?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/5534370967134879033/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=5534370967134879033' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5534370967134879033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5534370967134879033'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/12/winapache.html' title='win上apache的效能'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-3713343507702633238</id><published>2008-12-06T16:15:00.002+08:00</published><updated>2008-12-06T16:17:55.029+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>連接db的問題</title><content type='html'>使用Zend_Db連接資料庫時，最好使用$db-&gt;closeConnection()關閉每次&lt;br /&gt;使用後的資料庫連結，以免產生一堆有的沒的問題，&lt;br /&gt;這是上線後的網站實際發生的狀況，使用$db-&gt;closeConnection()後就少了一些問題，&lt;br /&gt;win上的記憶體管理做得似乎並不好。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-3713343507702633238?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/3713343507702633238/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=3713343507702633238' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3713343507702633238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3713343507702633238'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/12/db.html' title='連接db的問題'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-7184044646293805305</id><published>2008-12-06T09:08:00.005+08:00</published><updated>2008-12-06T16:18:13.554+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>Zend Framework出現空白頁</title><content type='html'>錯誤訊息顯示：&lt;br /&gt;Fatal error: Cannot redeclare class Zend_Loader in  .....lib\Zend\Loader.php on line 31&lt;br /&gt;&lt;br /&gt;查了一下php manual&lt;br /&gt;require及include的差別&lt;br /&gt;&lt;br /&gt;require：只要在程式中都會執行檔案含入的動作，不論是不是在判斷式中&lt;br /&gt;&lt;br /&gt;include：只有判斷式正確，才會執行檔案含入的動作&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;看了一下含入的路徑，由於是windows平台&lt;br /&gt;路徑是：  d:\a\b\c/lib&lt;br /&gt;&lt;br /&gt;改了一下程式碼&lt;br /&gt;&lt;br /&gt;/lib改成 DIRECTORY_SEPARATOR.'lib'&lt;br /&gt;&lt;br /&gt;路徑就成了d:\a\b\c\lib&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;經過這些手續，暫時消除這個問題，不過還要再觀察一陣子。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-7184044646293805305?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/7184044646293805305/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=7184044646293805305' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7184044646293805305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7184044646293805305'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/12/zend-framework.html' title='Zend Framework出現空白頁'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-5348368190994970014</id><published>2008-10-14T18:28:00.001+08:00</published><updated>2008-10-14T18:29:27.788+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>沒有轉址軟體時，使用zend framework的解法</title><content type='html'>http://akrabat.com/2008/06/03/zend-framework-urls-without-mod_rewrite/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-5348368190994970014?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/5348368190994970014/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=5348368190994970014' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5348368190994970014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5348368190994970014'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/10/zend-framework.html' title='沒有轉址軟體時，使用zend framework的解法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-3395820276043416505</id><published>2008-10-10T11:53:00.001+08:00</published><updated>2008-10-10T11:53:41.375+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>mssql的分頁</title><content type='html'>http://blog.blueshop.com.tw/blackncc/archive/2007/01/06/49123.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-3395820276043416505?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/3395820276043416505/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=3395820276043416505' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3395820276043416505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3395820276043416505'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/10/mssql_10.html' title='mssql的分頁'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-4854389429749534009</id><published>2008-10-09T17:16:00.001+08:00</published><updated>2008-10-09T17:16:54.839+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>iis上支援轉址的免費軟體</title><content type='html'>http://cheeso.members.winisp.net/IIRF.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-4854389429749534009?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/4854389429749534009/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=4854389429749534009' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4854389429749534009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4854389429749534009'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/10/iis.html' title='iis上支援轉址的免費軟體'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-6940905719946506811</id><published>2008-10-08T22:03:00.001+08:00</published><updated>2008-10-08T22:03:22.992+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>連接mssql</title><content type='html'>http://www.zxbc.cn/html/20070506/13033.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-6940905719946506811?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/6940905719946506811/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=6940905719946506811' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6940905719946506811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6940905719946506811'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/10/mssql.html' title='連接mssql'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-2089523887549222434</id><published>2008-10-08T21:08:00.001+08:00</published><updated>2008-10-08T21:11:39.450+08:00</updated><title type='text'>Zend_Framework 1.6的版本的protected $_pdoType已改為mssql</title><content type='html'>http://mlblog.osdir.com/php.zend.framework.general/2006-12/index.shtml&lt;br /&gt;&lt;br /&gt;PDO, MSSQL and FreeTDS&lt;br /&gt;&lt;br /&gt;Date: December 12, 2006&lt;br /&gt;From: Todd Wolaver &lt;todd-qLn2CX3t9TpWk0Htik3J/w@xxxxxxxxxxxxxxxx&gt;&lt;br /&gt;&lt;br /&gt;Hi,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm using FreeTDS under Linux to access MSSQL databases, which won' t work with the framework since the PDO driver is dblib not mssql.&lt;br /&gt;&lt;br /&gt;$db = Zend_Db::factory('pdo_mssql', $params);&lt;br /&gt;&lt;br /&gt;will return:&lt;br /&gt;"The mssql driver is not currently installed"&lt;br /&gt;&lt;br /&gt;This is set in the Mssql.php PDO adapter (Zend_Db_Adapter_Pdo_Mssql):&lt;br /&gt;43:    protected $_pdoType = 'mssql';&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If this is changed to dblib then it works. What would be the best way of implementing the dblib driver without changing the core code of the framework?&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;Todd Wolaver&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Zend_Framework 1.6的版本的protected $_pdoType已改為mssql&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-2089523887549222434?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/2089523887549222434/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=2089523887549222434' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2089523887549222434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2089523887549222434'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/10/zendframework-16protected-pdotypemssql.html' title='Zend_Framework 1.6的版本的protected $_pdoType已改為mssql'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-465508790335839796</id><published>2008-09-26T14:50:00.000+08:00</published><updated>2008-09-26T14:51:27.360+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery的身份證驗證plugin</title><content type='html'>/**&lt;br /&gt; * 驗證身份證字號是否正確的jquery plugin&lt;br /&gt; * 用法：jQuery('身份證字號的id').idCheck();&lt;br /&gt; * 傳回值：&lt;br /&gt; * 合法---傳回true&lt;br /&gt; * 非法---傳回false&lt;br /&gt; * 作者：羅仁治&lt;br /&gt; * 版本：1.0&lt;br /&gt; * 版權：隨你使用，但須保留這段說明文字。&lt;br /&gt; */&lt;br /&gt;jQuery.fn.idCheck = function(){&lt;br /&gt;    var real_id = this.val();&lt;br /&gt;    real_id = real_id.toUpperCase();&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    var pattern = /^[A-Z]{1}[0-9]{9}$/;&lt;br /&gt;    if (!pattern.test(real_id)) {&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    if (check(real_id)) {&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    function check(real_id){&lt;br /&gt;        var first = real_id.substr(0, 1);&lt;br /&gt;        switch (first) {&lt;br /&gt;            case 'A':&lt;br /&gt;                first = '10';&lt;br /&gt;                break;&lt;br /&gt;            case 'B':&lt;br /&gt;                first = '11';&lt;br /&gt;                break;&lt;br /&gt;            case 'C':&lt;br /&gt;                first = '12';&lt;br /&gt;                break;&lt;br /&gt;            case 'D':&lt;br /&gt;                first = '13';&lt;br /&gt;                break;&lt;br /&gt;            case 'E':&lt;br /&gt;                first = '14';&lt;br /&gt;                break;&lt;br /&gt;            case 'F':&lt;br /&gt;                first = '15';&lt;br /&gt;                break;&lt;br /&gt;            case 'G':&lt;br /&gt;                first = '16';&lt;br /&gt;                break;&lt;br /&gt;            case 'H':&lt;br /&gt;                first = '17';&lt;br /&gt;                break;&lt;br /&gt;            case 'I':&lt;br /&gt;                first = '34';&lt;br /&gt;                break;&lt;br /&gt;            case 'J':&lt;br /&gt;                first = '18';&lt;br /&gt;                break;&lt;br /&gt;            case 'K':&lt;br /&gt;                first = '19';&lt;br /&gt;                break;&lt;br /&gt;            case 'L':&lt;br /&gt;                first = '20';&lt;br /&gt;                break;&lt;br /&gt;            case 'M':&lt;br /&gt;                first = '21';&lt;br /&gt;                break;&lt;br /&gt;            case 'N':&lt;br /&gt;                first = '22';&lt;br /&gt;                break;&lt;br /&gt;            case 'O':&lt;br /&gt;                first = '35';&lt;br /&gt;                break;&lt;br /&gt;            case 'P':&lt;br /&gt;                first = '23';&lt;br /&gt;                break;&lt;br /&gt;            case 'Q':&lt;br /&gt;                first = '24';&lt;br /&gt;                break;&lt;br /&gt;            case 'R':&lt;br /&gt;                first = '25';&lt;br /&gt;                break;&lt;br /&gt;            case 'S':&lt;br /&gt;                first = '26';&lt;br /&gt;                break;&lt;br /&gt;            case 'T':&lt;br /&gt;                first = '27';&lt;br /&gt;                break;&lt;br /&gt;            case 'U':&lt;br /&gt;                first = '28';&lt;br /&gt;                break;&lt;br /&gt;            case 'V':&lt;br /&gt;                first = '29';&lt;br /&gt;                break;&lt;br /&gt;            case 'W':&lt;br /&gt;                first = '32';&lt;br /&gt;                break;&lt;br /&gt;            case 'X':&lt;br /&gt;                first = '30';&lt;br /&gt;                break;&lt;br /&gt;            case 'Y':&lt;br /&gt;                first = '31';&lt;br /&gt;                break;&lt;br /&gt;            case 'Z':&lt;br /&gt;                first = '33';&lt;br /&gt;                break;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        var value = first.concat(real_id.substr(1, 8));&lt;br /&gt;        &lt;br /&gt;        var sum = parseInt(value.substr(0, 1));&lt;br /&gt;        &lt;br /&gt;        for (var i = 1; i &lt;= 9; i++) {&lt;br /&gt;            sum = sum + parseInt(value.substr(i, 1)) * (10 - i);&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        single = 10 - (sum % 10);&lt;br /&gt;        &lt;br /&gt;        if (parseInt(real_id.substr(9, 1)) == single) {&lt;br /&gt;            return true;&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;};&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-465508790335839796?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/465508790335839796/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=465508790335839796' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/465508790335839796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/465508790335839796'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/09/jqueryplugin.html' title='jQuery的身份證驗證plugin'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-340745089808262725</id><published>2008-09-25T17:22:00.002+08:00</published><updated>2008-09-25T17:25:20.013+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>身份證字號的validator</title><content type='html'>下面程式是參考&lt;br /&gt;http://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;這篇文章的身份證字號檢查公式，轉換成Zend framework的validator，進行身份證號碼的驗證。&lt;br /&gt;&lt;br /&gt;有了公式之後要進行驗證就比較容易，不用看程式碼去倒推公式，如果沒有公式，光看程式碼，看個老半天，也看不出個所以然來，還要去適應各種程式碼的寫法，太累了，這個公式真是造福大家，直接將公式轉換成Zend Framework的程式碼，就容易多了。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;require_once('Zend/Validate/Abstract.php');&lt;br /&gt;&lt;br /&gt;class App_Validate_IdCheck extends Zend_Validate_Abstract{&lt;br /&gt; const SIZE='size';&lt;br /&gt; const FORMAT='format';&lt;br /&gt; const CHECK='check';&lt;br /&gt; &lt;br /&gt; protected $_messageTemplates=array(&lt;br /&gt; self::SIZE=&gt;"'%value%' 身份證字串長度不符合。",&lt;br /&gt; self::FORMAT=&gt;"'%value%' 的第一個字元必須是英文字母，其他必須是數字。",&lt;br /&gt; self::CHECK=&gt;"'%value%' 是非法的身份證字號。"&lt;br /&gt; );&lt;br /&gt; &lt;br /&gt; public function isValid($value){&lt;br /&gt;  $this-&gt;_setValue($value);&lt;br /&gt;  if(strlen($value) !=10){&lt;br /&gt;   $this-&gt;_error(self::SIZE);&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $value=strtoupper($value);&lt;br /&gt;  if(!ereg("[A-Z]{1}[0-9]{9}",$value)){&lt;br /&gt;   $this-&gt;_error(self::FORMAT);&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if($this-&gt;check($value)){&lt;br /&gt;   return true;&lt;br /&gt;  }&lt;br /&gt;  else{&lt;br /&gt;   $this-&gt;_error(self::CHECK);&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private function check($value){&lt;br /&gt;  $first=array('A'=&gt;10,'B'=&gt;11,'C'=&gt;12,'D'=&gt;13,'E'=&gt;14,&lt;br /&gt;     'F'=&gt;15,'G'=&gt;16,'H'=&gt;17,'I'=&gt;34,'J'=&gt;18,&lt;br /&gt;     'K'=&gt;19,'L'=&gt;20,'M'=&gt;21,'N'=&gt;22,'O'=&gt;35,&lt;br /&gt;     'P'=&gt;23,'Q'=&gt;24,'R'=&gt;25,'S'=&gt;26,'T'=&gt;27,&lt;br /&gt;     'U'=&gt;28,'V'=&gt;29,'W'=&gt;32,'X'=&gt;30,'Y'=&gt;31,&lt;br /&gt;     'Z'=&gt;33);&lt;br /&gt;  /**&lt;br /&gt;   * convert the first alpha character to two digits&lt;br /&gt;   * and combines to the rest digits&lt;br /&gt;   */&lt;br /&gt;  $value=$first[$value[0]].substr($value,1);&lt;br /&gt;&lt;br /&gt;  $sum=(int)$value[0];&lt;br /&gt;  for($i=1;$i&lt;=9;$i++){&lt;br /&gt;   $sum+=$value[$i]*(10-$i);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * get the single-digit of 10-$sum&lt;br /&gt;   */&lt;br /&gt;  $single=10 - ($sum % 10);&lt;br /&gt;&lt;br /&gt;  if($single == $value[10]){&lt;br /&gt;   return true;&lt;br /&gt;  }&lt;br /&gt;  else{&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-340745089808262725?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/340745089808262725/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=340745089808262725' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/340745089808262725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/340745089808262725'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/09/httpzh.html' title='身份證字號的validator'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-6205993344072502694</id><published>2008-09-25T17:21:00.000+08:00</published><updated>2008-09-25T17:22:02.636+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>判斷身份證字號的處理邏輯</title><content type='html'>&lt;a href="http://blog.nahoya.com/archives/2007_12/177"&gt;http://blog.nahoya.com/archives/2007_12/177&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89"&gt;http://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;處理邏輯&lt;br /&gt;1.判斷身份證字號的字串長度，長度必須等於10個字元。&lt;br /&gt;2.判斷身份證字號的字串格式，第一個字元必須是英文字母，第二個字元必須是數字1或數字2，其他的字元必須是數字。&lt;br /&gt;英文&lt;br /&gt;縣市 / 地區&lt;br /&gt;數字&lt;br /&gt;A&lt;br /&gt;&lt;a title="台北市" href="http://zh.wikipedia.org/wiki/%E5%8F%B0%E5%8C%97%E5%B8%82"&gt;台北市&lt;/a&gt;&lt;br /&gt;10&lt;br /&gt;B&lt;br /&gt;&lt;a class="mw-redirect" title="台中市" href="http://zh.wikipedia.org/wiki/%E5%8F%B0%E4%B8%AD%E5%B8%82"&gt;台中市&lt;/a&gt;&lt;br /&gt;11&lt;br /&gt;C&lt;br /&gt;&lt;a title="基隆市" href="http://zh.wikipedia.org/wiki/%E5%9F%BA%E9%9A%86%E5%B8%82"&gt;基隆市&lt;/a&gt;&lt;br /&gt;12&lt;br /&gt;D&lt;br /&gt;&lt;a class="mw-redirect" title="台南市" href="http://zh.wikipedia.org/wiki/%E5%8F%B0%E5%8D%97%E5%B8%82"&gt;台南市&lt;/a&gt;&lt;br /&gt;13&lt;br /&gt;E&lt;br /&gt;&lt;a title="高雄市" href="http://zh.wikipedia.org/wiki/%E9%AB%98%E9%9B%84%E5%B8%82"&gt;高雄市&lt;/a&gt;&lt;br /&gt;14&lt;br /&gt;F&lt;br /&gt;&lt;a class="mw-redirect" title="台北縣" href="http://zh.wikipedia.org/wiki/%E5%8F%B0%E5%8C%97%E7%B8%A3"&gt;台北縣&lt;/a&gt;&lt;br /&gt;15&lt;br /&gt;G&lt;br /&gt;&lt;a title="宜蘭縣" href="http://zh.wikipedia.org/wiki/%E5%AE%9C%E8%98%AD%E7%B8%A3"&gt;宜蘭縣&lt;/a&gt;&lt;br /&gt;16&lt;br /&gt;H&lt;br /&gt;&lt;a title="桃園縣" href="http://zh.wikipedia.org/wiki/%E6%A1%83%E5%9C%92%E7%B8%A3"&gt;桃園縣&lt;/a&gt;&lt;br /&gt;17&lt;br /&gt;I&lt;br /&gt;&lt;a title="嘉義市" href="http://zh.wikipedia.org/wiki/%E5%98%89%E7%BE%A9%E5%B8%82"&gt;嘉義市&lt;/a&gt;&lt;br /&gt;34&lt;br /&gt;J&lt;br /&gt;&lt;a title="新竹縣" href="http://zh.wikipedia.org/wiki/%E6%96%B0%E7%AB%B9%E7%B8%A3"&gt;新竹縣&lt;/a&gt;&lt;br /&gt;18&lt;br /&gt;K&lt;br /&gt;&lt;a title="苗栗縣" href="http://zh.wikipedia.org/wiki/%E8%8B%97%E6%A0%97%E7%B8%A3"&gt;苗栗縣&lt;/a&gt;&lt;br /&gt;19&lt;br /&gt;L&lt;br /&gt;&lt;a class="mw-redirect" title="台中縣" href="http://zh.wikipedia.org/wiki/%E5%8F%B0%E4%B8%AD%E7%B8%A3"&gt;台中縣&lt;/a&gt;&lt;br /&gt;20&lt;br /&gt;M&lt;br /&gt;&lt;a title="南投縣" href="http://zh.wikipedia.org/wiki/%E5%8D%97%E6%8A%95%E7%B8%A3"&gt;南投縣&lt;/a&gt;&lt;br /&gt;21&lt;br /&gt;英文&lt;br /&gt;縣市 / 地區&lt;br /&gt;數字&lt;br /&gt;N&lt;br /&gt;&lt;a title="彰化縣" href="http://zh.wikipedia.org/wiki/%E5%BD%B0%E5%8C%96%E7%B8%A3"&gt;彰化縣&lt;/a&gt;&lt;br /&gt;22&lt;br /&gt;O&lt;br /&gt;&lt;a title="新竹市" href="http://zh.wikipedia.org/wiki/%E6%96%B0%E7%AB%B9%E5%B8%82"&gt;新竹市&lt;/a&gt;&lt;br /&gt;35&lt;br /&gt;P&lt;br /&gt;&lt;a title="雲林縣" href="http://zh.wikipedia.org/wiki/%E9%9B%B2%E6%9E%97%E7%B8%A3"&gt;雲林縣&lt;/a&gt;&lt;br /&gt;23&lt;br /&gt;Q&lt;br /&gt;&lt;a title="嘉義縣" href="http://zh.wikipedia.org/wiki/%E5%98%89%E7%BE%A9%E7%B8%A3"&gt;嘉義縣&lt;/a&gt;&lt;br /&gt;24&lt;br /&gt;R&lt;br /&gt;&lt;a title="台南縣" href="http://zh.wikipedia.org/wiki/%E5%8F%B0%E5%8D%97%E7%B8%A3"&gt;台南縣&lt;/a&gt;&lt;br /&gt;25&lt;br /&gt;S&lt;br /&gt;&lt;a title="高雄縣" href="http://zh.wikipedia.org/wiki/%E9%AB%98%E9%9B%84%E7%B8%A3"&gt;高雄縣&lt;/a&gt;&lt;br /&gt;26&lt;br /&gt;T&lt;br /&gt;&lt;a title="屏東縣" href="http://zh.wikipedia.org/wiki/%E5%B1%8F%E6%9D%B1%E7%B8%A3"&gt;屏東縣&lt;/a&gt;&lt;br /&gt;27&lt;br /&gt;U&lt;br /&gt;&lt;a title="花蓮縣" href="http://zh.wikipedia.org/wiki/%E8%8A%B1%E8%93%AE%E7%B8%A3"&gt;花蓮縣&lt;/a&gt;&lt;br /&gt;28&lt;br /&gt;V&lt;br /&gt;&lt;a title="台東縣" href="http://zh.wikipedia.org/wiki/%E5%8F%B0%E6%9D%B1%E7%B8%A3"&gt;台東縣&lt;/a&gt;&lt;br /&gt;29&lt;br /&gt;W&lt;br /&gt;&lt;a title="金門縣" href="http://zh.wikipedia.org/wiki/%E9%87%91%E9%96%80%E7%B8%A3"&gt;金門縣&lt;/a&gt;&lt;br /&gt;32&lt;br /&gt;X&lt;br /&gt;&lt;a title="澎湖縣" href="http://zh.wikipedia.org/wiki/%E6%BE%8E%E6%B9%96%E7%B8%A3"&gt;澎湖縣&lt;/a&gt;&lt;br /&gt;30&lt;br /&gt;Y&lt;br /&gt;&lt;a title="陽明山管理局" href="http://zh.wikipedia.org/wiki/%E9%99%BD%E6%98%8E%E5%B1%B1%E7%AE%A1%E7%90%86%E5%B1%80"&gt;陽明山管理局&lt;/a&gt;&lt;br /&gt;31&lt;br /&gt;Z&lt;br /&gt;&lt;a title="連江縣 (中華民國)" href="http://zh.wikipedia.org/wiki/%E9%80%A3%E6%B1%9F%E7%B8%A3_(%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B)"&gt;連江縣&lt;/a&gt;&lt;br /&gt;33&lt;br /&gt;3.每個縣市都有一個相對應的英文字母代表，每個英文字母也都有一個對應的二位數&lt;br /&gt;4.將英文字母轉換為二個數字字元與原來的數字字串進行合併，轉換為十一個數字字元。&lt;br /&gt;5.轉換後的數字字串總共有11個數字字元，將前十個數字進行如下的運算&lt;br /&gt;第一個數字+&lt;br /&gt;第二個數字*9+&lt;br /&gt;第三個數字*8+&lt;br /&gt;第四個數字*7+&lt;br /&gt;第五個數字*6+&lt;br /&gt;第六個數字*5+&lt;br /&gt;第七個數字*4+&lt;br /&gt;第八個數字*3+&lt;br /&gt;第九個數字*2+&lt;br /&gt;第十個數字*1&lt;br /&gt;6.第5個步驟運算得到的和，只取個位數部份&lt;br /&gt;7.用十減去第6步驟得到的值，與第4步驟得到的值的第十一個數字字元進行比對。&lt;br /&gt;如果相同，表示身份證字號是正確的&lt;br /&gt;如果不相同，表示身份證字號是不正確的&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-6205993344072502694?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/6205993344072502694/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=6205993344072502694' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6205993344072502694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6205993344072502694'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/09/blog-post_25.html' title='判斷身份證字號的處理邏輯'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-430790836333390340</id><published>2008-09-14T11:18:00.001+08:00</published><updated>2008-09-14T11:20:02.225+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>字型位置</title><content type='html'>ubuntu上字型放置的位置&lt;br /&gt;&lt;br /&gt;/usr/share/fonts/truetype/&lt;br /&gt;&lt;br /&gt;要用到gd函式庫配合php輸出時就要用到字型了&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-430790836333390340?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/430790836333390340/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=430790836333390340' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/430790836333390340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/430790836333390340'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/09/blog-post_14.html' title='字型位置'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-5994991527301312586</id><published>2008-09-12T21:23:00.004+08:00</published><updated>2008-09-13T08:24:04.445+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>防堵apache的dos攻擊</title><content type='html'>http://www.novell.com/coolsolutions/feature/19958.html&lt;br /&gt;&lt;br /&gt;第一步&lt;br /&gt;安裝apache的evasive模組&lt;br /&gt;apt-get install libapache2-mod-evasive&lt;br /&gt;&lt;br /&gt;第二步&lt;br /&gt;&lt;pre&gt;(1)/etc/apache2/mods-enabled&lt;br /&gt;&lt;br /&gt;(2)/etc/apache2/mods-available&lt;br /&gt;&lt;br /&gt;在(1)這個目錄下建mods-esave.conf檔，內容如下，&lt;br /&gt;再將這個檔soft link到(2)這個目錄&lt;br /&gt;&lt;br /&gt;&lt;ifmodule&gt;&lt;br /&gt;DOSHashTableSize    3097&lt;br /&gt;DOSPageCount        2&lt;br /&gt;DOSSiteCount        50&lt;br /&gt;DOSPageInterval     1&lt;br /&gt;DOSSiteInterval     1&lt;br /&gt;DOSBlockingPeriod   10&lt;br /&gt;&lt;/ifmodule&gt;&lt;br /&gt;&lt;br /&gt;第三步&lt;br /&gt;重新啟動apache&lt;br /&gt;&lt;br /&gt;第四步&lt;br /&gt;連接測試網站，以非常快的速度快按重新整理，如果出現403 forbidden表示安裝成功。&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-5994991527301312586?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/5994991527301312586/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=5994991527301312586' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5994991527301312586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5994991527301312586'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/09/apachedos.html' title='防堵apache的dos攻擊'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-6772808786529721003</id><published>2008-09-03T23:57:00.002+08:00</published><updated>2008-09-04T00:01:49.600+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>樹狀目錄plugin</title><content type='html'>http://abeautifulsite.net/notebook.php?article=58&lt;br /&gt;&lt;br /&gt;上面這個網址的jquery的plugin可以顯示目錄下的檔案結構，還附上php程式碼，可以直接拿來用在網站上，如果要改寫，應該不難，只要php檔輸出的格式跟css檔難搭到就可以了。&lt;br /&gt;&lt;br /&gt;css:負責外貌&lt;br /&gt;php:負責內容輸出&lt;br /&gt;jquery plugin:負責取回php輸出的資料並將資料顯示或隱藏&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-6772808786529721003?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/6772808786529721003/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=6772808786529721003' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6772808786529721003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6772808786529721003'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/09/plugin.html' title='樹狀目錄plugin'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-6350130132584066011</id><published>2008-09-02T22:47:00.000+08:00</published><updated>2008-09-02T22:48:21.874+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>下載檔案的問題</title><content type='html'>&lt;span style="font-size:85%;color:#000000;"&gt;&lt;p&gt;Zend Framework的response物件會暫存許多網頁內容，要將存入資料庫中的檔案下載前，必須清空response物件，不然會出現錯誤訊息，這個錯誤找了好久，才找到。&lt;/p&gt; &lt;p&gt;多加一道命令，清空respone物件&lt;/p&gt; &lt;p&gt;$this-&gt;getResponse()-&gt;clearBody();&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;ie跟firefox處理下載的中文檔名方式也不同，經由ie下載的檔案要先以urlencode()函數處理過，才能下載，經由firefox下載的檔案就不能以urlencode()函數處理過，不然下載的檔名會是編碼過的字串。&lt;/p&gt; &lt;p&gt;處理的邏輯，不難，只要判斷使用者的瀏覽器類型，再分別處理就可以了。&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-6350130132584066011?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/6350130132584066011/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=6350130132584066011' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6350130132584066011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6350130132584066011'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/09/blog-post.html' title='下載檔案的問題'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-4039199407995904844</id><published>2008-09-01T10:41:00.000+08:00</published><updated>2008-09-01T10:43:35.742+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>分頁的action helper</title><content type='html'>很久之前就想要寫一個分頁的物件，本來的構想是在server端把資料的總頁數抓出來後，再送到client，使用jQuery的pagination plugin進行處理，不過如果完全由jQuery的plugin進行處理，會有安全性的問題，一定要由server端再進行確認的處理，同樣的事情，server端及client端，兩邊都要做，真的是有點囉嗦，後來就決定完全由server端進行分頁的處理。&lt;br /&gt;&lt;br /&gt;server端的分頁物件的撰寫邏輯是這樣的:&lt;br /&gt;&lt;br /&gt;如果頁數少於或等於十筆，就顯示全部頁數。&lt;br /&gt;&lt;br /&gt;如果頁數大於十筆，就分成三種狀況做處理&lt;br /&gt;&lt;br /&gt;目前頁數小於第五頁，就顯示1~5頁及最後兩頁，其他的用三個點號顯示&lt;br /&gt;&lt;br /&gt;總頁數減目前頁數的絕對值小於或等於五頁，就顯示前二頁及最後五頁，其他的用三個點號顯示&lt;br /&gt;非以上兩種狀況，就顯示前二頁及最後兩頁及目前頁數與目前頁數的前二頁與後二頁，其他的用三個點號顯示&lt;br /&gt;&lt;br /&gt;分頁的外觀設定，就由client端的css做設定，server端的程式就專注在頁數的計算，將程式邏輯及外觀設定做清楚的切割。&lt;br /&gt;&lt;br /&gt;分頁物件的css設定&lt;br /&gt;&lt;br /&gt;在樣板中將server傳來的page資料用div包起來，設定顯示的css碼即可&lt;br /&gt;&lt;br /&gt;假設div的設定是&lt;div class="page"&gt;server傳來的page資料&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;非目前頁數的css設定&lt;br /&gt;&lt;br /&gt;.page ul li a{&lt;br /&gt;css設定資料&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;目前頁數的css設定&lt;br /&gt;&lt;br /&gt;.page ul li span{&lt;br /&gt;css設定資料&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;整個物件花了不少時間思考，該怎麼做，想通後，心裡滿高興的，雖然網路上有非常多的分頁物件可以參考，不過要一行行拆解，真是花時間，而且看得頭昏眼花，眼睛不舒服，就不太想再看這些程式碼了，最後還是決定自己寫一個，比較能夠掌控，而且整個物件的用法也有一致性，不會感覺怎麼有個物件的用法跟整個程式的搭配度不太吻合。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-4039199407995904844?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/4039199407995904844/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=4039199407995904844' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4039199407995904844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4039199407995904844'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/09/action-helper.html' title='分頁的action helper'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-7451881989988457954</id><published>2008-08-31T23:44:00.002+08:00</published><updated>2008-08-31T23:49:10.874+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>php無法執行</title><content type='html'>最近這幾天，在apache上都沒辦法跑php，我本以為是改了哪邊的設定檔，才造成只要一執行php檔，就造成php檔被下載，而不是被執行的狀況。&lt;br /&gt;&lt;br /&gt;設定檔找了老半天，都找不到錯誤，不過把apache的php_gtk2的功能拿掉，立刻就正常了，真是見鬼了，前一陣子在玩php-gtk，只是弄個測試程式玩玩，沒想到會造成php在apache的環境下無法執行，不過也多了一次經驗。也不錯啦。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-7451881989988457954?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/7451881989988457954/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=7451881989988457954' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7451881989988457954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7451881989988457954'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/08/php.html' title='php無法執行'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-7105848146992981072</id><published>2008-08-31T23:28:00.002+08:00</published><updated>2008-08-31T23:34:10.664+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>強化上傳目錄的安全性</title><content type='html'>如果在網頁程式中實做上傳檔案的功能，為了強化程式的安全性，會針對檔案的附檔名做過濾，並且限制上傳的目錄位置。這樣做的目的，只有一個，確保使用者不會亂來，在server上動手腳。&lt;br /&gt;&lt;br /&gt;除了在程式中，使用程式碼確保server的安全外，還可以在apache中設定，再加上一道防護措施，&lt;br /&gt;就是在上傳目錄中，新增.htaccess檔，這個檔案中再加上下面這道命令&lt;br /&gt;&lt;br /&gt;php_flag engine off&lt;br /&gt;&lt;br /&gt;那麼這個目錄下的php檔案都不會被apache解譯及執行。&lt;br /&gt;&lt;br /&gt;要這麼做，你的apache的override必須設成All。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-7105848146992981072?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/7105848146992981072/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=7105848146992981072' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7105848146992981072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7105848146992981072'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/08/blog-post_31.html' title='強化上傳目錄的安全性'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-1297998771670394670</id><published>2008-08-10T22:15:00.002+08:00</published><updated>2008-08-10T22:27:23.970+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='演算法與資料結構'/><title type='text'>fibonacci數列的遞迴解法</title><content type='html'>fibonacci數列&lt;br /&gt;1,1,2,3,5,8,13,21,55,.......&lt;br /&gt;&lt;br /&gt;第一個及第二個數字是1&lt;br /&gt;第三個以後的數字是前面兩個數字相加後的和&lt;br /&gt;&lt;br /&gt;求fibonacci第n個數字的解法&lt;br /&gt;使用遞迴的解法&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function fibonacci($n){&lt;br /&gt;  if($n==1 ||$n==2){&lt;br /&gt;    return 1;&lt;br /&gt;  }else{&lt;br /&gt;    return fibonacci($n-1)+fibonacci($n-2);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;echo fibonacci(10);&lt;br /&gt;&lt;br /&gt;在我的機器上，如果代入fibonacci(40)&lt;br /&gt;機器就會超過允許的執行時間，一個小小的程式，竟然耗用那麼多的時間，實在是可怕。&lt;br /&gt;&lt;br /&gt;下面這行程式是一個無窮迴圈，會造成一樣的結果。&lt;br /&gt;while(1){}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-1297998771670394670?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/1297998771670394670/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=1297998771670394670' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1297998771670394670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1297998771670394670'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/08/fibonacci.html' title='fibonacci數列的遞迴解法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-4388844146873493444</id><published>2008-08-07T21:49:00.002+08:00</published><updated>2008-08-07T21:53:22.980+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='演算法與資料結構'/><title type='text'>merge</title><content type='html'>merge的解法&lt;br /&gt;1.將要merge的兩個陣列進行排序&lt;br /&gt;2.將陣列a及陣列b的每個元素進行比較&lt;br /&gt;3.比較後將元素放入另一個陣列c&lt;br /&gt;4.如果陣列a或陣列b已經沒有元素可以進行比較，將還沒比較的元素加到陣列c的後面&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; public function mergeAction(){&lt;br /&gt;  $this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();&lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * 製做陣列a&lt;br /&gt;   */&lt;br /&gt;  $length_a=rand(8,10);&lt;br /&gt;  &lt;br /&gt;  for($i=0;$i&lt;$length_a;$i++)&lt;br /&gt;   $a[]=rand(100,200);&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * 將陣列a進行排序&lt;br /&gt;   */&lt;br /&gt;  $a=$this-&gt;sort($a);&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * 製做陣列b&lt;br /&gt;   */&lt;br /&gt;  $length_b=rand(11,13);&lt;br /&gt;  &lt;br /&gt;  for($i=0;$i&lt;$length_b;$i++)&lt;br /&gt;   $b[]=rand(100,200);&lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * 將陣列b進行排序&lt;br /&gt;   */&lt;br /&gt;  $b=$this-&gt;sort($b);&lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * 將陣列a及陣列b，merge為單一陣列&lt;br /&gt;   */&lt;br /&gt;  $com_a=0;&lt;br /&gt;  $com_b=0;&lt;br /&gt;  while($com_a&lt;$length_a &amp;&amp; $com_b&lt;$length_b){&lt;br /&gt;   if($a[$com_a]&lt;$b[$com_b]){&lt;br /&gt;    $c[]=$a[$com_a];&lt;br /&gt;    $com_a++;&lt;br /&gt;   }else{&lt;br /&gt;    $c[]=$b[$com_b];&lt;br /&gt;    $com_b++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  while($com_a&lt;$length_a){&lt;br /&gt;   $c[]=$a[$com_a];&lt;br /&gt;   $com_a++;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  while($com_b&lt;$length_b){&lt;br /&gt;   $c[]=$b[$com_b];&lt;br /&gt;   $com_b++;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * a陣列&lt;br /&gt;   */&lt;br /&gt;  foreach($a as $num)&lt;br /&gt;   echo $num."&lt;br /&gt;\n";&lt;br /&gt;&lt;br /&gt;  echo "&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;";&lt;br /&gt;   &lt;br /&gt;  /**&lt;br /&gt;   * b陣列&lt;br /&gt;   */&lt;br /&gt;  foreach($b as $num)&lt;br /&gt;   echo $num."&lt;br /&gt;\n";&lt;br /&gt;   &lt;br /&gt;  echo "&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;";   &lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * merge陣列a及陣列b後的c陣列&lt;br /&gt;   */&lt;br /&gt;  foreach($c as $num)&lt;br /&gt;   echo $num."&lt;br /&gt;\n";&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function sort(array $a){&lt;br /&gt;  $left=0;&lt;br /&gt;  $right=sizeof($a)-1;&lt;br /&gt;  &lt;br /&gt;  while($left&lt;$right){&lt;br /&gt;   $shift=0;&lt;br /&gt;   for($i=$left;$i&lt;$right;$i++){&lt;br /&gt;    if($a[$i]&gt;$a[$i+1]){&lt;br /&gt;     $tmp=$a[$i];&lt;br /&gt;     $a[$i]=$a[$i+1];&lt;br /&gt;     $a[$i+1]=$tmp;&lt;br /&gt;     $shift=$i;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   $right=$shift;&lt;br /&gt;   &lt;br /&gt;   for($i=$right;$i&gt;$left;$i--){&lt;br /&gt;    if($a[$i]&lt;$a[$i-1]){&lt;br /&gt;     $tmp=$a[$i];&lt;br /&gt;     $a[$i]=$a[$i-1];&lt;br /&gt;     $a[$i-1]=$tmp;&lt;br /&gt;     $shift=$i;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   $left=$shift;&lt;br /&gt;  }&lt;br /&gt;  return $a;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-4388844146873493444?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/4388844146873493444/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=4388844146873493444' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4388844146873493444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4388844146873493444'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/08/merge.html' title='merge'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-7250383986873181958</id><published>2008-08-07T15:59:00.003+08:00</published><updated>2008-08-07T20:01:33.802+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>css網頁排版</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;a href="http://www.w3schools.com/css/tryit.asp?filename=trycss_float6"&gt;http://www.w3schools.com/css/tryit.asp?filename=trycss_float6&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;用css排版，排版的程式碼感覺比較清爽，沒有一堆的表格標籤，只是用dreamweaver進行css排版，不知道為什麼，版面總是亂七八糟的，不知道是不是因為使用的dreamweaver的版本老舊的關係，只好用eclipse，慢慢敲css程式碼到編輯器裡頭，還好eclipse的aptana plugin有支援css碼的自動完成功能，敲完第一個字母，就有相關的屬性顯示，不然光是查相關的屬性資料，就會覺得很煩。&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;w3schools的網站有一拖拉庫的範例，如果把每個範例都key個幾遍，相信一定功力大增，不過這種從下而上的學習法，如果套用到我身上，我可能會水土不服，我比較能夠適應從上而下的學習方式，也就是有整體概念了，再從細部追蹤每一個細節，當然，整體概念跟實做細節是環環相叩的，缺一不可。只是當我有全部的整體概念後，進行這些細部的實作，會感覺比較踏實，不會有不知道這些程式碼到底要幹嘛的感覺。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;這個網站只有在我搞清楚整個css運作的來龍去脈以後，才能夠真正發揮他的功能，在真正清楚背後運作概念後，key in這些程式碼，說實在的，剛開始很興奮，到現在卻感覺有點枯燥。必須追蹤每一行程式碼的作用，感覺有點辛苦，應該要找一些更方便的工具，不要手工打這些碼，實在是很累。但這些基礎功，是必須的，不然，根基不穩是不能夠蓋房子的，就算蓋出來，也很容易塌的&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; div.container{&lt;br /&gt;  margin:0px;&lt;br /&gt;  border:1px solid gray;&lt;br /&gt;  width:100%;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; div.header,div.footer{&lt;br /&gt;  color:white;&lt;br /&gt;  background-color:gray;&lt;br /&gt;  clear:both;&lt;br /&gt;  margin:0px 0px 0px 0px;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; div.left{&lt;br /&gt;  float:left;&lt;br /&gt;  width:160px;&lt;br /&gt;  margin:0;&lt;br /&gt;  padding:10px;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; div.content{&lt;br /&gt;  position:relative;&lt;br /&gt;  margin-left:190px;&lt;br /&gt;  margin-top:0px;&lt;br /&gt;  border-left:1px solid gray;&lt;br /&gt;  padding:10px;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; h1.head{&lt;br /&gt;  font-size:60px;&lt;br /&gt;  padding:0;&lt;br /&gt;  margin:0; &lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-7250383986873181958?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/7250383986873181958/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=7250383986873181958' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7250383986873181958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7250383986873181958'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/08/css.html' title='css網頁排版'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-4748048194284709066</id><published>2008-08-06T20:50:00.002+08:00</published><updated>2008-08-06T20:55:30.712+08:00</updated><title type='text'>二元搜尋法</title><content type='html'>二元搜尋法的觀念&lt;br /&gt;1.資料已排序好&lt;br /&gt;2.取排序好的中間位置的值，與想要找的值做比對&lt;br /&gt;3.如果比對不成功，搜尋範圍就剩原來的一半，&lt;br /&gt;4.一直重覆步驟2,3&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * 以shaker法進行排序，以便進行二元搜尋。&lt;br /&gt;   */&lt;br /&gt;  $length=rand(8,10);&lt;br /&gt;  &lt;br /&gt;  for($i=0;$i&lt;$length;$i++)&lt;br /&gt;   $a[]=rand(100,200);&lt;br /&gt;&lt;br /&gt;  $left=0;&lt;br /&gt;  $right=$length-1;&lt;br /&gt;  while($left&lt;$right){&lt;br /&gt;   $shift=0;   &lt;br /&gt;   for($i=$left;$i&lt;$right;$i++){&lt;br /&gt;    if($a[$i]&gt;$a[$i+1]){&lt;br /&gt;     $tmp=$a[$i];&lt;br /&gt;     $a[$i]=$a[$i+1];&lt;br /&gt;     $a[$i+1]=$tmp;&lt;br /&gt;     $shift=$i;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   $right=$shift;&lt;br /&gt;   &lt;br /&gt;   for($i=$right;$i&gt;$left;$i--){&lt;br /&gt;    if($a[$i]&lt;$a[$i-1]){&lt;br /&gt;     $tmp=$a[$i];&lt;br /&gt;     $a[$i]=$a[$i-1];&lt;br /&gt;     $a[$i-1]=$tmp;&lt;br /&gt;     $shift=$i;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   $left=$i;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  foreach($a as $num)&lt;br /&gt;   echo $num."&lt;br /&gt;\n";&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * 設定要找尋的值&lt;br /&gt;   */&lt;br /&gt;  $search='192';&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * 二元搜尋法&lt;br /&gt;   */&lt;br /&gt;  $low=0;&lt;br /&gt;  $high=$length-1;&lt;br /&gt;  $flag=0;&lt;br /&gt;    &lt;br /&gt;  while($low&lt;=$high){&lt;br /&gt;   $mid=(int)(($low+$high)/2);&lt;br /&gt;   if($search&gt;$a[$mid]){&lt;br /&gt;    $low=$mid+1;&lt;br /&gt;   }elseif($search&lt;$a[$mid]){&lt;br /&gt;    $high=$mid-1;&lt;br /&gt;   }else{&lt;br /&gt;    $flag=1;&lt;br /&gt;    break;&lt;br /&gt;   }&lt;br /&gt;  }   &lt;br /&gt;    &lt;br /&gt;  if($flag)&lt;br /&gt;   echo '所要找的值的陣列表示法是:'."\$a[$mid]"."&lt;br /&gt;\n";&lt;br /&gt;  else&lt;br /&gt;   echo '找不到!';&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-4748048194284709066?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/4748048194284709066/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=4748048194284709066' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4748048194284709066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4748048194284709066'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/08/blog-post.html' title='二元搜尋法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-2781210191126302376</id><published>2008-08-05T23:10:00.004+08:00</published><updated>2008-08-06T15:14:15.970+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='演算法與資料結構'/><title type='text'>shell排序法</title><content type='html'>gap為1,2,4,8,16,32...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  $length=rand(8,20);&lt;br /&gt;&lt;br /&gt;  for($i=0;$i&lt;$length;$i++)&lt;br /&gt;  $a[]=rand(100,200);&lt;br /&gt;&lt;br /&gt;  for($gap=(int)($length/2);$gap&gt;0;$gap=(int)($gap/2)){&lt;br /&gt;   for($i=$gap;$i&lt;$length;$i++){&lt;br /&gt;    for($j=$i;$j&gt;=$gap;$j-=$gap){&lt;br /&gt;     if($a[$j-$gap]&gt;$a[$j]){&lt;br /&gt;      $tmp=$a[$j-$gap];&lt;br /&gt;      $a[$j-$gap]=$a[$j];&lt;br /&gt;      $a[$j]=$tmp;&lt;br /&gt;     }else{&lt;br /&gt;      break;&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;   &lt;br /&gt;  foreach($a as $num)&lt;br /&gt;  echo $num."\n";&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;gap為1,4,13,40,121...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;  $length=rand(10,20);&lt;br /&gt;&lt;br /&gt;  for($i=0;$i&lt;$length;$i++)&lt;br /&gt;  $a[]=rand(100,200);&lt;br /&gt;&lt;br /&gt;  for($gap=1;$gap&lt;(int)($length/3);$gap=($gap*3+1))&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;  while($gap&gt;0){&lt;br /&gt;   for($i=$gap;$i&lt;$length;$i++){&lt;br /&gt;    for($j=$i;$j&gt;=$gap;$j-=$gap){&lt;br /&gt;     if($a[$j]&lt;$a[$j-$gap]){&lt;br /&gt;      $tmp=$a[$j];&lt;br /&gt;      $a[$j]=$a[$j-$gap];&lt;br /&gt;      $a[$j-$gap]=$tmp;&lt;br /&gt;     }else{&lt;br /&gt;      break;&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   $gap=($gap-1)/3;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  foreach($a as $num)&lt;br /&gt;  echo $num."\n";&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-2781210191126302376?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/2781210191126302376/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=2781210191126302376' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2781210191126302376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2781210191126302376'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/08/shell.html' title='shell排序法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-7208431230425021147</id><published>2008-08-04T10:11:00.000+08:00</published><updated>2008-08-04T10:13:54.708+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery編輯器</title><content type='html'>&lt;a href="http://www.aptana.com/node/187"&gt;http://www.aptana.com/node/187&lt;/a&gt;&lt;br /&gt;&lt;a name="DDE_LINK3"&gt;&lt;/a&gt;&lt;a name="DDE_LINK2"&gt;&lt;/a&gt;&lt;a href="http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration"&gt;http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;安裝aptana的eclipse plugin&lt;br /&gt;&lt;br /&gt;安裝這個plugin後，編輯css,javascript,html比較方便，編輯器會以不同顏色顯示函數、變數等不同屬性的語句，如果不小心打錯字，或是記錯物件名稱，或是語法有錯誤，就會出現紅色的警告錯誤訊息，比較容易找到哪個地方出錯，可以方便地進行除錯。&lt;br /&gt;&lt;br /&gt;左邊視窗有專案裡頭的檔案列表，可以方便地檢視專案裡頭的檔案及目錄列表，可以清楚掌握目前有哪些檔案在專案裡頭，如果要增刪檔案或是修改檔名，也是在同一個作業環境下進行，不用再切換到其他的檔案管理軟體進行作業，比較方便。&lt;br /&gt;&lt;br /&gt;aptana的plugin有支援jQuery等許多的javascript的framework，尤其是支援jQuery，真的是太好了，因為jQuery最簡單了，其他的javascript的framework，只要光看語法，就讓我頭暈，不像jQuery的語法那麼直覺，上次研習，介紹了YUI這套framework，語法比起jQuery，簡直就是文言文跟白話文的對比，YUI的語法實在繁複，後來上網找另一套framework—dojo，也是覺得沒有jQuery那麼親切，後來還是決定用jQuery，整個jQuery的語法簡潔明瞭，就像網站上的slogan說的--write less, do more，而且現在jQuery發展一套UI，可以很方便的套用，試用了一下，真的是方便啊，最適合我這種懶人了。&lt;br /&gt;&lt;br /&gt;安裝流程&lt;br /&gt;文件開頭的第二個網址就列出了安裝步驟，而且是圖文並茂的詳細步驟。&lt;br /&gt;&lt;br /&gt;開啟eclipse&lt;br /&gt;&lt;br /&gt;點選help-&gt;software updates-&gt;Find and Install-&gt;search for new features to install-&gt;next&lt;br /&gt;&lt;br /&gt;填入下載網址:http://update.aptana.com/install/studio/3.2/ 及name&lt;br /&gt;&lt;br /&gt;再來看看畫面，一直按下一步就裝好了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-7208431230425021147?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/7208431230425021147/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=7208431230425021147' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7208431230425021147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7208431230425021147'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/08/jquery.html' title='jQuery編輯器'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-5374694164343220316</id><published>2008-07-31T10:40:00.002+08:00</published><updated>2008-07-31T10:44:18.974+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>shaker排序法--單邊</title><content type='html'>只有單邊的shaker排序法，應該比雙邊的shaker排序法慢&lt;br /&gt;&lt;br /&gt;$length=rand(8,10);&lt;br /&gt;&lt;br /&gt;for($i=0;$i&lt;$length;$i++)&lt;br /&gt;  $a[]=rand(200,300);&lt;br /&gt;&lt;br /&gt;$left=0;&lt;br /&gt;$right=$length-1;&lt;br /&gt;&lt;br /&gt;while($left&lt;$right){&lt;br /&gt;$shift=0;&lt;br /&gt;for($i=$left;$i&lt;$right;$i++){&lt;br /&gt;if($a[$i]&gt;$a[$i+1]){&lt;br /&gt;$tmp=$a[$i];&lt;br /&gt;$a[$i]=$a[$i+1];&lt;br /&gt;$a[$i+1]=$tmp;&lt;br /&gt;$shift=$i;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;$right=$shift;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;foreach($a as $num)&lt;br /&gt;echo $num."\n";&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-5374694164343220316?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/5374694164343220316/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=5374694164343220316' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5374694164343220316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5374694164343220316'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/07/shaker_31.html' title='shaker排序法--單邊'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-1190816296998222780</id><published>2008-07-30T22:57:00.002+08:00</published><updated>2008-07-30T22:58:13.929+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='演算法與資料結構'/><title type='text'>shaker排序法</title><content type='html'>$length=rand(8,10);&lt;br /&gt;        for($i=0;$i&lt;$length;$i++)&lt;br /&gt;            $a[]=rand(100,200);&lt;br /&gt;       &lt;br /&gt;        $left=0;&lt;br /&gt;        $right=$length-1;&lt;br /&gt;        while($left&lt;$right){&lt;br /&gt;            for($i=$left;$i&lt;$right;$i++){&lt;br /&gt;                if($a[$i]&gt;$a[$i+1]){&lt;br /&gt;                    $tmp=$a[$i];&lt;br /&gt;                    $a[$i]=$a[$i+1];&lt;br /&gt;                    $a[$i+1]=$tmp;&lt;br /&gt;                    $shift=$i;                   &lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            $right=$shift;&lt;br /&gt;           &lt;br /&gt;            for($i=$right;$i&gt;$left;$i--){&lt;br /&gt;                if($a[$i]&lt;$a[$i-1]){&lt;br /&gt;                    $tmp=$a[$i];&lt;br /&gt;                    $a[$i]=$a[$i-1];&lt;br /&gt;                    $a[$i-1]=$tmp;&lt;br /&gt;                    $shift=$i;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            $left=$shift;&lt;br /&gt;        }&lt;br /&gt;           &lt;br /&gt;        foreach($a as $num)&lt;br /&gt;            echo $num."&lt;br /&gt;\n";&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-1190816296998222780?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/1190816296998222780/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=1190816296998222780' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1190816296998222780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1190816296998222780'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/07/shaker.html' title='shaker排序法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-5052322005352759716</id><published>2008-07-29T00:12:00.001+08:00</published><updated>2008-07-29T17:58:59.208+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='演算法與資料結構'/><title type='text'>氣泡排序法</title><content type='html'>執行時間&lt;br /&gt;O(n^2)&lt;br /&gt;&lt;br /&gt;error_reporting(E_ALL|E_STRICT);&lt;br /&gt;ini_set('display_errors','on');&lt;br /&gt;&lt;br /&gt;$length=rand(8,10);&lt;br /&gt;for($i=0;$i&lt;$length;$i++)  &lt;br /&gt;  $a[]=rand(100,200); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for($i=0;$i&lt;sizeof($a);$i++){ j="sizeof($a)-1;$j"&gt;&lt;count($a);$i++){&lt;br /&gt;   for($j=count($a)-1;$j&gt;$i;$j--){&lt;br /&gt;      if($a[$j]&lt;$a[$j-1]){&lt;br /&gt;     $tmp=$a[$j];&lt;br /&gt;     $a[$j]=$a[$j-1];&lt;br /&gt;     $a[$j-1]=$tmp;&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;foreach($a as $value)&lt;br /&gt; echo $value."\n";&lt;/sizeof($a);$i++){&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-5052322005352759716?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/5052322005352759716/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=5052322005352759716' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5052322005352759716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/5052322005352759716'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/07/blog-post_29.html' title='氣泡排序法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-597900379207861446</id><published>2008-07-28T23:41:00.000+08:00</published><updated>2008-07-28T23:42:03.653+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='演算法與資料結構'/><title type='text'>直接插入法</title><content type='html'>執行時間&lt;br /&gt;O(n^2)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$length=rand(8,15);&lt;br /&gt;for($i=0;$i&lt;$length;$i++)&lt;br /&gt;  $a[]=rand(100,200);&lt;br /&gt;&lt;br /&gt;for($i=1;$i&lt;count($a);$i++){&lt;br /&gt;  for($j=$i;$j&gt;0;$j--){&lt;br /&gt;    if($a[$j]&lt;$a[$j-1]){&lt;br /&gt;      $tmp=$a[$j];&lt;br /&gt;      $a[$j]=$a[$j-1];&lt;br /&gt;      $a[$j-1]=$tmp;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;foreach($a as $value)&lt;br /&gt;  echo $value."\n";&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-597900379207861446?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/597900379207861446/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=597900379207861446' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/597900379207861446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/597900379207861446'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/07/blog-post_28.html' title='直接插入法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-6039924866961882112</id><published>2008-07-28T20:36:00.002+08:00</published><updated>2008-07-29T14:30:31.031+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='演算法與資料結構'/><title type='text'>直接選擇法</title><content type='html'>執行時間&lt;br /&gt;O(n^2)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$a=array(8,49,9,29,30,46,20,31);&lt;br /&gt;&lt;br /&gt;for($i=0;$i&lt;(count($a)-1);$i++){ $min=$a[$i]; $min_pos=$i; for($j=$i+1;$j&lt;count($a);$j++){&gt;$a[$j]){&lt;br /&gt;$min=$a[$j];&lt;br /&gt;$min_pos=$j;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$tmp=$a[$i];&lt;br /&gt;$a[$i]=$a[$min_pos];&lt;br /&gt;$a[$min_pos]=$tmp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;foreach($a as $value){&lt;br /&gt;echo $value."\n";&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-6039924866961882112?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/6039924866961882112/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=6039924866961882112' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6039924866961882112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6039924866961882112'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/07/blog-post.html' title='直接選擇法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-8027712743753729325</id><published>2008-07-28T13:09:00.001+08:00</published><updated>2008-07-28T13:13:18.878+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>ubuntu的啟動管理</title><content type='html'>安裝啟動管理程式&lt;br /&gt;&lt;br /&gt;apt-get intsll sysvconfig&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;啟動管理程式的使用&lt;br /&gt;&lt;br /&gt;圖形介面的使用&lt;br /&gt;&lt;br /&gt;sysvconfig&lt;br /&gt;&lt;br /&gt;文字介面的使用&lt;br /&gt;&lt;br /&gt;sysvconfig --enable apache2&lt;br /&gt;&lt;br /&gt;sysvconfig--disable apache2&lt;br /&gt;&lt;br /&gt;sysvconfig --listlinks |grep apache2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-8027712743753729325?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/8027712743753729325/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=8027712743753729325' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8027712743753729325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8027712743753729325'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/07/ubuntu.html' title='ubuntu的啟動管理'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-7385089608922170649</id><published>2008-07-23T16:59:00.006+08:00</published><updated>2008-07-23T20:46:55.755+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>memcached的使用</title><content type='html'>&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/index.html"&gt;http://dev.mysql.com/doc/refman/5.0/en/index.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://tw2.php.net/manual/en/book.memcache.php"&gt;http://tw2.php.net/manual/en/book.memcache.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Memcached&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;introduction&lt;br /&gt;&lt;/span&gt;在一般的IT環境下，如果要擴增程式的使用人數，最大的問題會卡在程式的執行速度，經常存取的資訊，如果使用mysql做為後端存取的資料庫，速度就會變得慢，因為資訊的存取，必須透過執行sql語法，取得資料庫內相關的資料，而拖慢執行速度。&lt;br /&gt;&lt;br /&gt;memcached是一個簡單的、具有高度伸縮性的key-based快取，快取來源不受限制，他也是一個備份的RAM，可以讓應用程式進行非常快速地存取，要使用memcached，必須在一台或多台主機上執行memcached，讓使用者共享快取內儲存的物件，因為每台主機都是使用RAM儲存資訊，存取的速度遠遠快過從硬碟上進行資訊的存取，這樣的話，相對於從資料庫存取資料，效能的增進是非常明顯的。快取只是容納資訊的空間，你可以在快取內儲存任何資料，如果儲存的是複雜的資料結構，可以在資料存進快取前，先進行複雜的資料庫操作，再將資料放進快取中，可以大幅減少mysql server的負擔。&lt;br /&gt;&lt;br /&gt;使用memcached的一般性作法是修改應用程式，讓應用程式改為從memcached讀取資料，如果需要的資訊不在memcached裡頭，程式就改由mysql讀取資料，再將資料寫入memcached裡頭，以後如果要存取相同資料，就可以發揮memcached資料快速存取的優勢。&lt;br /&gt;&lt;br /&gt;在memcached的架構中，所有的client可以送出key與任何一台memcached伺服器連繫，在這個架構中，每個client可以與圖中的任何伺服器連繫，在client上，當送出要求時，key會先被hash，這個hash值會被用來選取memcached伺服器，memcached伺服器由client決定，可以使程式維持輕量化。&lt;br /&gt;&lt;br /&gt;當client送出key時，會執行同一套演算法，相同的key，會產生相同的hash值，同一部memcached伺服器就會被選為資料來源，使用這個方法，快取資料被分散放置在所有的memcached伺服器上，而這些快取資訊可以被所有的client存取，結果就是，以記憶體做為資料儲存處的分散式快取，這類型的快取尤其適合複雜的資料結構，存取速度遠遠快過直接從資料庫存取資料。&lt;br /&gt;&lt;br /&gt;在memcached伺服器中的資料永遠不會放在磁碟上，記憶體中的快取可以從後端的資料庫(mysql)取得資料，如果memcached伺服器當掉了，可以改為由mysql取得資料，當然，速度會變得比較慢。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Installing memcached&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;在ubuntu上安裝memcached非常輕鬆，只要輸入下面這道指令，再按enter就安裝好了&lt;br /&gt;&lt;br /&gt;apt-get install memcached&lt;br /&gt;&lt;br /&gt;memcached的啟動&lt;br /&gt;&lt;br /&gt;在ubuntu上啟動memcached伺服器&lt;br /&gt;&lt;br /&gt;/etc/init.d/memcached start&lt;br /&gt;&lt;br /&gt;參數配置&lt;br /&gt;&lt;br /&gt;參考/etc/memcached.conf設定檔的說明會更清楚&lt;br /&gt;&lt;br /&gt;-u 執行身份&lt;br /&gt;-m 記憶體容量(快取容量，單位為MB)&lt;br /&gt;-p 指定port&lt;br /&gt;-d 以daemon方式執行&lt;br /&gt;-t 指定執行緒的數量&lt;br /&gt;-l 指定執行的網路介面&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;memcached deployment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;memcached有許多不同的佈署方式及策略，正確的佈署方式取決於你的應用程式及環境，當在系統中佈署memcached，你必須考量下列的注意事項&lt;br /&gt;&lt;br /&gt;*memcached只是一項快取機制，如果資料很重要，在存取的過程中不能因為漏失，再從不同的地方存取，就不能使用memcached。&lt;br /&gt;&lt;br /&gt;*memcached沒有內建的安全機制，至少，你必須確定，memcached伺服器只能在內部網路存取，而且memcached伺服器使用的port不能被外部網路存取。如果memcached含有敏感性資料，這些資料在存進memcached前要先被加密。&lt;br /&gt;&lt;br /&gt;*memcached不提供復原機制，因為memcached之間沒有任何的溝通協定，如果一台memcached故障了，你必須將這台memcached從列表中移除，再重新載入資料，再將資料寫入另一台memcached伺服器中，&lt;br /&gt;&lt;br /&gt;*如果client及memcached分別在不同的機器上，資料傳送延遲性如果造成問題，可以把memcached服務移到client端的機器上。&lt;br /&gt;&lt;br /&gt;*key的長度是由memcached伺服器決定，預設的最大長度是250byte&lt;br /&gt;&lt;br /&gt;*只使用一台memcached絕不是一個好的想法，尤其是服務多個client時，最少提供二台&lt;br /&gt;memcached，才可以恰當地管理機器當機的狀況，如果可以的話，應該多建置幾台memcached&lt;br /&gt;伺服器。當增加或移除memcached伺服器時，key/value的配置及hash值就會受到影響，如果要避免這些問題，必須研究memcached的hash type。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Memory allocation within memcached&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;當你第一次啟動memcached伺服器，memcached參數指定的記憶體數量不會自動配置給memcached，相反地，當開始將資料存進memcached的快取時，才會進行記憶體的分配。&lt;br /&gt;&lt;br /&gt;當你開始將資料存在快取中，memcached不會為每個存入快取的資料一一配置記憶體空間，而是一次配置一個區塊，以進行記憶體空間的有效利用，避免快取資料過期時，造成記憶體空間配置的零碎化。&lt;br /&gt;&lt;br /&gt;memcached裡頭的快取記憶體配置，以page為單位，每一page預設是1M，一個或多個page組成一個slab。&lt;br /&gt;&lt;br /&gt;當memcached啟動時，不會進行slab及page的配置，只有當資料存進快取時，才會在page中切出適當大小的chunk，把資料存進chunk中，每一個chunk，會儲存一筆資料的value跟key，而page中每筆chunk的大小都必須一樣。&lt;br /&gt;&lt;br /&gt;例如，memcached啟動時，有一筆資料的大小是800k，須要存入快取，這時就會建立一個slab，這個slab中page的chunk大小就是1M，一個page就只有一個chunk。&lt;br /&gt;&lt;br /&gt;如果存入快取的資料是250K，那麼，就會建立一個slab，這個slab會再建立一個page，這個page會再切成4個大小相同的chunk。如果還有6筆250K的資料要存入快取，這個slab會再建立第二個相同的page進行資料的儲存。&lt;br /&gt;&lt;br /&gt;資料如果超過1M，由於chunk預設是不能超過一M，而且資料必須塞進chunk中，因此超過一M的資料就會無法存入快取當中。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Using namespaces&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;memcached是非常簡單的key/value型式的儲存系統，無法自動將資料進行分類，例如，如果你使用mysql資料表傳回的id當做存入memcached快取的key時，就有可能有二筆由mysql資料表傳回的資料，雖然內容不同，id卻相同，存入快取時這二筆資料就會相互覆蓋，造成資料讀取的錯誤。&lt;br /&gt;&lt;br /&gt;一些程式的API會在資料存入快取時，自動建立命名空間，實務上，這些命名空間，只是在存取資料時，在key前加上區別的字串。&lt;br /&gt;&lt;br /&gt;你可以自己實做命名空間，只要存取快取資料時，在key前加上自定的字串就可以了，如加上”user_”字串。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Data Expiry&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;memcached快取資料的過期有二種狀況，如果要插入新的資料到快取中，但是沒有適當地slab可以存資料時，最近最少使用的資料會被移除，以騰出空間讓新的資料存入。&lt;br /&gt;&lt;br /&gt;這個方法可以確保被移除的資料，是不再被使用的，或是已經很久不被使用的，但如果memcached的快取容量，比正常狀況使用時小很多時，你就會看到很多尚在使用的資料被移除了。&lt;br /&gt;&lt;br /&gt;啟動memcached時啟用 -M參數，會在記憶體不足時發出警告，而不是自動刪除舊有的資料。&lt;br /&gt;&lt;br /&gt;第二種快取過期的狀況，是直接刪除快取資料，或是設定資料過期的時間。&lt;br /&gt;&lt;br /&gt;一種典型的應用就是設定使用者儲存的session資料，快取過期的時間。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;在php中使用memcached&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;api的安裝&lt;br /&gt;&lt;br /&gt;apt-get install php5-memcache&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;程式範例&lt;br /&gt;&lt;br /&gt;程式名稱：a.php&lt;br /&gt;&lt;?php&lt;br /&gt;class Test{&lt;br /&gt;  public $model;&lt;br /&gt;  public $color;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$test=new Test();&lt;br /&gt;$test-&gt;model='bmw';&lt;br /&gt;$test-&gt;color='red';&lt;br /&gt;&lt;br /&gt;$cache=new Memcache();&lt;br /&gt;$cache-&gt;connect('localhost',11211);&lt;br /&gt;$cache-&gt;set('car',$test);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;程式名稱：b.php&lt;br /&gt;&lt;?php&lt;br /&gt;class Test{&lt;br /&gt;  public $model;&lt;br /&gt;  public $color;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;connect('localhost',11211);&lt;br /&gt;$car=$cache-&gt;get('car');&lt;br /&gt;&lt;br /&gt;echo $car-&gt;model;&lt;br /&gt;echo “\n”;&lt;br /&gt;echo $car-&gt;color;&lt;br /&gt;echo “\n”;&lt;br /&gt;&lt;br /&gt;跑完a.php程式後，再跑b.php，就會跑出下面的結果&lt;br /&gt;bmw&lt;br /&gt;red&lt;br /&gt;&lt;br /&gt;程式中物件的二個屬性都是經由serialize後，由a.php存在快取中，如果其他的程式要取用這二個屬性，只要有快取的key值，就可以得到這個物件的屬性。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-7385089608922170649?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/7385089608922170649/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=7385089608922170649' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7385089608922170649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7385089608922170649'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/07/memcached.html' title='memcached的使用'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-6571103917814036790</id><published>2008-07-07T09:52:00.002+08:00</published><updated>2008-07-07T09:56:43.519+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>輸出mysql的schema</title><content type='html'>這是在mysql workbench的說明文件上看到的一個方法，如果要輸出資料庫裡頭已建好的資料庫架構，可以下這道指令，把整個資料庫的schema都輸出成sql指令檔，再用mysql workbench的輸入功能，將sql指令檔輸入到mysql workbench，就可以看到完整的資料庫架構圖。&lt;br /&gt;&lt;br /&gt;指令用法：&lt;br /&gt;mysqldump 資料庫名稱 --no-data&gt;輸出檔名&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-6571103917814036790?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/6571103917814036790/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=6571103917814036790' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6571103917814036790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6571103917814036790'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/07/mysqlschema.html' title='輸出mysql的schema'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-4156433816337886044</id><published>2008-07-03T10:17:00.002+08:00</published><updated>2008-07-03T10:20:45.033+08:00</updated><title type='text'>忘記mysql的root密碼</title><content type='html'>&lt;a href="http://blog.tmu.edu.tw/tedyeng/000096.html"&gt;http://blog.tmu.edu.tw/tedyeng/000096.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;一、停用mysql&lt;br /&gt;&lt;br /&gt;二、重新啟動mysql&lt;br /&gt;mysqld -u root --skip-grant-tables &amp;amp;&lt;br /&gt;&lt;br /&gt;三、修改root密碼&lt;br /&gt;use mysql;&lt;br /&gt;UPDATE user SET password=password('new password') where user='root';&lt;br /&gt;FLUSH PRIVILEGES;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-4156433816337886044?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/4156433816337886044/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=4156433816337886044' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4156433816337886044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4156433816337886044'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/07/mysqlroot.html' title='忘記mysql的root密碼'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-7035320532151876662</id><published>2008-06-30T21:22:00.002+08:00</published><updated>2008-06-30T21:35:07.273+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>gcin的大易輸入法</title><content type='html'>gcin的大易輸人法無法使用鍵盤輸入標點符號，要解決這個問題，有兩個方法可以解決:&lt;br /&gt;&lt;br /&gt;1.在大易輸入法下，按住ctrl-alt-逗號，就會顯示符號表，用滑鼠點選符號就可以輸入標點符號，不過使用滑鼠輸入比不上用鍵盤快速，不太方便。&lt;br /&gt;&lt;br /&gt;2.在EN圖示上按右鍵-&gt;設定-&gt;倉擷/行列/大易/嘸蝦米設定-&gt;編輯內定輸入法的使用者外加字詞&lt;br /&gt;&lt;br /&gt;加入下面兩行&lt;br /&gt;&lt;br /&gt;,, ，&lt;br /&gt;.. 。&lt;br /&gt;&lt;br /&gt;以後輸入逗號時，按兩次逗號就會出現逗號。&lt;br /&gt;要輸入句號，按兩次點號就可以了。&lt;br /&gt;&lt;br /&gt;第一欄是輸入的鍵盤符號&lt;br /&gt;第二欄是輸入後的文字&lt;br /&gt;第一欄及第二欄間以空白分隔&lt;br /&gt;&lt;br /&gt;其他的標點符號如果要使用鍵盤輸入，也是用同樣的方式設定。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-7035320532151876662?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/7035320532151876662/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=7035320532151876662' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7035320532151876662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/7035320532151876662'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/gcin.html' title='gcin的大易輸入法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-3268099645032097835</id><published>2008-06-30T16:24:00.002+08:00</published><updated>2008-06-30T16:34:36.915+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>stored procedure</title><content type='html'>&lt;p&gt; &lt;br /&gt;Stored procedure&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.html"&gt;http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.html&lt;/a&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;什麼是stored procedure&lt;/span&gt;&lt;br /&gt;stored procedure是由一群sql敘述及流程控制的語法組成，本質上就是mysql中的程式語言，只是stored procedure的程式語法，跟php的不一樣，能使用的環境只限於mysql資料庫中，專為處理資料庫的操作，為了處理資料庫中的資料，有一些語法與php這種泛用型的程式語言，語法方面就稍微有些不同。就像戰機有雖然都有戰鬥功能，但為了不同的目的，有不同設計，以發揮團隊作戰的整體力量，有的戰機是專用對付入侵的戰機，是屬於空優型戰機，有的戰機，武裝不強，但體型龐大，有匿蹤功能，可以攜帶大量彈藥轟炸敵軍，屬於轟炸機。&lt;br /&gt;mysql的stored procedure的語法遵循SQL:2003的語法標準，IBM的DB2也一樣遵循這套標準，遵循相同的標準有相當明顯的好處，如果要轉換資料庫，stored procedure不同重新撰寫，除錯，可以輕易的進行轉換，不會因為換了資料庫，必須重頭學習另一種語法，所有的基礎重頭來過。&lt;br /&gt;使用stored procedure可以減少php程式碼的數量並增加程式的效能，php程式中只要呼叫stored procedure，stored procedure便會執行stored procedure中所有的sql敘述，並將結果傳回php程式中，php不用再一一呼叫sql statement，執行各自獨立的sql statement，再一一判斷結果，進行處理，這些sql statement及判斷統統都包裝在stored procedure裡頭，php及mysql之間傳遞的資料數量大幅減少，由於php與mysql之間等待資料傳送的時間及次數減少，可以加快程式的速度，也由於只要呼叫stored procedure，而不用呼叫各自獨立的sql statement，也減少了程式碼的數量。&lt;br /&gt;目前，stored procedure不支援遞迴呼叫，如果要使用遞迴呼叫，必須將mysql變數：max_sp_recursion_depth 設定為非零的數字，預設是零，不允許遞迴，設為1，允許遞迴一次，設為2，允許遞迴二次，以此類推。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;stored procedure的管理&lt;br /&gt;&lt;/span&gt;stored procedure都存在mysql資料庫中的proc資料表中(mysql.proc)，這個資料表儲存所有的stroed procedure，這些資料透過管理工具，可以運作正常，但如果手動修改，就有可能發生不可預期的後果，絕對不要手動修改這些資料，而是要透過create procedure，alter proceudre或是drop procedure來進行管理。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;要建立stored procedure就必須有create routine的權限&lt;br /&gt;&lt;/p&gt;&lt;p&gt;要修改stored procedure就必須有alter routine的權限&lt;br /&gt;&lt;/p&gt;&lt;p&gt;要執行stored procedure就必須有execute的權限&lt;br /&gt;&lt;/p&gt;&lt;p&gt;有create routine的權限就自動會有alter routine及execute的權限&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;建立stored procedure的語法&lt;br /&gt;&lt;/span&gt;create [definer={usercurrent_user}] procedure sp_name([sp_parameter],[sp_parameter]...)&lt;br /&gt;[characteristic]&lt;br /&gt;stored procedure body&lt;br /&gt;[characteristic]&lt;br /&gt;language sql&lt;br /&gt;目前沒有作用&lt;br /&gt; [not] deterministic&lt;br /&gt;如果沒設，預設為 not deterministic&lt;br /&gt; { CONTAINS SQL  NO SQL  READS SQL DATA  MODIFIES SQL DATA }&lt;br /&gt;目前沒有強制性，mysql只會當做註解&lt;br /&gt; sql security {definerinvoker}&lt;br /&gt;預設為definer&lt;br /&gt; comment '註解內容'&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;修改&lt;br /&gt;&lt;/span&gt;alter procedure sp_name ...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;刪除&lt;br /&gt;&lt;/span&gt;drop procedure sp_name;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;執行stored procedure&lt;br /&gt;&lt;/span&gt;call 預存程序名稱(參數);&lt;br /&gt;以實際範例操作會比較清楚。&lt;br /&gt;/**&lt;br /&gt;*建立store procedure，名稱為sp_test&lt;br /&gt;*/&lt;br /&gt;delimiter //&lt;br /&gt;create definer=current_user procedure sp_test(out version varchar(60),out day varchar(60))&lt;br /&gt;language sql&lt;br /&gt;not deterministic&lt;br /&gt;contains sql&lt;br /&gt;sql security definer&lt;br /&gt;begin&lt;br /&gt;select version() into version;&lt;br /&gt;select curdate() into day;&lt;br /&gt;end;&lt;br /&gt;//&lt;br /&gt;delimiter ;&lt;br /&gt;/**&lt;br /&gt;*執行stored procedure，stored procedure的名稱為sp_test&lt;br /&gt;*/&lt;br /&gt;call sp_test(@version,@day);&lt;br /&gt;select @version,@day;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;變數的處理&lt;br /&gt;&lt;/span&gt;變數宣告&lt;br /&gt;declare i int default 1;&lt;br /&gt;變數的設定&lt;br /&gt;set i=3;&lt;br /&gt;select 4*5 into i;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;例外處理&lt;br /&gt;&lt;/span&gt;例外訊息列表&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html"&gt;http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html&lt;/a&gt;&lt;br /&gt;看下面的實例比較快&lt;br /&gt;delimiter //&lt;br /&gt;create procedure sp_h()&lt;br /&gt;begin&lt;br /&gt;declare no_table condition for 1146;&lt;br /&gt;declare continue handler for no_table&lt;br /&gt;begin&lt;br /&gt;select 'hi!! world!';&lt;br /&gt;end;&lt;br /&gt;select * from a;&lt;br /&gt;end&lt;br /&gt;//&lt;br /&gt;delimiter ;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;cursor&lt;br /&gt;&lt;/span&gt;只能讀&lt;br /&gt;只能單向移動，不能跳過任一列&lt;br /&gt;create procedure test()&lt;br /&gt;begin&lt;br /&gt;declare var_name varchar(30);&lt;br /&gt;declare cur1 cursor for select name from a;&lt;br /&gt;declare exit handler for sqlstate '02000' begin end;&lt;br /&gt;open cur1;&lt;br /&gt;repeat&lt;br /&gt;fetch cur1 into var_name;&lt;br /&gt;select var_name;&lt;br /&gt;until 0 end repeat;&lt;br /&gt;close cur1;&lt;br /&gt;end;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;宣告的順序&lt;br /&gt;&lt;/span&gt;變數及condition&lt;br /&gt;cursor&lt;br /&gt;handler&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;流程控制&lt;br /&gt;&lt;/span&gt;mysql的stored procedure流程控制語法跟一般的程式語言相同，有迴圈及判斷式的二類。迴圈及判斷式的用法與php的用法相同，只是語法不一樣，寫幾個具體範例熟悉一下迴圈及判斷式的語法會比較較快進入狀況，manual上的說明，範例太少了，自己出幾個題目，動手寫一些小程式會比較快熟悉stored procedure的迴圈判斷式的語法。&lt;br /&gt;Mysql的stored procedure的iterate及leave是用在迴圈的語法，iterate的功能與php中的continue相同，leave就跟php中的break相同，都是控制迴圈進行的語法，讓程式能依照判斷式跳出迴圈或繼續重頭執行迴圈中的程式碼。&lt;br /&gt;底下是使用stored procedure的語法寫的簡易程式，最好是使用記本先打好，再匯入mysql或是使用mysql的圖形化介面的管理工具，如navicat、Mysql Administrator，進行stored procedure的撰寫，才會比較快速有效率，不然是很難進行除錯的。工欲善其事，必先善其器，好的工具及方法，可以加快你進入stored procedure世界的速度。&lt;br /&gt;程式很簡單，只要有程式基礎，看一下manual就知道程式是怎麼運作，但學習方法比較容易被忽略，如果只是看看過去，沒有實際撰寫的話，不容易深入了解stored procedure的運作。最好自己出題，實際寫幾個stored procedure，搭配manual上的說明，才能對stored procedure有完整的認識。&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;以loop迴圈寫的九九乘法表&lt;/span&gt;&lt;br /&gt;delimiter //&lt;br /&gt;create procedure sp_a()&lt;br /&gt;begin&lt;br /&gt;declare i int default 1;&lt;br /&gt;declare j int default 1;&lt;br /&gt;label_a: loop&lt;br /&gt;if i&lt;=9 then&lt;br /&gt;set j=1;&lt;br /&gt;label_b: loop&lt;br /&gt;if j&lt;=9 then&lt;br /&gt;select i,j,i*j;&lt;br /&gt;set j=j+1;&lt;br /&gt;iterate label_b;&lt;br /&gt;end if;&lt;br /&gt;leave label_b;&lt;br /&gt;end loop label_b;&lt;br /&gt;set i=i+1;&lt;br /&gt;iterate label_a;&lt;br /&gt;end if;&lt;br /&gt;leave label_a;&lt;br /&gt;end loop label_a;&lt;br /&gt;end;&lt;br /&gt;//&lt;br /&gt;delimiter ;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;以repeat迴圈寫的九九乘法表&lt;/span&gt;&lt;br /&gt;delimiter //&lt;br /&gt;create procedure sp_b()&lt;br /&gt;begin&lt;br /&gt;declare i int default 1;&lt;br /&gt;declare j int default 1;&lt;br /&gt;repeat&lt;br /&gt;set j=1;&lt;br /&gt;repeat&lt;br /&gt;select i,j,i*j;&lt;br /&gt;set j=j+1;&lt;br /&gt;until j&gt;9 end repeat;&lt;br /&gt;set i=i+1;&lt;br /&gt;until i&gt;9 end repeat;&lt;br /&gt;end;&lt;br /&gt;//&lt;br /&gt;delimiter ;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;以while迴圈寫的九九乘法表&lt;br /&gt;&lt;/span&gt;delimiter //&lt;br /&gt;create procedure sp_c()&lt;br /&gt;begin&lt;br /&gt;declare i int default 1;&lt;br /&gt;declare j int default 1;&lt;br /&gt;while i&lt;=9 do&lt;br /&gt;set j=1;&lt;br /&gt;while j&lt;=9 do&lt;br /&gt;select i,j,i*j;&lt;br /&gt;set j=j+1;&lt;br /&gt;end while;&lt;br /&gt;set i=i+1;&lt;br /&gt;end while;&lt;br /&gt;end;&lt;br /&gt;//&lt;br /&gt;delimiter ;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;if判斷式的使用&lt;/span&gt;&lt;br /&gt;delimiter //&lt;br /&gt;create procedure sp_d(in age int)&lt;br /&gt;begin&lt;br /&gt;if age&lt;18 then&lt;br /&gt;select 'you are young man';&lt;br /&gt;elseif age&gt;=18 and age&lt;40 then&lt;br /&gt;select 'you have many life experiences';&lt;br /&gt;else&lt;br /&gt;select 'you ard old man';&lt;br /&gt;end if;&lt;br /&gt;end;&lt;br /&gt;//&lt;br /&gt;delimiter ;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;case判斷式的使用&lt;/span&gt;&lt;br /&gt;delimiter //&lt;br /&gt;create procedure sp_e(in selector int)&lt;br /&gt;begin&lt;br /&gt;case selector&lt;br /&gt;when 1 then&lt;br /&gt;select 'yellow';&lt;br /&gt;when 2 then&lt;br /&gt;select 'black';&lt;br /&gt;when 3 then&lt;br /&gt;select 'red';&lt;br /&gt;else&lt;br /&gt;select 'no color selected';&lt;br /&gt;end case;&lt;br /&gt;end;&lt;br /&gt;//&lt;br /&gt;delimiter ;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-3268099645032097835?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/3268099645032097835/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=3268099645032097835' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3268099645032097835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/3268099645032097835'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/stored-procedure.html' title='stored procedure'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-2406567760973355943</id><published>2008-06-28T15:44:00.001+08:00</published><updated>2008-06-28T15:44:55.949+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>看chm</title><content type='html'>在ubuntu上看chm檔的工具&lt;br /&gt;&lt;br /&gt;apt-get install gnochm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-2406567760973355943?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/2406567760973355943/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=2406567760973355943' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2406567760973355943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2406567760973355943'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/chm.html' title='看chm'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-1768187092156946664</id><published>2008-06-28T15:27:00.002+08:00</published><updated>2008-06-28T15:32:45.803+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>大易輸入法</title><content type='html'>ubuntu上內定的輸入工具scim,大易輸入法是使用三碼輸入,跟我習慣的四碼輸入不太一樣,要重頭適應,實在是很痛苦.&lt;br /&gt;&lt;br /&gt;上網找了一下資料,把scim換成gcin,就可以用四碼的大易輸入法了.但是標點符號,還是一樣沒辦法用大易四碼的方式打出來,輸入標點符號挺麻煩的.&lt;br /&gt;&lt;br /&gt;scim換成gcin的步驟如下&lt;br /&gt;&lt;br /&gt;apt-get install gcin&lt;br /&gt;im-swith -s gcin&lt;br /&gt;登出&lt;br /&gt;重新登入&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-1768187092156946664?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/1768187092156946664/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=1768187092156946664' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1768187092156946664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1768187092156946664'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/blog-post_28.html' title='大易輸入法'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-6975927091915855849</id><published>2008-06-24T11:13:00.002+08:00</published><updated>2008-06-24T11:37:17.683+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>上傳檔案的設定</title><content type='html'>http://www.php.net/manual/en/features.file-upload.common-pitfalls.php&lt;br /&gt;&lt;br /&gt;php相關設定&lt;br /&gt;upload_max_filesize &lt;br /&gt;memory_limit &lt;br /&gt;max_execution_time &lt;br /&gt;post_max_size &lt;br /&gt;&lt;br /&gt;mysql相關設定&lt;br /&gt;max_allowed_packet&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-6975927091915855849?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/6975927091915855849/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=6975927091915855849' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6975927091915855849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/6975927091915855849'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/blog-post_6316.html' title='上傳檔案的設定'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-1418072841971980480</id><published>2008-06-24T09:31:00.004+08:00</published><updated>2008-06-24T11:39:42.875+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>撰寫上傳物件的問題</title><content type='html'>想要寫一個檔案上傳的物件，以方便以後程式碼的重複使用，不必重造輪子，做相同的事情，仔細思考很久，如果上傳的檔案都存在目錄裡，還必須考量到檔案備份、程式碼中檔案上傳的安全性，使用者上傳的檔案名稱也必須做管控，才能避免檔案重複，造成檔案彼此覆蓋的問題，因此決定將上傳物件，寫成將插入資料庫的型式，如果以物件導向的模式方式思考，其實應該實做一個interface或abstract，再分別撰寫要上傳至資料庫的物件，及上傳至目錄的物件，這樣才能顧及程式的擴展性及可維護性，不過現在沒想那麼多，先能用就好了。&lt;br /&gt;&lt;br /&gt;檔案存到資料庫中，只要必份資料庫並小心權限設定，程式碼使用prepared statement操控資料庫，就可以避掉sql injection及檔案備份的問題，以後只要備份資料庫就可以了，而不用再備份檔案，也不用再花心思控管上傳檔案的安全性。比較省事。&lt;br /&gt;&lt;br /&gt;上傳物件，在網路上有許多現成的程式碼可以參考，各種寫法看了讓人頭昏眼花，參考了php manual後，最後決定使用file_get_contents函數進行檔案的處理，這個函數是php manual上建議使用的函數，雖然php 6.0以後才會完整支援所有的參數，但轉換檔案為string時，這個函數的轉換效率是最好的。&lt;br /&gt;&lt;br /&gt;如果使用fopen開啟檔案，再使用read()函數進行讀取，要記得加上參數'rb'，如fopen(檔案,'rb')，因為windows系統對待binary跟文字檔是不同的，所以要記得加b，操作時才不會出錯。&lt;br /&gt;&lt;br /&gt;測試上傳物件時，檔案比較大的物件上傳時，都會被切成只有64k，找程式碼找了半天，也找不到錯誤，後來，在mysql manual上找到原因了，blob的儲存上限是64k，mediumblob是16M，bigblob是4g，改欄位的資料型態就一切正常了。&lt;br /&gt;&lt;br /&gt;另一個在測試時碰到的問題，就是中文檔名下載時會出會錯誤，只要使用urlencode()函數將檔名重新編碼，就不會有這個問題了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-1418072841971980480?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/1418072841971980480/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=1418072841971980480' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1418072841971980480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1418072841971980480'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/blog-post_24.html' title='撰寫上傳物件的問題'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-9184636288988923857</id><published>2008-06-23T13:49:00.000+08:00</published><updated>2008-06-23T13:50:26.436+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>多媒體播放器</title><content type='html'>在pchome上看到的二套多媒體播放器，中文檔名不會出現亂碼&lt;br /&gt;&lt;br /&gt;看影片&lt;br /&gt;&lt;br /&gt;smplayer&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;聽mp3&lt;br /&gt;&lt;br /&gt;偏好設定的部份，取消「使用點陣字」勾選，就可顯示中文&lt;br /&gt;&lt;br /&gt;audacious&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-9184636288988923857?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/9184636288988923857/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=9184636288988923857' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/9184636288988923857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/9184636288988923857'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/blog-post_23.html' title='多媒體播放器'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-1891261363826292419</id><published>2008-06-18T15:16:00.003+08:00</published><updated>2008-06-18T15:19:14.245+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>Zend_Acl_Role的設計</title><content type='html'>&lt;a href="http://bp0.blogger.com/_KKv6FrISXHE/SFi2ssA4I2I/AAAAAAAAAAo/JeHd-WJC20w/s1600-h/Zend_Acl_Role.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_KKv6FrISXHE/SFi2ssA4I2I/AAAAAAAAAAo/JeHd-WJC20w/s400/Zend_Acl_Role.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5213117447526687586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&lt;br /&gt;* 程式碼是以陳瑩光老師新版學務系統的認證模組改寫的。&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;要實做Zend_Acl_Role的多重繼承架構，有四個區塊的觀念必須弄清楚，才能把整個架構完整的實做，這四個區塊都弄楚了，程式的實做就是水到渠成的事情。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第一個要弄清楚的區塊就是Zend_Acl_Role的多重繼承觀念，Zend_Acl_Role的繼承關係，跟Zend_Acl_Resource不一樣，Zend_Acl_Resource只能有一個parent，但Zend_Acl_Role卻可以有很多個parent，就像現實生活中的人物一樣，每個人都身兼多重身份，Zend_Acl_Role也可以同時繼承多個parent，與一個實例說明：假設一個Zend_Acl_Role的身份是專案經理，同時繼承了程式設計師、架構設計師及資料庫規畫師的身份，那麼專案經理就同時繼承了指定給這三個身份的所有資源。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第二個要弄清楚的區塊是資料庫結構，如果不使用資料庫，而將Zend_Acl_Role的資料寫在程式碼中，程式碼會變得很冗長，要一行一行coding，不是用幾個迴圈就可以解決的，也難以維護，如果資料非常龐雜，不但程式碼的行數會呈等比級數增加，也會很難搞清楚其中的繼承關係，程式也容易寫錯，為了一勞永逸，最好將這些資料都存入資料庫進行維護管理。存成xml或是ini檔也是可以解決部份的問題，不過資料如果太複雜，也會造成難以維護的結果，最好的解決辦法，就是使用資料庫。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第三個要弄清楚的就是陣列結構，使用陣列結構，只要從資料庫中抓一次資料，將資料轉為陣列結構，在後續的程序中直接使用陣列結構進行資料的操作，如果不使用陣列，那麼後續的程序，會不斷的讀取資料庫，雖然不能說這樣的作法有錯，但資料庫的資料都是存放在硬碟中的，每次讀取資料庫中的資料都會讀取硬碟，而陣列是存放在記憶體裡頭，在速度上，記憶體比硬碟快很多，因此，陣列的操作速度會比資料庫的操作速度快，為了加快速度，最好儘量使用陣列結構進行程式資料的存取。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第四個區塊就是程式的邏輯，這部份要花費很大的心思才能搞懂，如果弄懂了，程式的實做就很快了，只要照著你的思考順序，一步步的將解決方式寫出來就可以建構完整的程式碼了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;用freemind畫了四個區塊的架構圖，以後如果忘記了，不用看程式碼，也不用看說明，看這張圖就一目了然了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以Zend Framework實做Zend_Acl_Role的雛型&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class AclController extends Zend_Controller_Action{&lt;br /&gt; public function init(){&lt;br /&gt;  $this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();&lt;br /&gt;  Zend_Loader::loadClass('Zend_Acl');&lt;br /&gt;  Zend_Loader::loadClass('Zend_Acl_Role');&lt;br /&gt;  Zend_Loader::loadClass('Zend_Acl_Resource');&lt;br /&gt;  &lt;br /&gt;  $acl=new Zend_Acl();&lt;br /&gt;  Zend_Registry::set('acl',$acl);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public function roleAction(){&lt;br /&gt;  &lt;br /&gt;  $baseDir=Zend_Registry::get('baseDir');&lt;br /&gt;  &lt;br /&gt;  $config=new Zend_Config(require($baseDir.'/application/etc/db.php'));&lt;br /&gt;  &lt;br /&gt;  $db=Zend_Db::factory($config-&gt;public);&lt;br /&gt;  &lt;br /&gt;  $db-&gt;query('set names utf8');&lt;br /&gt;  &lt;br /&gt;  $sql='select a.id,b.parent_id from acl_role as a left outer join acl_inheritance as b on a.id=b.child_id';&lt;br /&gt;  $stmt=$db-&gt;query($sql);&lt;br /&gt;  $rows=$stmt-&gt;fetchAll();&lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * 將資料轉為所需的陣列結構&lt;br /&gt;   * Zend_Acl_Role註冊時所需的陣列結構&lt;br /&gt;   */&lt;br /&gt;  $roles=array();&lt;br /&gt;  foreach($rows as $row){&lt;br /&gt;   if(!isset($roles[$row['id']]))&lt;br /&gt;    $roles[$row['id']]=array();&lt;br /&gt;   if(isset($row['parent_id']))&lt;br /&gt;    $roles[$row['id']][]=$row['parent_id'];&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $acl=Zend_Registry::get('acl');&lt;br /&gt;  do{&lt;br /&gt;   $flag=false;&lt;br /&gt;   &lt;br /&gt;   /**&lt;br /&gt;    * 註冊role&lt;br /&gt;    */&lt;br /&gt;   foreach($roles as $key=&gt;$role){&lt;br /&gt;    if(!$acl-&gt;hasRole($key) &amp;&amp; (!isset($role) || $this-&gt;hasAllRole($role))){&lt;br /&gt;     $acl-&gt;addRole(new Zend_Acl_Role($key),$role);&lt;br /&gt;    }&lt;br /&gt;    /**&lt;br /&gt;     * 檢查第一維的key是否都己註冊為role&lt;br /&gt;     * 是---離開&lt;br /&gt;     * 否---繼續&lt;br /&gt;     */&lt;br /&gt;    if(!$acl-&gt;hasRole($key))&lt;br /&gt;     $flag=true;&lt;br /&gt;   }&lt;br /&gt;  }while($flag);&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function hasAllRole(array &amp;$role){&lt;br /&gt;  $acl=Zend_Registry::get('acl');&lt;br /&gt;  foreach($role as $parent_id){&lt;br /&gt;   if(!$acl-&gt;hasRole($parent_id))&lt;br /&gt;    return false;&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-1891261363826292419?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/1891261363826292419/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=1891261363826292419' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1891261363826292419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1891261363826292419'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/zendaclrole.html' title='Zend_Acl_Role的設計'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_KKv6FrISXHE/SFi2ssA4I2I/AAAAAAAAAAo/JeHd-WJC20w/s72-c/Zend_Acl_Role.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-4661832153811718128</id><published>2008-06-17T14:27:00.002+08:00</published><updated>2008-06-18T10:16:34.304+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>Zend_Acl_Resource的樹狀結構</title><content type='html'>&lt;a href="http://bp1.blogger.com/_KKv6FrISXHE/SFdZn3qB73I/AAAAAAAAAAg/ajvTs0nzEY4/s1600-h/Zend_Acl_Resource.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_KKv6FrISXHE/SFdZn3qB73I/AAAAAAAAAAg/ajvTs0nzEY4/s400/Zend_Acl_Resource.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5212733635194646386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Zend_Acl_Resource的樹狀結構&lt;br /&gt;&lt;br /&gt;要建立Zend_Acl_Resource的樹狀結構，對我來說難度滿高的，想了很久，都想不出解法，最後看了陳瑩光老師寫的新版學務系統中的認證模組，找到了解法，不過雖然解法找到了，卻不明瞭為何要這樣寫，思考了很久，才把需要了解的區塊，一個個弄清楚，再把整個解法背後運用的思考邏輯用freemind全部畫出來，再依照這張畫出來的圖，自己弄出一個建構Zend_Acl_Resource樹狀結構的原型，我自己寫的程式改良了原來程式碼的部份寫法，不過，沒有將錯誤機制考慮在內，也就是說，在資料庫內的資料都必須是正確的。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;建立Zend_Acl_Resource樹狀結構的資料庫內的欄位資料&lt;br /&gt;&lt;br /&gt;資料表：resource&lt;br /&gt;&lt;br /&gt;欄位&lt;br /&gt;id----------Primary key(resource的名稱)&lt;br /&gt;parent_id---參照id或是null&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;要建立Zend_Acl_Resource的樹狀結構的第一步就是將資料從資料庫中抓到陣列中，如果不這麼做，那麼每建立一層樹狀結構就要把資料表的全部資料讀取一遍，是非常耗時的，如果把資料抓到陣列中，由於陣列是存放在記憶體中，比起存放在資料表中的資料，讀取速度快非常多，為了效能的考量，一定要先將資料讀入陣列中。&lt;br /&gt;&lt;br /&gt;第二步就是開始建立整個樹狀結構，原理是利用迴圈的方式，第一次迴圈會找出所有id未註冊且parent_id是null的陣列值，註冊為最上層的resource，第二次迴圈會找出所有id未註冊且parent_id(參照到最上層resource的id)已註冊的陣列值，註冊為第二層的resource，第三次迴圈會找出所有id未註冊且parent_id(參照到第二層的resource的id)已註冊的陣列值，註冊為第三層的resource。這個迴圈會一直持續到所有id都註冊為止。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Zend_Loader::loadClass('Zend_Acl');&lt;br /&gt;  Zend_Loader::loadClass('Zend_Acl_Role');&lt;br /&gt;  Zend_Loader::loadClass('Zend_Acl_Resource');&lt;br /&gt;  Zend_Loader::loadClass('Zend_Db');&lt;br /&gt;  Zend_Loader::loadClass('Zend_Config');&lt;br /&gt;  Zend_Loader::loadClass('Zend_Registry');&lt;br /&gt;&lt;br /&gt;  $baseDir=Zend_Registry::get('baseDir');&lt;br /&gt;&lt;br /&gt;  $config=new Zend_Config(require($baseDir.'/application/etc/db.php'));&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * 讀取資料表欄位，將資料表內的資料讀入陣列&lt;br /&gt;   */&lt;br /&gt;  $db=Zend_Db::factory($config-&gt;public);&lt;br /&gt;  $db-&gt;query('set names utf8');&lt;br /&gt;  $sql='select id,parent_id from resource';&lt;br /&gt;  $stmt=$db-&gt;query($sql);&lt;br /&gt;  $rows=$stmt-&gt;fetchAll();&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;    &lt;br /&gt;  /**&lt;br /&gt;   * 建立resource的樹狀結構&lt;br /&gt;   */&lt;br /&gt;  $acl=new Zend_Acl();&lt;br /&gt;  do{&lt;br /&gt;   $flag=false;&lt;br /&gt;   foreach($rows as $row){&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * 建立resource樹狀結構的判斷流程程式碼&lt;br /&gt;     */&lt;br /&gt;    if(!$acl-&gt;has($row['id']) &amp;&amp; ($row['parent_id']===null || $acl-&gt;has($row['parent_id']) ) ){&lt;br /&gt;     $acl-&gt;add(new Zend_Acl_Resource($row['id']),$row['parent_id']);     &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * 判斷所有id是否已註冊為resource，如果有未註冊的id，旗標設為true，繼續執行迴圈&lt;br /&gt;     * 如果所有的id都已註冊，就會跳出迴圈&lt;br /&gt;     */&lt;br /&gt;    if(!$acl-&gt;has($row['id']))&lt;br /&gt;     $flag=true;&lt;br /&gt;    &lt;br /&gt;   }&lt;br /&gt;  }while($flag);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-4661832153811718128?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/4661832153811718128/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=4661832153811718128' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4661832153811718128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4661832153811718128'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/zendaclresource.html' title='Zend_Acl_Resource的樹狀結構'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_KKv6FrISXHE/SFdZn3qB73I/AAAAAAAAAAg/ajvTs0nzEY4/s72-c/Zend_Acl_Resource.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-1818891458698415079</id><published>2008-06-11T16:59:00.000+08:00</published><updated>2008-06-11T17:00:52.020+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>php上傳物件</title><content type='html'>參考網址&lt;br /&gt;&lt;br /&gt;http://www.devshed.com/c/a/PHP/Developing-a-Modular-Class-For-a-PHP-File-Uploader/1/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;檔案上傳物件&lt;br /&gt;&lt;br /&gt;上列網址是一個檔案上傳物件的實例，用了一些php內建的函數及物件，使用內建函數及物件，執行效率會提高(因為是用c寫的)，程式內也用了迴圈的方式把全域陣列$_FILE中的key/value都對應到物件中的屬性，這樣就不用寫一堆討人厭的$_FILE['userfile']['name']這類一長串不好輸入的字元，整個程式碼很清爽。&lt;br /&gt;&lt;br /&gt;撰寫這個物件的背景知識&lt;br /&gt;&lt;br /&gt;使用的函數及物件&lt;br /&gt;Exception物件&lt;br /&gt;in_array()函數&lt;br /&gt;move_uploaded_file()函數&lt;br /&gt;&lt;br /&gt;使用的全域陣列&lt;br /&gt;$_FILE['userfile']['name']  原始檔名&lt;br /&gt;$_FILE['userfile']['tmp_name'] 儲在server上的暫存檔名&lt;br /&gt;$_FILE['userfile']['type']  檔案的mime型態&lt;br /&gt;$_FILE['userfile']['size']  檔案大小，單位是byte&lt;br /&gt;$_FILE['userfile']['error']  上傳錯誤，錯誤代碼查php manual就知道了&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;從上列網址post上來的上傳物件的範例程式碼&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;class FileUploader{&lt;br /&gt;&lt;br /&gt;private $uploadFile;&lt;br /&gt;&lt;br /&gt;private $name;&lt;br /&gt;&lt;br /&gt;private $tmp_name;&lt;br /&gt;&lt;br /&gt;private $type;&lt;br /&gt;&lt;br /&gt;private $size;&lt;br /&gt;&lt;br /&gt;private $error;&lt;br /&gt;&lt;br /&gt;private $allowedTypes=array&lt;br /&gt;('image/jpeg','image/gif','image/png','text/plain','application/ms-word');&lt;br /&gt;&lt;br /&gt;public function __construct($uploadDir='C:uploaded_files'){&lt;br /&gt;&lt;br /&gt;if(!is_dir($uploadDir)){&lt;br /&gt;&lt;br /&gt;throw new Exception('Invalid upload directory.');&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(!count($_FILES)){&lt;br /&gt;&lt;br /&gt;throw new Exception('Invalid number of file upload parameters.');&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;foreach($_FILES['userfile'] as $key=&gt;$value){&lt;br /&gt;&lt;br /&gt;$this-&gt;{$key}=$value;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(!in_array($this-&gt;type,$this-&gt;allowedTypes)){&lt;br /&gt;&lt;br /&gt;throw new Exception('Invalid MIME type of target file.');&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$this-&gt;uploadFile=$uploadDir.basename($this-&gt;name);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// upload target file to specified location&lt;br /&gt;&lt;br /&gt;public function upload(){&lt;br /&gt;&lt;br /&gt;if(move_uploaded_file($this-&gt;tmp_name,$this-&gt;uploadFile)){&lt;br /&gt;&lt;br /&gt;return true;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// throw exception according to error number&lt;br /&gt;&lt;br /&gt;switch($this-&gt;error){&lt;br /&gt;&lt;br /&gt;case 1:&lt;br /&gt;&lt;br /&gt;throw new Exception('Target file exceeds maximum allowed size.');&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 2:&lt;br /&gt;&lt;br /&gt;throw new Exception('Target file exceeds the MAX_FILE_SIZE value specified on the upload form.');&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 3:&lt;br /&gt;&lt;br /&gt;throw new Exception('Target file was not uploaded completely.');&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 4:&lt;br /&gt;&lt;br /&gt;throw new Exception('No target file was uploaded.');&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 6:&lt;br /&gt;&lt;br /&gt;throw new Exception('Missing a temporary folder.');&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 7:&lt;br /&gt;&lt;br /&gt;throw new Exception('Failed to write target file to disk.');&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 8:&lt;br /&gt;&lt;br /&gt;throw new Exception('File upload stopped by extension.');&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;物件使用範例&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;try{&lt;br /&gt;&lt;br /&gt;if($_POST['send']){&lt;br /&gt;&lt;br /&gt;require_once 'fileuploader.php';&lt;br /&gt;&lt;br /&gt;$fileUploader=new FileUploader();&lt;br /&gt;&lt;br /&gt;if($fileUploader-&gt;upload()){&lt;br /&gt;&lt;br /&gt;echo 'Target file uploaded successfully!';&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;catch(Exception $e){&lt;br /&gt;&lt;br /&gt;echo $e-&gt;getMessage();&lt;br /&gt;&lt;br /&gt;exit();&lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;?&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-1818891458698415079?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/1818891458698415079/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=1818891458698415079' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1818891458698415079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1818891458698415079'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/php.html' title='php上傳物件'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-2549536529704782419</id><published>2008-06-10T23:21:00.002+08:00</published><updated>2008-06-10T23:36:20.499+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='evolution'/><title type='text'>郵件過量</title><content type='html'>用evolution收信,一段時間後信箱容量超過2G,就不能再收信,覺得很悶,找了一下郵件的放置位置,發現evolution中同一個資料夾的郵件都放在同一個檔案裡頭,難怪資料夾的容量到了一定上限就不能再存了.&lt;br /&gt;&lt;br /&gt;上網找了一下資料,解決方式不難,只要再建一個資料夾,建立新的郵件規則,將收到的信都存到這個資料夾中,就解決了.&lt;br /&gt;&lt;br /&gt;測試了一下,果然可以繼續收信,只不過不知道有沒有漏掉重要的信件.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-2549536529704782419?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/2549536529704782419/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=2549536529704782419' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2549536529704782419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2549536529704782419'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/blog-post_10.html' title='郵件過量'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-449437812971538648</id><published>2008-06-10T14:41:00.003+08:00</published><updated>2008-06-10T14:47:52.722+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>workbench的使用</title><content type='html'>&lt;a href="http://bp2.blogger.com/_KKv6FrISXHE/SE4isYz5sgI/AAAAAAAAAAU/62J2NKmft7Q/s1600-h/a.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_KKv6FrISXHE/SE4isYz5sgI/AAAAAAAAAAU/62J2NKmft7Q/s400/a.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5210139964883972610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;http://dev.mysql.com/downloads/workbench/5.0.html&lt;br /&gt;&lt;br /&gt;MySQL  Workbench可以很方便的畫出EER(enhance entity relationship)圖，圖形介面的操作方式非常容易上手，可以很快的畫出資料表跟資料表之間的關係，要修改資料表或資料庫的設定也非常容易，用滑鼠點一點、按一按，就修改好了，這種針對資料庫的專用工具，比起自己用freemind或dia畫EER圖，更有效率，由於Workbench將資料庫層面的物件關係加在設計裡頭，也更容易看出資料表之間的關連，不用自己發揮想像力，克難地使用不適當地工具，進行資料庫的設計。&lt;br /&gt;&lt;br /&gt;用workbench畫好EER圖後，這張EER圖可以依使用者的需求輸出成pdf、圖檔或是sql命令，最方便地部份就是輸出成sql命令了，將資料庫設計好後，直接將sql命令匯到mysql server後，整個資料庫就在server上全部建立完成了。只不過根據我自己的測試，workbench有一項小缺點，他不會檢查foreign key的型態與referenced key的型態是否一致，這二個如果不一致是沒辦法在mysql裡頭建立資料表的，但workbench不會檢查這項錯誤，如果將這類的sql命令匯入mysql中，資料表會無法建立，致於還有沒有其他的缺點，就不清楚了。&lt;br /&gt;&lt;br /&gt;workbench目前只有window版，沒有linux版，有點不方便，我家裡的電腦已經換成ubuntu了，如果沒有linux版，在家裡就沒辦法用了，不過網站上的roadmap，指出今年會推出linux版，看來需要耐心等待linux版的推出，不然就要再想想別的辦法了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-449437812971538648?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/449437812971538648/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=449437812971538648' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/449437812971538648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/449437812971538648'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/workbench.html' title='workbench的使用'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_KKv6FrISXHE/SE4isYz5sgI/AAAAAAAAAAU/62J2NKmft7Q/s72-c/a.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-1920400764728040057</id><published>2008-06-06T16:23:00.001+08:00</published><updated>2008-06-06T16:25:44.900+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><title type='text'>Zend Controller設計概念</title><content type='html'>Zend Controller是Zend Framework的核心元件，Zend Controller 實做了MVC及Front Controller的設計模式，使用MVC可以將網站程式的商業邏輯及呈現外貌的程式碼分離，Front Controller會將使用者的送出的要求全部導向單人入口。&lt;br /&gt;&lt;br /&gt;為了顧及程式的延展性，Zend Controller可以讓程式設計師subclass，或是使用interface及abstract的方式擴增程式的功能，或是撰寫plugin及action helper達到相同的功能。&lt;br /&gt;&lt;br /&gt;Zend Controller的設計提供一個撰寫程式的架構，基本上，遵循這些設計模式，幾乎大部份的程式功能都可以有條不紊的實做出來，Zend Controller的架構比自己建立的架構，具有更高的流通性，由於Zend網站上就有現成的文件及程式碼解說，與別人進行交流時不用再重頭適應彼此的撰寫模式及架構，也可避免大家都浪費心力做同一件事情--建立基礎架構，而且Zend Controller的架構都是高手建構出來的，模仿他們的設計，可以吸取高手的菁華，快速提升程式碼的品質。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-1920400764728040057?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/1920400764728040057/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=1920400764728040057' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1920400764728040057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1920400764728040057'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/zend-controller.html' title='Zend Controller設計概念'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-2037197414614894445</id><published>2008-06-05T10:34:00.001+08:00</published><updated>2008-06-05T10:48:14.063+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>css概念</title><content type='html'>&lt;a href="http://bp1.blogger.com/_KKv6FrISXHE/SEdT1izqFCI/AAAAAAAAAAM/sO4nuryqAkQ/s1600-h/css_attribute.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_KKv6FrISXHE/SEdT1izqFCI/AAAAAAAAAAM/sO4nuryqAkQ/s400/css_attribute.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5208223673418912802" /&gt;&lt;/a&gt;&lt;br /&gt;參考網址&lt;br /&gt;&lt;br /&gt;http://www.hsiu28.net/style/&lt;br /&gt;&lt;br /&gt;http://css.1keydata.com/tw/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;如果以我的思考方式解釋css(cascading style sheet)，css是一種表現網頁物件的方式，在css中，每個物件都是一個box，這個box中可以出現文字、圖片，也能設定這個box的邊框大小、背景的樣式，box中出現的文字、圖片也可以再進行設定，在網頁中出現的大大小小的box，組成了整個網頁的外貌。&lt;br /&gt;&lt;br /&gt;組成網頁的box，可以在box中再裝進其他的box，或是進行box位置的排列，這會產生許多不同的變化，讓網頁產生不同的面貌，使用這種方式設計網頁，會使整個網頁的程式碼減少，因為是以box為單位，進行設定，而不是對所有的單一元素進行設定，而且不同的box，可以使用套用相同的設定，這樣不但使程式碼減少，而且網頁內容—html碼，及網頁呈現方式—css碼，可以完全分離，如果要改變網頁的外貌，只要更改css碼，所有的網頁外觀就會立刻更換，而不用繁鎖的一一更改所有網頁元素的設定。&lt;br /&gt;&lt;br /&gt;花了點時間，用freemind把css的模式畫出來，也標記了常用的屬性，這樣要用到時就比較方便了，不用再上網查css屬性要怎麼用，也比較不容易在box model的迷宮中走失。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-2037197414614894445?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/2037197414614894445/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=2037197414614894445' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2037197414614894445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/2037197414614894445'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/css.html' title='css概念'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_KKv6FrISXHE/SEdT1izqFCI/AAAAAAAAAAM/sO4nuryqAkQ/s72-c/css_attribute.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-4132809664852826238</id><published>2008-06-05T00:39:00.001+08:00</published><updated>2008-06-05T00:42:10.454+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='心得'/><title type='text'>善用工具,不求甚解</title><content type='html'>以前從國小升上國中時,翻看數學,物理,化學,這些科目的教科書,感覺有如天書,經過一段時間後,與書本那種遙遠的距離感消失了,但那神秘感也消失殆盡,只感覺這些只是用另一種不常見的符號,解釋周遭現象的另一種方式.但心裡總覺得這些背後應該還有更神秘的原理支配著,這種感覺常讓我懷疑,學習這些東西,並沒有真的碰到核心.&lt;br /&gt;&lt;br /&gt;剛接觸php程式語言時,也是一頭霧水,等到了解基本語法時,就會感覺好像只是運用一些語句,組合出各種狀況下要電腦做的事情,似乎又是另外一種換句話說的方式,底層的運作到底是怎麼樣的一個狀況,這個問題一直縈繞心頭.&lt;br /&gt;&lt;br /&gt;接觸的電腦知識稍微廣些後,知道要通透了解整個的運作是不可能的,跟php相關的電腦議題含括apach,mysql,linux,c語言,設計模式等,要再搞懂底下的這些就要再花很大的功夫,如果再延伸下去,那是沒完沒了的.&lt;br /&gt;&lt;br /&gt;很多底層的東西,只要大概了解就好,不須全盤鑽研,就像建築師,只要能善用建築材料,組合出客戶想要的建築物就可以了,甚於房子怎麼搭,鋼筋怎麼綁,那是另一種專業,不需太過清楚,如果一個建築師花大量的心力在研究怎麼砌磚頭,那他大概不會是一位出色的建築師,也許磚頭砌得很好,但建物的造型設計,人性化等方面大概很難兼顧.&lt;br /&gt;&lt;br /&gt;接觸php必須以宏觀角度審視整個程式運作流程,致於函數的底層運作機制,不須全盤了解,就像建築師一樣,只要會善用最適當的材料,工法,就能組合出最佳設計,php也一樣,善用工具,才能以宏觀角度使整 個程式運作更符合需求,否則會陷入不斷追求最佳工具的迴圈中,跳脫不出來.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-4132809664852826238?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/4132809664852826238/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=4132809664852826238' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4132809664852826238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/4132809664852826238'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/06/blog-post.html' title='善用工具,不求甚解'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-1993645545614199360</id><published>2008-05-28T17:18:00.000+08:00</published><updated>2008-05-28T17:21:03.887+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>prepared statement</title><content type='html'>引用網址：&lt;br /&gt;&lt;a href="http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html"&gt;http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;color:#ff0000;"&gt;&lt;strong&gt;prepared statement&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;color:#ff0000;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;prepared statement是什麼？&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Prepared statement 可以讓你在第一次執行時sql時，先設定sql敘述，讓以後相同的sql，只要帶入不同的參數，就重複執行相同的sql，而不用每次執行相同的sql時都讓伺服器耗費時間設定sql敘述。&lt;br /&gt;&lt;br /&gt;例子：底下是一個prepared statement的實際範例。&lt;br /&gt;&lt;br /&gt;select * from news where id=?&lt;br /&gt;&lt;br /&gt;符號? 叫做placeholder&lt;br /&gt;&lt;br /&gt;執行sql時，必須代入參數，取代 ? 號，才能真正執行sql敘述。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;為什麼要使用prepared statement&lt;br /&gt;&lt;/span&gt;程式中使用prepared statement 可以增進安全性及效能。&lt;br /&gt;&lt;br /&gt;Prepared statement 把sql的邏輯語句及代入的資料分離，可以增加安全性，這樣的做法，可以避免sql隱碼的攻擊，如果使用一般的sql敘述，沒有分離sql邏輯及代入資料，你必須非常小心處理使用者輸入的資料，通常會使用一些特定的函數，跳脫單引號、雙引號、倒斜線等特殊字元。但是當使用prepared statement時，根本不用使用特殊的函數來避免sql隱碼的攻擊，你可以直接使用prepared statement，不會造成任何sql隱碼的漏洞。&lt;br /&gt;&lt;br /&gt;效能的提升來自prepared statement的一些特殊之處，首先，prepared statement中的sql敘述只要解析一次，之後執行的sql敘述就不用再做這些解析的動作，如果你要執行同一個sql敘述很多次，就可以增加執行的速度。&lt;br /&gt;&lt;br /&gt;效能提升的第二個原因，是prepared statement使用了binary protocol，傳統的mysql會將資料轉換成字串，再進行傳送，但使用binary protocol後，不會進行資料的轉換，而是直接將資料以原來的binary的型式進行傳送，減低了cpu的負荷，也減少了網路的使用率(轉換成字串，資料量會變大)。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;使用prepared statement 的時機&lt;br /&gt;&lt;/span&gt;prepared statement只能用在DML(insert,update,delete,replace),create table,select敘述上，額外的支援會再慢慢加上去。&lt;br /&gt;&lt;br /&gt;Prepared statement因為要解析兩次，會比一般的sql敘述慢，如果sql敘述只會執行一次，你就要考量，是否值得使用prepared statement增強安全性，而犧牲了整體的執行速度。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;如何使用prepared statement&lt;br /&gt;&lt;/span&gt;php 5的mysqli extention支援prepared statement，其他的語言我不熟。&lt;br /&gt;&lt;br /&gt;Mysql也有使用prepared statement的interface，不過這些interface不支援binary protocol，除非程式語言的api不支援，不然，mysql的prepared statement interface通常當做測試用。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#33ccff;"&gt;Mysql的prepared statement的interface的用法&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;create table people(name,sex);&lt;br /&gt;&lt;br /&gt;insert into people(name,sex) values('Hi','f'),('a','b');&lt;br /&gt;&lt;br /&gt;set @query='select * from people where name=? And sex=?';&lt;br /&gt;&lt;br /&gt;set @name='Hi';&lt;br /&gt;&lt;br /&gt;set @sex='f';&lt;br /&gt;&lt;br /&gt;prepare stmt from @query;&lt;br /&gt;&lt;br /&gt;execute stmt using @name,@sex;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-1993645545614199360?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/1993645545614199360/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=1993645545614199360' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1993645545614199360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/1993645545614199360'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/05/prepared-statement.html' title='prepared statement'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8393763371862766007.post-8542340095258765463</id><published>2008-05-27T16:37:00.000+08:00</published><updated>2008-05-27T16:48:21.129+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>trigger</title><content type='html'>&lt;span style="color:#ff0000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/triggers.html#nolinkhere"&gt;引用網址&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/triggers.html#nolinkhere"&gt;http://dev.mysql.com/doc/refman/5.0/en/triggers.html#nolinkhere&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;color:#ff0000;"&gt;trigger&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;概論：&lt;/span&gt;&lt;br /&gt;trigger是資料庫中的一種物件，trigger物件的運作與資料表息息相關，當對資料表執行insert、update或delete的動作時才會觸發指定的trigger物件，執行trigger內的sql敘述，底下以實例說明會比較清楚：&lt;br /&gt;&lt;br /&gt;#建立一個資料表，名稱是employ&lt;br /&gt;&lt;br /&gt;create table employ(hour int,net_pay int);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#建立一個與employ資料表相關的trigger，名稱是tri_cal&lt;br /&gt;#這個trigger的作用是當插入資料到資料表employ中時，變數sum的值會與資料表employ&lt;br /&gt;#中的新揷入的欄位net_pay的值相加。&lt;br /&gt;&lt;br /&gt;create trigger tri_cal&lt;br /&gt;before insert&lt;br /&gt;on employ&lt;br /&gt;for each row&lt;br /&gt;set @sum=@sum+new.net_pay;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#變數sum的值會變成2&lt;br /&gt;&lt;br /&gt;set @sum=0;&lt;br /&gt;insert imploy(hour,net_pay) values(1,2);&lt;br /&gt;select @sum;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#變數sum的值會變成4&lt;br /&gt;&lt;br /&gt;insert imploy(hour,net_pay) values(1,2);&lt;br /&gt;select @sum;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;語法說明：&lt;br /&gt;&lt;/span&gt;create &lt;span style="color:#ff0000;"&gt;[definer={usercurrent_user}]&lt;/span&gt; trigger &lt;span style="color:#ff0000;"&gt;trigger_name&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;trigger_time&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;trigger_event&lt;/span&gt;&lt;br /&gt;on &lt;span style="color:#ff0000;"&gt;table_name&lt;/span&gt;&lt;br /&gt;for each row&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;trigger_stmt&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;trigger_time&lt;/span&gt;&lt;br /&gt;before&lt;br /&gt;after&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6666cc;"&gt;&lt;span style="color:#3366ff;"&gt;trigger_event&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;insert&lt;br /&gt;update&lt;br /&gt;delete&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;table_name&lt;br /&gt;&lt;/span&gt;指定觸發trigger的table&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;trigger_stmt&lt;br /&gt;&lt;/span&gt;觸發後執行的sql敘述&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8393763371862766007-8542340095258765463?l=totou-phpmysql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://totou-phpmysql.blogspot.com/feeds/8542340095258765463/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8393763371862766007&amp;postID=8542340095258765463' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8542340095258765463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8393763371862766007/posts/default/8542340095258765463'/><link rel='alternate' type='text/html' href='http://totou-phpmysql.blogspot.com/2008/05/trigger.html' title='trigger'/><author><name>totou</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
