<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0"><channel><title>Jax 的工作紀錄</title><link>http://jax-work-archive.blogspot.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/jaxworkarchive" /><description>除了在整理學習上的經驗，同時也能幫助其他需要的人</description><language>en</language><managingEditor>noreply@blogger.com (胡忠晞 Jax)</managingEditor><lastBuildDate>Tue, 24 Jan 2012 04:27:32 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">304</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="jaxworkarchive" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:subtitle>除了在整理學習上的經驗，同時也能幫助其他需要的人</itunes:subtitle><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">jaxworkarchive</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/jaxworkarchive" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://my.feedlounge.com/external/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://static.feedlounge.com/buttons/subscribe_0.gif">Subscribe with FeedLounge</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.podnova.com/add.srf?url=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://www.podnova.com/img_chicklet_podnova.gif">Subscribe with Podnova</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://odeo.com/listen/subscribe?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fjaxworkarchive" src="http://odeo.com/img/badge-channel-black.gif">Subscribe with ODEO</feedburner:feedFlare><item><title>[轉載] EXCEL 巨集與VBA介紹</title><link>http://jax-work-archive.blogspot.com/2012/01/excel-vba.html</link><category>轉載</category><category>VBA</category><category>Excel</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Tue, 24 Jan 2012 04:27:32 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-7247750917639149495</guid><description>轉載自：&lt;a href="http://web.ntit.edu.tw/~yclin/excel_new/excel06.htm"&gt;EXCEL 巨集與VBA介紹&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
巨集：一連串的執行指令所構成，可以利用Visual Basic程式指令、也可以利用錄製巨集的方式來錄寫指令。&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;如何錄製巨集：&lt;/strong&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;如果要執行巨集，則需要更改「EXCEL選項」\「信任中心」\「信任中心設定」\「巨集設定」 &lt;/li&gt;
&lt;li&gt;在「檢視」、「巨集」/「錄製巨集」&lt;/li&gt;
&lt;li&gt;設定「巨集名稱」、快速鍵(Ctrl+英文鍵)，將巨集儲存位置&lt;/li&gt;
&lt;li&gt;開始錄製相關動作(錄製是以絕對位址方式來錄製，如果要以相對位址來錄製則要選「以相對位置錄製」)&lt;/li&gt;
&lt;li&gt;停止錄製&lt;/li&gt;
&lt;li&gt;查看巨集程式碼，並作必要的修正&lt;/li&gt;
&lt;li&gt;執行巨集(可以利用「執行巨集」或快速鍵、或利用表單按鈕來執行)，如果要編修表單時，可以按下Ctrl+該物件，進行修改。&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;strong&gt;範例：(錄製巨集)&lt;/strong&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;C6至C12的數值格式設定「"進貨"  #,##0;"出貨"  #,##0」&lt;/li&gt;
&lt;li&gt;「檢視」、「巨集」、「開始錄製」，並開始執行下列指令&lt;/li&gt;
&lt;li&gt;選取範圍C6至C12，並執行「複製」&lt;/li&gt;
&lt;li&gt;選取範圍B6至B12，並按下「選擇性貼上」，選擇貼上「值」與運算「加」&lt;/li&gt;
&lt;li&gt;選取範圍C6至C12，並按下「Del」，清除儲存格內容&lt;/li&gt;
&lt;li&gt;在儲存格C6按一下&lt;/li&gt;
&lt;li&gt;停止錄製巨集&lt;/li&gt;
&lt;li&gt;在工作表中，產生一個按鈕，並指定該按鈕執行該巨集，並將其按鈕文字改為異動&lt;/li&gt;
&lt;li&gt;每次輸入異動資料(正的表示進貨，負的表示出貨)，按下按鈕即可執行巨集&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;strong&gt;VBA簡介：&lt;/strong&gt;&lt;br /&gt;
Visual Basic for Applications，利用VB來延申Office的能力。開啟EXCEL 顯示開發人員(在「EXCEL選項」/「常用」中勾選)，再撰寫或修改VBA程式。&lt;br /&gt;
&lt;br /&gt;
VBA主要的組成要件：物件，其中包括&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;屬性：對物件狀態的描述，可以定義物件的特性(大小、顏色、狀態等)。&lt;/li&gt;
&lt;li&gt;方法：物件的某些特定動作，可以指定動作的細別內容。其主要結構如下：&lt;br /&gt;
&lt;/code&gt;物件.方法 指定引數1:=xl常數1, 指定引數2:=xl常數2,....&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
指定引數設定為某些內建常數，每個內建常數前會有前綴字連接。&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;EXCEL物件的常數會以xl開始。&lt;/li&gt;
&lt;li&gt;VB的陳述式及函數的常數會以vb開始。&lt;/li&gt;
&lt;li&gt;Office物件模式的常數會以mso開始。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;事件：物件的觸發反應。&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;strong&gt;EXCEL常用的物件&lt;/strong&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;code&gt;Workbook&lt;/code&gt; 活頁簿&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Workbooks&lt;/code&gt; 活頁簿集合&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Workbooks("filename")&lt;/code&gt; 檔名為filename的活頁簿&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ActiveWorkbook&lt;/code&gt; 正在作用中的活頁簿&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sheets&lt;/code&gt; 活頁簿中所有工作表&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sheets(n)&lt;/code&gt; 活頁簿中第n張工作表&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Worksheet&lt;/code&gt; 工作表&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Worksheets&lt;/code&gt; 所有工作表(包括圖表)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Worksheets("sheet")&lt;/code&gt; 指表名為sheet工作表&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ActiveSheet&lt;/code&gt; 正在作用中的工作表&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Columns("c1:c2")&lt;/code&gt; c1至c2欄(其中c1,c2為A~Z或AA~XFD等欄名)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Rows("r1:r2")&lt;/code&gt; r1至r2列(其中r1,r2為1~1048576等列名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range("x1:x2")&lt;/code&gt; x1至x2間的儲存格(其中x1,x2為儲存格位址名稱)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cells(i,j)&lt;/code&gt; 儲存格(第i列、第j行)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ActiveCell&lt;/code&gt; 目前的儲存格&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Selection&lt;/code&gt; 目前所選取的物件&lt;/li&gt;
&lt;/ol&gt;範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.Bold = True
Worksheets("Sheet1").Cells.ClearContents
Worksheets("Sheet1").Rows(1).Font.Bold = True
Range("1:1,3:3,8:8")
Worksheets("Sheet1").Cells(6, 1).Value = 10
Worksheets("Sheet1").[A1:B5].ClearContents
ActiveCell.Offset(1, 3).Font.Underline = xlDouble 
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;strong&gt;活頁簿常用屬性：&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;ActiveWorkBook.Name&lt;/code&gt; 目前活頁簿的名稱&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ActiveWorkBook.Save&lt;/code&gt; 儲存目前的活頁簿&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ActiveWorkBook.SaveAs Filename := "filename"&lt;/code&gt; 另儲新檔&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WorkBooks.Add&lt;/code&gt; 新增活頁簿&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WorkBooks(i).Close [SaveChange, Filename, RouteWorkbook]&lt;/code&gt; 關閉指定的第i個活頁簿 &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;SaveChange&lt;/code&gt; := True 改變儲存&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SaveChange&lt;/code&gt; := False 不會改變儲存&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SaveChange&lt;/code&gt; 省略時，會出現對話方塊&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filename&lt;/code&gt; := "檔名"&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WorkBooks.Open "filename"&lt;/code&gt; 開啟一個活頁簿&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Application.Windows&lt;/code&gt; 所有活頁簿視窗&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WorkBooks.Count&lt;/code&gt; 活頁簿的數量&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WorkBooks.Item(Index)&lt;/code&gt; 傳回單一活頁簿，由索引值指定&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;strong&gt;工作表常用屬性：&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Worksheets.Add [Before, After, Count, Type]&lt;/code&gt; 新增工作表&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Before&lt;/code&gt; := Worksheets(n) 出現於某工作表之前&lt;/li&gt;
&lt;li&gt;&lt;code&gt;After&lt;/code&gt; := Worksheets(n) 出現於某工作表之後&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Count&lt;/code&gt; := n 新增工作表數量&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type&lt;/code&gt; := xlWorksheet (工作表) 或 xlChart (圖表)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WorkSheets.Name&lt;/code&gt; 工作表名稱&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WorkSheets("Sheet1").Activate&lt;/code&gt; 設定工作表為目前作用的功作表&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;strong&gt;儲存格常用屬性：&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Rows.RowHeight&lt;/code&gt; 指定範圍內的所有列高&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Columns.ColumnsWidth&lt;/code&gt;：指定範圍內的所欄寬&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.NumberFormatLocal&lt;/code&gt; 以本地的數字格式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range.CurrentRegion&lt;/code&gt; 目前區域是指以任意空白列及空白欄的組合為邊界的範圍&lt;br /&gt;
範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Worksheets("Sheet1").Activate
ActiveCell.CurrentRegion.Select
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)&lt;/code&gt; 以參照的方式&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;RowAbsolute&lt;/code&gt; 為True，則用列的絕對位址&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ColumnAbsolute&lt;/code&gt; 為True，則用欄的絕對位址&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReferenceStyle&lt;/code&gt; 預設值為xlA1，如為xlR1C1則為R1C1的表達方式&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.count&lt;/code&gt; 傳回範圍的數量(可以是欄數、列數或儲存格數量)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.Item(RowIndex, ColumnIndex)&lt;/code&gt; 代表相對於指定之範圍某個位移距離的範圍。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.value&lt;/code&gt; 傳回或設定物件的值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.Formula&lt;/code&gt; 傳回或設定物件的公式，代表 A1 樣式註解以及巨集語言中的物件公式。&lt;br /&gt;
範例：&lt;code&gt;Worksheets("Sheet1").Range("A1").Formula = "=$A$4+$A$10"&lt;/code&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.FormulaR1C1&lt;/code&gt; 傳回或設定物件的公式，並以巨集語言中的 R1C1 樣式標記法表示&lt;br /&gt;
範例：&lt;code&gt;Worksheets("Sheet1").Range("B1").FormulaR1C1 = "=SQRT(R1C1)"&lt;/code&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.Text&lt;/code&gt; 傳回或設定物件的文字&lt;br /&gt;
範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Set c = Worksheets("Sheet1").Range("B14")
c.Value = 1198.3
c.NumberFormat = "$#,##0_);($#,##0)"
MsgBox c.Value
MsgBox c.Text
&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;strong&gt; 常用方法：&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Range.Select&lt;/code&gt;方法/&lt;code&gt;Selection&lt;/code&gt;屬性 設定目前選取的範圍/使用目前所選取的範圍&lt;br /&gt;
範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Sub Macro1()
    Sheets("Sheet1").Select
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Name"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Address"
    Range("A1:B1").Select
    Selection.Font.Bold = True
End Sub
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.Copy&lt;/code&gt; 將目前所選取的物件復製至剪貼簿&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.Cut&lt;/code&gt; 將目前所選取的物件剪下&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.Delete&lt;/code&gt; 將目前所選取的物件刪除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.Paste&lt;/code&gt; 將剪貼簿的內容貼上&lt;br /&gt;
範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Sub CopyRow()
    Worksheets("Sheet1").Rows(1).Copy
    Worksheets("Sheet2").Select
    Worksheets("Sheet2").Rows(1).Select
    Worksheets("Sheet2").Paste
End Sub
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.RasteSpecial(Paste,Operation, SkipBlanks, Transpose)&lt;/code&gt;&lt;br /&gt;
範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;With Worksheets("Sheet1")
    .Range("C1:C5").Copy
    .Range("D1:D5").PasteSpecial _
        Operation:=xlPasteSpecialOperationAdd
End With
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range.Activate&lt;/code&gt; 目前的儲存格&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range.Clear&lt;/code&gt; 清除資料&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range.ClearContents&lt;/code&gt; 清除資料內容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range.ClearFormats&lt;/code&gt; 清除資料格式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range.ClearComments&lt;/code&gt; 清除註解&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expression.AutoFit&lt;/code&gt; 自動調整列高和欄寬&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range.FillDown、Range.FillUp、Range.FillLeft、Range.FillRight&lt;/code&gt; 填滿&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range.Offset(RowOffset, ColumnOffset)&lt;/code&gt; 指定區域的位移列與行&lt;br /&gt;
範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Sub MoveActive()
    Worksheets("Sheet1").Activate
    Range("A1:D10").Select
    ActiveCell.Value = "Monthly Totals"
    ActiveCell.Offset(0, 1).Activate
End Sub
&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;strong&gt;程式語法：&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;br /&gt;
&lt;dl&gt;&lt;dt&gt;Dim 陳述式(變數)&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Dim varname [ As [New] type]
type 包括 Byte、Boolean、Integer、Long、Single、Double、Date、String、Object等&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Set 陳述式(物件)&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Set objectvar = {[New] objectexpression | Nothing}
例：Set RangeA = Range("A1:B2")&lt;/pre&gt;範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Sub Random()
    Dim myRange As Range
    Set myRange = Worksheets("Sheet1").Range("A1:D5")
    myRange.Formula = "=RAND()"
    myRange.Font.Bold = True
End Sub
&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;With 多種屬性設定&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;With 物件
    .屬性1 = 設定值
    .屬性2 = 設定值
    ....
End With&lt;/pre&gt;範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Sub AddNew()
Set NewBook = Workbooks.Add
    With NewBook
        .Title = "All Sales"
        .Subject = "Sales"
        .SaveAs Filename:="Allsales.xls"
    End With
End Sub
&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Array 陣列&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Array(Range1, Range2, ....)&lt;/pre&gt;範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Sub Several()
    Worksheets(Array("Sheet1", "Sheet2", "Sheet4")).Select
End Sub
&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;InputBox 函數&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;InputBox("文字說明",[,title][,default][,xpos][,ypos][,helpfile, context])&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;MsgBox 函數&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;MsgBox "文字說明"&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Union 將多個範圍合併成單一Range物件&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Union(Range1, Range2, ...)&lt;/pre&gt;範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Sub MultipleRange()
    Dim r1, r2, myMultipleRange As Range
    Set r1 = Sheets("Sheet1").Range("A1:B2")
    Set r2 = Sheets("Sheet1").Range("C3:D4")
    Set myMultipleRange = Union(r1, r2)
    myMultipleRange.Font.Bold = True
End Sub
&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;For... Next 陳述式&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;For counter = start to end [ step stepvalue]
    [statements]
    [Exit For]
    [statements]
Next [counter]&lt;/pre&gt;範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Sub CycleThrough()
    Dim Counter As Integer
    For Counter = 1 To 20
        Worksheets("Sheet1").Cells(Counter, 3).Value = Counter
    Next Counter
End Sub
&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;For Each... Next 陳述式&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;For Each element In group 
    [statements]
    [Exit For]
    [statements]
Next [element]&lt;/pre&gt;範例：&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Sub ApplyColor()
    Const Limit As Integer = 25
    For Each c In Range("MyRange")
        If c.Value &amp;gt; Limit Then
            c.Interior.ColorIndex = 27
        End If
    Next c
End Sub
&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Do ... Loop 陳述式&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Do [{While | Until} condition]
    [statements]
    [Exit Do]
    [statements]
Loop&lt;/pre&gt;或&lt;/dd&gt;&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;Do
    [statements]
    [Exit Do]
    [statements]
Loop [{While | Until} condition]&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;If ... Then ... Else ... 陳述式&lt;/dt&gt;
&lt;dd&gt;&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;If condition Then [statements][Else elsestatements]&lt;/pre&gt;或
&lt;pre class="vb:nogutter:nocontrols" name="code"&gt;If condition Then
    [statements]
[ElseIf condition-n Then
    [elseifstatements]...
[Else
    [elsestatements]]
End If&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;strong&gt;範例：(VBA程式範例)&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="vb" name="code"&gt;Sub pmt_title()
    Dim rate As Single
    Dim nper, i As Integer
    Dim pv, totali, totalp As Double
    Dim start As Date
    Dim color1 As Variant

    start = Range("C2").Value
    pv = Range("C3").Value
    rate = Range("C4").Value
    nper = Range("C6").Value

    '清除所有有明細表
    Range("A11:E65536").Clear

    With Cells(11, 1)
        .Value = 0
        .HorizontalAlignment = xlCenter
        .Interior.Color = RGB(255, 255, 255)
    End With

    With Cells(11, 2)
        .Value = start
        .HorizontalAlignment = xlCenter
        .NumberFormat = "ge年mm月dd日"
    End With

    Cells(11, 5) = pv
    pv1 = pv

    For i = 1 To nper
        If i Mod 2 = 1 Then
            color1 = RGB(255, 255, 150)
        Else
            color1 = RGB(255, 255, 255)
        End If

        With Cells(11 + i, 1)
            .Value = i
            .HorizontalAlignment = xlCenter
            .Interior.Color = color1
        End With

        With Cells(11 + i, 2)
            .Value = DateAdd("m", i, start)
             .HorizontalAlignment = xlCenter
             .Interior.Color = color1
            .NumberFormatLocal = "ge年mm月dd日"
        End With

        With Cells(11 + i, 3)
            .Value = -IPmt(rate / 12, i, nper, pv)
            .Interior.Color = color1
            .NumberFormat = "_-$* #,##0.00_-"
        End With
        totali = totali + Cells(11 + i, 3)

        With Cells(11 + i, 4)
            .Value = -PPmt(rate / 12, i, nper, pv)
            .Interior.Color = color1
            .NumberFormat = "_-$* #,##0.00_-"
        End With
        totalp = totalp + Cells(11 + i, 4)

        With Cells(11 + i, 5)
            .Value = pv - totalp
            .Interior.Color = color1
            .NumberFormat = "_-$* #,##0.00_-"
        End With
    Next i


    With Range(Cells(10, 1), Cells(11 + nper, 5)).Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(0, 0, 0)
    End With
    Cells(12 + nper, 1) = "合計"

    With Range(Cells(12 + nper, 1), Cells(12 + nper, 2))
        .MergeCells = True
        .HorizontalAlignment = xlCenter
        .Interior.Color = RGB(255, 200, 255)
    End With

    With Cells(12 + nper, 3)
        .Value = totali
        .Interior.Color = RGB(255, 200, 255)
        .NumberFormat = "_-$* #,##0.00_-"
    End With

    With Cells(12 + nper, 4)
        .Value = totalp
        .Interior.Color = RGB(255, 200, 255)
        .NumberFormat = "_-$* #,##0.00_-"
    End With

    With Range(Cells(12 + nper, 1), Cells(12 + nper, 4)).Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(0, 0, 0)
    End With

End Sub

'===================================================================
Sub clearall()
    Range("A11:E65536").Clear
End Sub
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-7247750917639149495?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sfhVwtUpaBIWJowBDvYK4MSGZI4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sfhVwtUpaBIWJowBDvYK4MSGZI4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sfhVwtUpaBIWJowBDvYK4MSGZI4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sfhVwtUpaBIWJowBDvYK4MSGZI4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-24T20:27:32.638+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[轉載] Aptana Scripting 一個背景處理的範例</title><link>http://jax-work-archive.blogspot.com/2011/12/aptana-scripting_21.html</link><category>JavaScript</category><category>Eclipse Monkey</category><category>轉載</category><category>Eclipse</category><category>Aptana</category><category>Aptana Scripting</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 21 Dec 2011 03:03:13 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-7088843019075573673</guid><description>轉載自：&lt;a href="http://blogs.infosupport.com/monkeying-with-eclipse/"&gt;Monkeying with Eclipse | Info Support&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="js" name="code"&gt;/*
 * Menu: Info Support &amp;gt; Find commented code
 * Kudos: Peter Hendriks
 * License: EPL 1.0
 * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
 */
function main() {
    loadBundle("org.eclipse.core.jobs");

    var ProgressMonitorDialog = Packages.org.eclipse.jface.dialogs.ProgressMonitorDialog;
    var IRunnableWithProgress = Packages.org.eclipse.jface.operation.IRunnableWithProgress;

    var runnableWithProgress = new IRunnableWithProgress({ run: runCommentSearch });
    new ProgressMonitorDialog(window.getShell()).run(true, true, runnableWithProgress);

    window.getActivePage().showView("org.eclipse.ui.views.TaskList");
}

function runCommentSearch(monitor) {
    var files = resources.filesMatching(".*\\.java");
    monitor.beginTask("Searching for commented code...", files.length);
    try {
        var match;
        for each( file in files ) {
            monitor.subTask(file.getEclipseObject().getName());
            file.removeMyTasks();
            var previousLineCodeComment = false;
            for each( line in file.lines ) {
                if (monitor.isCanceled()) {
                    return;
                }
                if (match = line.string.match(/^.*\/\/.*[;{}]\s*$/)) {
                    if (!previousLineCodeComment) {
                        line.addMyTask("Commented code: " + match[0]);
                    }
                    previousLineCodeComment = true;
                } else {
                    previousLineCodeComment = false;
                }
            }
            monitor.worked(1);
        }
    } finally {
        monitor.done();
    }
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-7088843019075573673?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5RxObbkDT4eAxUx7raf44yaicbo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5RxObbkDT4eAxUx7raf44yaicbo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5RxObbkDT4eAxUx7raf44yaicbo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5RxObbkDT4eAxUx7raf44yaicbo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T19:03:13.152+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Aptana Scripting - Find TODOs 範例中的參數</title><link>http://jax-work-archive.blogspot.com/2011/12/aptana-scripting-find-todos-sample.html</link><category>JavaScript</category><category>工作備忘</category><category>Eclipse Monkey</category><category>Eclipse</category><category>Aptana</category><category>Aptana Scripting</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 21 Dec 2011 03:11:53 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-3092285709070491268</guid><description>&lt;pre class="js" name="code"&gt;/*
 * Menu: Editors &amp;gt; Find TODOs
 * Kudos: Ingo Muschenetz
 * License: EPL 1.0
 * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
 */

function main() {
    var files = resources.filesMatching(".*\\.js");
    var match;

    for each( file in files ) {
        file.removeMyTasks( );
        for each( line in file.lines ) {
            if (match = line.string.match(/\/\/TODO: (.*)/)) {
                line.addMyTask( match[1] );
            }
        }
    }
    window.getActivePage().showView("org.eclipse.ui.views.TaskList");
}
&lt;/pre&gt;&lt;br /&gt;
&lt;strong&gt;只列出當前文件的方法&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js:nogutter:nocontrols" name="code"&gt;var files = resources.filesMatching('.*/'+editors.activeEditor.textEditor.titleToolTip);
&lt;/pre&gt;&lt;br /&gt;
&lt;strong&gt;resources 部分的方法&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js:nogutter:nocontrols" name="code"&gt;filesMatching(".*\\.js")
filesMatchingForProject("Project Name",".*\\.js")
filesMatchingIgnoreCase(".*\\.js")
filesMatchingForProjectIgnoreCase("Project Name",".*\\.js")
&lt;/pre&gt;&lt;br /&gt;
&lt;strong&gt;file 部分的方法&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js:nogutter:nocontrols" name="code"&gt;size
lines
removeMyTasks()
&lt;/pre&gt;&lt;br /&gt;
&lt;strong&gt;line 部分的方法&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js:nogutter:nocontrols" name="code"&gt;lineNumber
string
addMyTask('Task String')
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-3092285709070491268?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CqH_-pxVsnfda58Hu5EMPRz25KE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CqH_-pxVsnfda58Hu5EMPRz25KE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CqH_-pxVsnfda58Hu5EMPRz25KE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CqH_-pxVsnfda58Hu5EMPRz25KE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T19:11:53.662+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Aptana Scripting 學習筆記</title><link>http://jax-work-archive.blogspot.com/2011/12/aptana-scripting.html</link><category>JavaScript</category><category>工作備忘</category><category>Eclipse Monkey</category><category>Eclipse</category><category>Aptana</category><category>Aptana Scripting</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 21 Dec 2011 02:46:29 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-1088132749326933709</guid><description>&lt;ul&gt;&lt;li&gt;在任何一個專案的頂層目錄，建立一個名稱為 scripts 或 monkey 的目錄&lt;/li&gt;
&lt;li&gt;在此目錄下建立副檔名為  *.js 或 *.em 的 JavaScript 的文件 &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;strong&gt;一個空白文件的內容如下：&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;/*
 * Menu: Samples &amp;gt; Execute Snippet
 * Key: M1+M2+M3+F
 * Kudos: Jax Hu
 * License: EPL 1.0
 * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
 */

function main(){
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;快捷鍵的代號對應：&lt;/strong&gt;&lt;br /&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;M1&lt;/td&gt;&lt;td&gt;Control/Command&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;M2&lt;/td&gt;&lt;td&gt;Shift&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;M3&lt;/td&gt;&lt;td&gt;Alt/Option&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;一個可以用來顯示物件成員的函數：&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;/**顯示物件的成員
 * @param {Object} val 物件
 */
function var_dump(val){
    var name, value, temp=[];

    for (name in val) {
        try {
            value = (val[name]+'').
                replace("function",'&amp;lt;b style="color:#00f;"&amp;gt;$&amp;&amp;lt;/b&amp;gt;');
        }catch (e) {
            value = (e+'').fontcolor('red');
        }
        temp.push('&amp;lt;b style="color:#707;"&amp;gt;'+name+'&amp;lt;/b&amp;gt; = '+value);
    }

    webView = views.getView("var_dump");
    webView.showView(true);
    webView.setTitle('var_dump');
    webView.setHTML(temp.join("&amp;lt;hr/&amp;gt;").fixed());
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;常用方法以及數值：&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;
/*當前文件的位置
 * =&amp;gt; D:/WorkSpace/my_project/test.js */
location

/*當前文件的名稱
 * =&amp;gt; test.js */
editors.activeEditor.title

/*當前的文件內容*/
editors.activeEditor.source

/*當前文件的 URI 位址*/
editors.activeEditor.uri

/*儲存當前文件*/
editors.activeEditor.save();

/*對當前文件-開啟另存新檔的對話匡*/
editors.activeEditor.textEditor.doSaveAs()

/*對當前文件的目錄路徑
 * =&amp;gt; D:/WorkSpace/my_project */
editors.activeEditor.textEditor.editorInput.file.parent.location

/*目前開啟的所有文件*/
editors.all[];

/*儲存全部編輯器，傳入 true 會開啟存檔提示*/
window.workbench.saveAllEditors(false);

/*重新開啟 Eclipse*/
window.workbench.restart();

/*關閉 Eclipse*/
window.workbench.close();

/* 開新的編輯器，可以透過這個開啟空白文件，或是已經存在的檔案，
 * 之後 editors.activeEditor 會轉到這個文件上 */
fileUtils.open('textile_to_redmine.txt');

/*取得當前的專案名稱*/
editors.activeEditor.textEditor.editorInput.file.project.name;

/*取得所有的專案*/
Packages.org.eclipse.core.resources.ResourcesPlugin.workspace.root.projects;
editors.activeEditor.textEditor.editorInput.file.workspace.root.projects
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;建立一個新的視圖，或開啟已存在的視圖:&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;webView = views.getView("my_view_name");

/*顯示視圖*/
webView.showView(true);

/*設定標題*/
webView.setTitle("My View Title");

/*設定內容的HTML*/
webView.setHTML('&amp;lt;h1&amp;gt;OK&amp;lt;/h1&amp;gt;');

/*或指定內容的網址*/
webView.url = "http://www.google.com";
webView.addEventListener("LocationChanging", function(event){
    var location = event.innerEvent.location;

    // Print out the location to the Java console
    Packages.java.lang.System.out.println("You clicked on: " + location);
});
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;替換選擇的文字區段:&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;/*選擇的起始位置*/
var starting = editors.activeEditor.selectionRange.startingOffset;

/*選擇的結束位置*/
var ending = editors.activeEditor.selectionRange.endingOffset;

/*選擇的文字內容*/
var text = editors.activeEditor.source.substring(starting, ending);

/*文字跳脫處理，或其他自訂的處理*/
text = escape(text);

/*替換選擇的文字*/
editors.activeEditor.applyEdit(starting, ending-starting, text);

/*重新選擇文字區段*/
editors.activeEditor.selectAndReveal(starting, text.length);
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;檔案存取:&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;var file = new File("myFile.txt");
file.createNewFile();
file.write("Date: ");
var text = file.readLines();
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Web 資料請求的方式:&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;var req = new WebRequest();
req.open("GET", "http://xml.weather.yahoo.com/forecastrss?p=94103");
var text = req.send();
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-1088132749326933709?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LOlwndPxvMrb_krFgcKapiHVwbA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LOlwndPxvMrb_krFgcKapiHVwbA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LOlwndPxvMrb_krFgcKapiHVwbA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LOlwndPxvMrb_krFgcKapiHVwbA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T18:46:29.211+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>[轉載] Aptana Scripting File.js Class Document</title><link>http://jax-work-archive.blogspot.com/2011/12/aptana-scripting-filejs-class-document.html</link><category>JavaScript</category><category>Eclipse Monkey</category><category>轉載</category><category>Eclipse</category><category>Aptana</category><category>Aptana Scripting</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 21 Dec 2011 03:04:05 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-8093908354524113859</guid><description>轉載自：&lt;a href="http://www.koders.com/javascript/fid71E40E01E381F207FA6EC48D4B0F2343B95ACCEE.aspx"&gt;Koders Code Search: File.js - JavaScript&lt;/a&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;/**
 * File.js
 *
 * Adding this file to your Active Libraries will give you code assist for the
 * Aptana Studio scripting engine.
 *
 * @author Kevin Lindsey
 * @version 1.0
 */

/**
 * This object represents a file or a directory in the file system
 *
 * @constructor
 * @param {String} name
 *      The relative or absolute path to a file or directory
 */
function File(name) {}

/*
 * Properties
 *

/**
 * Get the absolute path for this file or directory
 *
 * @type {String} Returns the absolute path to this file or directory
 */
File.prototype.absolutePath = "";

/**
 * Get the file's base name. This is the filename only without the extension.
 * If the file does not have an extension, then this will return the full
 * name
 *
 * @type {String} Returns this file's base name
 */
File.prototype.baseName = "";

/**
 * Determine if this file is readable
 * 
 * @type {Boolean} Returns true if this File is readable
 */
File.prototype.canRead = false;

/**
 * Determine if ths file is writable
 * 
 * @type {Boolean} Returns true if this File is writable
 */
File.prototype.canWrite = false;

/**
 * Determine if this file or directory exists in the file system
 *
 * @type {Boolean} Returns true if this File exists in the file system
 */
File.prototype.exists = false;

/**
 * Returns the file extension of this File
 *
 * @type {String} Returns the last instance of "." and the text after it.
 *      An empty string will be returned if no extension if found. The return
 *      value includes the '.'
 */
File.prototype.extension = "";

/**
 * Determines if thie File is a file in the file system
 *
 * @type {Boolean} Returns true if this File is a file in the file system
 */
File.prototype.isFile = false;

/**
 * Determines if this File is a directory in the file system
 *
 * @type {Boolean} Returns true if this File is a directory in the file
 *      system
 */
File.prototype.isDirectory = false;

/**
 * Returns a list of File objects for all files in the File. This is equivalent
 * to listing out all files in a directory
 *
 * @type {Array} Returns an array of File objects, one for each file and
 *      directory in this File
 */
File.prototype.list = [];

/**
 * Returns the file's name without path information
 *
 * @type {String} Returns the file's name
 */
File.prototype.name = "";

/**
 * Returns a new File object of this object's parent directory
 *
 * @type {File} Returns this file's parent File
 */
File.prototype.parentFile = {};

/**
 * Returns the character used to separate directories on the underlying OS
 *
 * @type {String} Returns the directory separator
 */
File.prototype.separator = "";

/*
 * Methods
 */

/**
 * Create a new file in the file system at the location specified by this
 * object
 *
 * @return {Boolean} Returns true if the file was created successfully.
 */
File.prototype.createNewFile = function() {};

/**
 * Return all lines from this File's text file
 * 
 * @return {Array} Returns an array of strings, one for each line in the file.
 */
File.prototype.readLines = function() {};


//eof
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-8093908354524113859?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TZGIrEnqXpuk2hDW4T9-Iiw6I0c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TZGIrEnqXpuk2hDW4T9-Iiw6I0c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TZGIrEnqXpuk2hDW4T9-Iiw6I0c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TZGIrEnqXpuk2hDW4T9-Iiw6I0c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T19:04:05.904+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[轉載] Aptana Scripting PrintStream.js Class Document</title><link>http://jax-work-archive.blogspot.com/2011/12/aptana-scripting-printstreamjs-class.html</link><category>JavaScript</category><category>Eclipse Monkey</category><category>轉載</category><category>Eclipse</category><category>Aptana</category><category>Aptana Scripting</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 21 Dec 2011 03:04:01 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-5712672827977730351</guid><description>轉載自：&lt;a href="http://www.koders.com/javascript/fidDDD4C3E8D59554164AF058FBA81AB64EF707587E.aspx?s=createNewFile"&gt;Koders Code Search: PrintStream.js - JavaScript&lt;/a&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;/**
 * PrintStream.js
 *
 * Adding this file to your Active Libraries will give you code assist for the
 * Aptana Studio scripting engine.
 *
 * @author Kevin Lindsey
 * @version 1.0
 */

/**
 * This object represents an underlying Java PrintStream
 *
 * @constructor
 *
 /
function PrintStream() {}

/*
 * Methods
 */

/**
 * Print the given text to the underlying stream
 *
 * @param {String} text
 *      The text to send to the stream
 */
PrintStream.prototype.print = function(text) {};

/**
 * Print the given text to the underlying stream followed by end-of-line
 *
 * @param {String} text
 *      The text to send to the stream
 */
PrintStream.prototype.println = function(text) {};


//eof
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-5712672827977730351?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ARcdrSxYMrb42KTMffyGqY7eCGs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ARcdrSxYMrb42KTMffyGqY7eCGs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ARcdrSxYMrb42KTMffyGqY7eCGs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ARcdrSxYMrb42KTMffyGqY7eCGs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T19:04:01.887+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[轉載] Aptana Scripting Editor.js Class Document</title><link>http://jax-work-archive.blogspot.com/2011/12/aptana-scripting-editorjs-class.html</link><category>JavaScript</category><category>Eclipse Monkey</category><category>轉載</category><category>Eclipse</category><category>Aptana</category><category>Aptana Scripting</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 21 Dec 2011 03:04:17 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-8829325830920527657</guid><description>轉載自：&lt;a href="http://www.koders.com/javascript/fid4BA6485B39086F41D93BE5A65764E092C104C043.aspx"&gt;Koders Code Search: Editor.js - JavaScript&lt;/a&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;/**
 * Editor.js
 *
 * Adding this file to your Active Libraries will give you code assist for the
 * Aptana Studio scripting engine.
 *
 * @author Kevin Lindsey
 * @version 1.0
 */

/**
 * Editor
 *
 * @constructor
 * @extends {EventTarget}
 */
function Editor() {}

/*
 * Properties
 */

/**
 * Get/set the position of the cursor in this editor
 * 
 * @type {Number} The current cursor offset position
 */
Editor.prototype.currentOffset = 0;

/**
 * Get the File object that this editor is editing
 *
 * @type {File} Returns a File object or undefined
 */
Editor.prototype.file = {};

/**
 * Get the language MIME type for this editor
 * 
 * @type {String} Returns this editors language type
 */
Editor.prototype.language = "";

/**
 * Get the lexemes associated with this editor
 *
 * @type {Array} Returns an array of Lexemes
 */
Editor.prototype.lexemes = [];

/**
 * Get the line delimiter for this editor
 * 
 * @type {String} Returns the editor's line terminator
 */
Editor.prototype.lineDelimiter = "";

/**
 * Get the source associated with this editor
 *
 * @type {String} Returns the source text in this editor
 */
Editor.prototype.source = "";

/**
 * Get the length of the source in this editor
 * 
 * @type {Number} Returns the number of characters in this editor's document
 */
Editor.prototype.sourceLength = 0;

/**
 * Get the number of columns in a tab
 * 
 * @type {Number} Returns the number of spaces that equal one tab
 */
Editor.prototype.tabWidth = 0;

/**
 * Get the zero-based line number of the line at the top of the editor
 * 
 * @type {Number} The top-most line's index
 */
Editor.prototype.topIndex = 0;

/**
 * Get/set the editor's word wrap setting. Setting this to true turns on word
 * wrapping.
 * 
 * @type {Boolean} The word wrap setting.
 */
Editor.prototype.wordWrap = false;

/*
 * Methods
 */
 
/**
 * Apply an edit to the current document. This function allows you to delete
 * and insert text in one operation, if desired.
 *
 * @param {Number} offset
 *      The offset within the source where this edit is to take place
 * @param {Number} deleteLength
 *      The number of characters to remove before inserting the new text
 * @param {String} insertText
 *      The new text to insert at the given offset
 */
Editor.prototype.applyEdit = function(offset, deleteLength, insertText) {};

/**
 * Get the zero-based line number at the specified character offset
 * 
 * @param {Number} offset
 *       The character offset within the editor's document
 */
Editor.prototype.getLineAtOffset = function(offset) {};

/**
 * Scroll the editor to bring the current selection or caret position into
 * view.
 */
Editor.prototype.showSelection = function() {};


//eof
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-8829325830920527657?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F1GEpxt105FQBCOyKb8_iXEwfxI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F1GEpxt105FQBCOyKb8_iXEwfxI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F1GEpxt105FQBCOyKb8_iXEwfxI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F1GEpxt105FQBCOyKb8_iXEwfxI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T19:04:17.685+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[轉載] Aptana Scripting Global.js Document</title><link>http://jax-work-archive.blogspot.com/2011/12/aptana-scripting-globaljs-document.html</link><category>JavaScript</category><category>Eclipse Monkey</category><category>轉載</category><category>Eclipse</category><category>Aptana</category><category>Aptana Scripting</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 21 Dec 2011 03:04:13 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-3197084537149764413</guid><description>轉載自：&lt;a href="http://www.koders.com/javascript/fidF76665060DD72CF657CF9367CED59C69F1A8CC79.aspx"&gt;Koders Code Search: Global.js - JavaScript&lt;/a&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;/**
 * Global.js
 *
 * Adding this file to your Active Libraries will give you code assist for the
 * Aptana Studio scripting engine.
 *
 * @author Kevin Lindsey
 * @version 1.0
 */
 
/*
 * Properties
 */

/**
 * Retrieve the Editors object to access editors and editor events
 *
 * @type {Editors} Returns the global Editors object
 */
var editors = {};

/**
 * Retrieve the error print stream.
 *
 * @type {PrintStream} Returns the output stream used to display errors
 */
var err = {};

/**
 * This is a reference to the only instance of this object. All scripts run in
 * their own protected scope. However, this Global is accessible from all
 * scripts. Properties placed on "global" will be accessible to all scripts
 *
 * @type {Global} Returns a reference to the global scope
 */
var global = {};

/**
 * Retrieve the Menus object to access menus and menu events
 *
 * @type {Menus} Returns the global Menus object
 */
var menus = {};

/**
 * Retrieve the standard output print stream.
 *
 * @type {PrintStream} Returns the standard output stream
 */
var out = {};

/**
 * Retrieve the View object to access views and view events
 *
 * @type {Views} Returns the global Views object
 */
var views = {};

/*
 * Methods
 */

/**
 * Display an alert dialog with the given message
 *
 * @param {String} message
 *      The message to display in the dialog
 */
var alert = function(message) {};

/**
 * Execute a string in the current shell. This is experimental and may be
 * removed in a future version of the scripting environment
 *
 * @param {String} command
 *      The command to execute in the shell
 * @return {Object} Returns an object with the following properties: code,
 *      stdout, stderr. Code is the return code from the command. Stdout
 *      contains any text that was emitted to standard out while it was
 *      executing. Likewise, stderr contains any errors that were emitted.
 */
var execute = function(command) {};

/**
 * Call Java's System.getProperty.
 *
 * @param {String} property
 *      The name of the property to retrieve
 * @return {String} Returns the specified property value or the string
 *      "undefined" if the property does not exist
 */
var getProperty = function(property) {};

/**
 * Include a JavaScript file into the current script's scope. this is used to 
 * load dependent libraries into the script that invokes this function.
 * 
 * @param {String} filename
 *      The name of the file to include in the script
 */
var include = function(filename) {};

/**
 * Load a library into the scripting environment. Each script loaded with this
 * function will be assigned a unique ID and, if it exists, the init() function
 * will be invoked. This gives each script the ability to initialize itself and
 * to setup any event listeners it wishes to subscribe to.
 *
 * Each script will exist in its own scope; however, this Global is also
 * included in the scope chain. All variables and functions defined in the
 * script will not collide with any other scripts.
 *
 * Shared properties can be placed on the "global" property. All scripts loaded
 * via this function will then be able to see those properties. This can be
 * used to share data between scripts.
 *
 * @param {String} filename
 *      The file system path to the script to load
 * @return {String} Returns a unique string identifier for the loaded script.
 *      This identifier can be used later to invoke functions within the
 *      script; however, this is more for internal use at this point. If the
 *      script fails to load, this will return undefined.
 */
var loadBundle = function(filename) {};


//eof
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-3197084537149764413?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v4TcMDBjHbbVJkMn1xFj0gzwp6M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v4TcMDBjHbbVJkMn1xFj0gzwp6M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/v4TcMDBjHbbVJkMn1xFj0gzwp6M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v4TcMDBjHbbVJkMn1xFj0gzwp6M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T19:04:13.934+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[轉載] Aptana Scripting Editors.js Class Document</title><link>http://jax-work-archive.blogspot.com/2011/12/aptana-scripting-editorsjs-class.html</link><category>JavaScript</category><category>Eclipse Monkey</category><category>轉載</category><category>Eclipse</category><category>Aptana</category><category>Aptana Scripting</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 21 Dec 2011 03:04:10 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-7079524271122830786</guid><description>轉載自：&lt;a href="http://www.koders.com/javascript/fidF2FD410AF2E06C33A831820FC237085A88BE585A.aspx"&gt;Koders Code Search: Editors.js - JavaScript&lt;/a&gt;&lt;br /&gt;
&lt;pre class="js" name="code"&gt;/**
 * Editors.js
 *
 * Adding this file to your Active Libraries will give you code assist for the
 * Aptana Studio scripting engine.
 *
 * @author Kevin Lindsey
 * @version 1.0
 */

/**
 * Editors
 *
 * @constructor
 */
function Editors(){}

/*
 * Properties
 */

/**
 * Get all editors currently being displayed
 *
 * @type {Array} Returns an array of Editor instances, one for each open editor
 */
Editors.prototype.all = [];

/**
 * Get the currently active editor
 *
 * @type {Editor} Returns the currently active editor or undefined if no editor is open
 */
Editors.prototype.activeEditor = {};

/*
 * Methods
 */

/**
 * Get the object that represents all editors of a given type. This is
 * typically used to register event handlers for a given event type for
 * all editors of a specified language.
 *
 * @param {String} type
 *      The editor type to retrieve. Currently, this is the MIME type for the
 *      language the editor supports.
 * @return {EditorType} Returns the editor type for the given MIME type or
 *      undefined if no editor type exists for the given MIME type
 */
Editors.prototype.getEditorType = function(type) {};

/**
 * Open the specified filename in a new editor
 *
 * @param {String} filename
 *      The name of the file to open in the file system
 * @return {Editor} Returns a new Editor object for the newly opened editor
 */
Editors.prototype.open = function(filename) {};


//eof
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-7079524271122830786?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K6tbUibNEciHaqPrzahNAXW9Xu4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K6tbUibNEciHaqPrzahNAXW9Xu4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K6tbUibNEciHaqPrzahNAXW9Xu4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K6tbUibNEciHaqPrzahNAXW9Xu4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T19:04:10.511+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[PHP] 兩種 while 的應用</title><link>http://jax-work-archive.blogspot.com/2011/12/php-while.html</link><category>工作備忘</category><category>PHP</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Tue, 20 Dec 2011 22:32:32 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-6352011893095193034</guid><description>滿足其中一個條件，就再來一次&lt;br /&gt;
&lt;pre class="php" name="code"&gt;&amp;lt;?php
$a = 'OK';
while(true){
    if($a == "OK"){
        var_dump('OK');        
        $a = "NO";
        continue;
        
    }elseif($a == "NO"){
        var_dump('NO');        
        $a = "XXX";
        continue;

    }else{
        var_dump('default');        
    }
    
    break;        
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
滿足其中一個條件，就跳過之後的判斷，同樣的程式流，也可以在 function 中用 return 做到。&lt;br /&gt;
&lt;pre class="php" name="code"&gt;&amp;lt;?php
$a = 'OK';
do{
    if($a == "OK"){
        echo 'OK'; break;
    }    
        
    if($a == "NO"){
        echo 'NO'; break;
    }        
    
    if($a == "Off"){
        echo 'NO'; break;
    }        

}while(false);
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-6352011893095193034?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RDr7AMMjfysMsQBCPpTi7ICoW_I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RDr7AMMjfysMsQBCPpTi7ICoW_I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RDr7AMMjfysMsQBCPpTi7ICoW_I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RDr7AMMjfysMsQBCPpTi7ICoW_I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T14:32:32.083+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></item><item><title>Sphinx 增量索引的方法</title><link>http://jax-work-archive.blogspot.com/2011/12/sphinx.html</link><category>MySQL</category><category>工作心得</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Thu, 15 Dec 2011 23:17:27 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-4050698256046581233</guid><description>之前有寫過一篇 &lt;a href="http://jax-work-archive.blogspot.com/2009/05/mysql-sphinx.html"&gt;MySQL 全文檢索引擎 - Sphinx&lt;/a&gt; 的文章，最近又把它拿出來用了，不過當時即時更新索引的問題，如今則找到解決的方法了，透過更新增量索引的方式達到即時更新。&lt;br /&gt;
&lt;br /&gt;
簡單的說就是利用兩個索引表的合併查詢來做到，一個是完整的索引表，一個是針對當日資料變動的增量索引。&lt;br /&gt;
&lt;br /&gt;
部分的設定檔如下：&lt;br /&gt;
&lt;pre class="conf" name="code"&gt;# ...

source _source_base
{
    # 來源-共用的設定
}

source people_full : _source_base
{
    sql_query      = \
        SELECT \
            people_profile.id, \
            people_profile.main_name \
        FROM people_profile
        
    sql_query_killlist = \
        SELECT id FROM people_profile \
        WHERE update_date &amp;gt;= CURDATE()
}

# 增量索引來源，這邊只會抓出當日變動的資料
# 建議在 update_date 欄位加上 MySQL INDEX
source people_delta : people_full
{
    sql_query      = \
        SELECT \
            people_profile.id, \
            people_profile.main_name \
        FROM people_profile \
        WHERE people_profile.update_date &amp;gt;= CURDATE()
}


index _index_base
{
    # 索引-共用的設定
}

index people_full : _index_base
{
    source          = people_full
    path            = /var/lib/sphinxsearch/data/people_full
}

# 增量索引
index people_delta : _index_base
{
    source          = people_delta
    path            = /var/lib/sphinxsearch/data/people_delta
}

# 透過 distributed 類型來合併索引
index people
{
    type            = distributed
    local           = people_full
    local           = people_delta
}

# ...
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;建立 SphinxSE 表&lt;/strong&gt;&lt;br /&gt;
特別注意在 &lt;strong&gt;CONNECTION&lt;/strong&gt; 中所指定索引表為 people。&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;CREATE TABLE people_sphinx(
    id BIGINT UNSIGNED NOT NULL   COMMENT '搜尋結果的 Id',
    weight INT NOT NULL           COMMENT '搜尋結果的權重',
    query VARCHAR(3072) NOT NULL  COMMENT '搜尋的查詢條件',
  
    INDEX(query)
)ENGINE=SPHINX 
CONNECTION="sphinx://localhost:9312/people" 
COMMENT='People Sphinx搜尋連接介面';
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;SQL 的查詢測試&lt;/strong&gt;&lt;br /&gt;
這裡使用 INNER JOIN 方式作查詢，這樣對於刪除資料的變動，就不會出現在查詢結果中。&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;SELECT A.id, A.main_name, B.weight
FROM people_sphinx B
INNER JOIN people_profile A
USING(id) 
WHERE B.query='馬丁尼茲;mode=any;limit=1000'
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;透過 PHP 更新增量索引&lt;/strong&gt;&lt;br /&gt;
在資料 INSERT 或 UPDATE 時，去呼叫索引更新，這樣在第一時間就可以更新索引。 &lt;br /&gt;
&lt;pre class="sql" name="code"&gt;shell_exec('sudo indexer --quiet --rotate people_delta 2&amp;gt;&amp;amp;1');
&lt;/pre&gt;&lt;br /&gt;
如果 Server 是 Ubuntu，請記得在 &lt;strong&gt;vim /etc/sudoers&lt;/strong&gt; 中賦予 apache 使用 indexer 的權限。&lt;br /&gt;
&lt;code&gt;www-data        ALL=(root) NOPASSWD:  /usr/bin/indexer&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;在 crontab 中加上排程&lt;/strong&gt;&lt;br /&gt;
利用離峰時間來更新完整的索引表，由於刪除資料的變動需要更新完整索引表才有辦法移除。&lt;br /&gt;
&lt;code&gt;00 00 * * * indexer --quiet --rotate --all &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-4050698256046581233?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bFYD1LF6d6nPz3fi0CHEG_Ojrns/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bFYD1LF6d6nPz3fi0CHEG_Ojrns/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bFYD1LF6d6nPz3fi0CHEG_Ojrns/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bFYD1LF6d6nPz3fi0CHEG_Ojrns/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T15:17:27.287+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[轉載][MySQL] Replication option binlog_format</title><link>http://jax-work-archive.blogspot.com/2011/12/mysql-replication-option-binlogformat.html</link><category>MySQL</category><category>轉載</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Thu, 15 Dec 2011 21:28:07 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-4735693112902201761</guid><description>轉載自：&lt;a href="http://wangwei.cao.blog.163.com/blog/static/1023625262010424113726914/"&gt;MYSQL5.1复制参数binlog_format&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
MySQL 5.1 中，在復制方面的改進就是引進了新的複制技術：基於行的複制。 簡言之，這種新技術就是關注表中發生變化的記錄，而非以前的照抄binlog 模式。 從MySQL  5.1.12 開始，可以用以下三種模式來實現：基於SQL語句的複制(statement-based replication,  SBR)，基於行的複制(row-based replication, RBR)，混合模式複制(mixed-based replication,  MBR)。 相應地，binlog的格式也有三種：STATEMENT，ROW，MIXED。  MBR 模式中，SBR 模式是默認的。 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
在運行時可以動態低改變binlog的格式，除了以下幾種情況： &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;存儲過程或者觸發器中間 &lt;/li&gt;
&lt;li&gt;啟用了NDB &lt;/li&gt;
&lt;li&gt;當前會話試用RBR 模式，並且已打開了臨時表 &lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
如果binlog採用了MIXED 模式，那麼在以下幾種情況下會自動將binlog的模式由SBR 模式改成RBR 模式。 &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;當DML語句更新一個NDB表時 &lt;/li&gt;
&lt;li&gt;當函數中包含UUID() 時 &lt;/li&gt;
&lt;li&gt;2個及以上包含AUTO_INCREMENT 字段的表被更新時 &lt;/li&gt;
&lt;li&gt;行任何INSERT DELAYED 語句時 &lt;/li&gt;
&lt;li&gt;用UDF 時 &lt;/li&gt;
&lt;li&gt;視圖中必須要求使用RBR 時，例如創建視圖是使用了UUID() 函數 &lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
設定主從復制模式的方法非常簡單，只要在以前設定複製配置的基礎上，再加一個參數： &lt;br /&gt;
&lt;pre class="conf" name="code"&gt;binlog_format="STATEMENT" 
#binlog_format="ROW" 
#binlog_format="MIXED"
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
當然了，也可以在運行時動態修改binlog的格式。 例如 &lt;br /&gt;
&lt;pre class="bash" name="code"&gt;mysql&amp;gt; SET SESSION binlog_format = 'STATEMENT'; 
mysql&amp;gt; SET SESSION binlog_format = 'ROW'; 
mysql&amp;gt; SET SESSION binlog_format = 'MIXED'; 

mysql&amp;gt; SET GLOBAL binlog_format = 'STATEMENT'; 
mysql&amp;gt; SET GLOBAL binlog_format = 'ROW'; 
mysql&amp;gt; SET GLOBAL binlog_format = 'MIXED'; 
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
現在來比較以下SBR 和RBR 2中模式各自的優缺點&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;SBR 的優點：&lt;/strong&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;歷史悠久，技術成熟 &lt;/li&gt;
&lt;li&gt;binlog文件較小 &lt;/li&gt;
&lt;li&gt;binlog中包含了所有數據庫更改信息，可以據此來審核數據庫的安全等情況 &lt;/li&gt;
&lt;li&gt;binlog可以用於實時的還原，而不僅僅用於復制 &lt;/li&gt;
&lt;li&gt;主從版本可以不一樣，從服務器版本可以比主服務器版本高 &lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;strong&gt;SBR 的缺點：&lt;/strong&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;不是所有的UPDATE語句都能被複製，尤其是包含不確定操作的時候。 &lt;/li&gt;
&lt;li&gt;調用具有不確定因素的UDF 時復制也可能出問題 &lt;/li&gt;
&lt;li&gt;使用以下函數的語句也無法被複製：&lt;ul&gt; &lt;li&gt;LOAD_FILE()&lt;/li&gt; 
 &lt;li&gt;UUID()&lt;/li&gt; 
 &lt;li&gt;USER()&lt;/li&gt;
 &lt;li&gt;FOUND_ROWS()&lt;/li&gt; 
 &lt;li&gt;SYSDATE() (除非啟動時啟用了--sysdate-is-now 選項)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;INSERT ... SELECT 會產生比RBR 更多的行級鎖 &lt;/li&gt;
&lt;li&gt;複製需要進行全表掃描(WHERE 語句中沒有使用到索引)的UPDATE 時，需要比RBR 請求更多的行級鎖 &lt;/li&gt;
&lt;li&gt;對於有AUTO_INCREMENT 字段的InnoDB表而言，INSERT 語句會阻塞其他INSERT 語句 &lt;/li&gt;
&lt;li&gt;對於一些複雜的語句，在從服務器上的耗資源情況會更嚴重，而RBR 模式下，只會對那個發生變化的記錄產生影響 &lt;/li&gt;
&lt;li&gt;存儲函數(不是存儲過程)在被調用的同時也會執行一次NOW() 函數，這個可以說是壞事也可能是好事 &lt;/li&gt;
&lt;li&gt;確定了的UDF 也需要在從服務器上執行 &lt;/li&gt;
&lt;li&gt;數據表必須幾乎和主服務器保持一致才行，否則可能會導致複製出錯 &lt;/li&gt;
&lt;li&gt;執行複雜語句如果出錯的話，會消耗更多資源 &lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;RBR 的優點：&lt;/strong&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;任何情況都可以被複製，這對複制來說是最安全可靠的 &lt;/li&gt;
&lt;li&gt;和其他大多數數據庫系統的複制技術一樣 &lt;/li&gt;
&lt;li&gt;多數情況下，從服務器上的表如果有主鍵的話，複製就會快了很多 &lt;/li&gt;
&lt;li&gt;複製以下幾種語句時的行鎖更少：&lt;ul&gt; &lt;li&gt;INSERT ... SELECT&lt;/li&gt; 
 &lt;li&gt;包含AUTO_INCREMENT 字段的INSERT&lt;/li&gt; 
 &lt;li&gt;沒有附帶條件或者並沒有修改很多記錄的UPDATE 或DELETE 語句&lt;/li&gt; 
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;執行INSERT，UPDATE，DELETE 語句時鎖更少 &lt;/li&gt;
&lt;li&gt;從服務器上採用多線程來執行複製成為可能 &lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;strong&gt;RBR 的缺點：&lt;/strong&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt; binlog 大了很多 &lt;/li&gt;
&lt;li&gt;複雜的回滾時binlog 中會包含大量的數據 &lt;/li&gt;
&lt;li&gt;主服務器上執行UPDATE 語句時，所有發生變化的記錄都會寫到binlog 中，而SBR 只會寫一次，這會導致頻繁發生binlog 的並發寫問題 &lt;/li&gt;
&lt;li&gt;UDF 產生的大BLOB 值會導致複製變慢 &lt;/li&gt;
&lt;li&gt;無法從binlog 中看到都複製了寫什麼語句 &lt;/li&gt;
&lt;li&gt;當在非事務表上執行一段堆積的SQL語句時，最好採用SBR 模式，否則很容易導致主從服務器的數據不一致情況發生 &lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
另外，針對系統庫 mysql 裡面的表發生變化時的處理規則如下： &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;如果是採用INSERT，UPDATE，DELETE 直接操作表的情況，則日誌格式根據binlog_format 的設定而記錄 &lt;/li&gt;
&lt;li&gt;如果是採用GRANT，REVOKE，SET PASSWORD 等管理語句來做的話，那麼無論如何都採用SBR 模式記錄 &lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
注：採用RBR 模式後，能解決很多原先出現的主鍵重複問題&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-4735693112902201761?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bm5JWpSqVusp5JPR3CprBGNKGZc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bm5JWpSqVusp5JPR3CprBGNKGZc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bm5JWpSqVusp5JPR3CprBGNKGZc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bm5JWpSqVusp5JPR3CprBGNKGZc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T13:28:07.692+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[MySQL] Replication  Master to Slave</title><link>http://jax-work-archive.blogspot.com/2011/12/mysql-replication-master-to-slave.html</link><category>MySQL</category><category>工作備忘</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Thu, 15 Dec 2011 20:43:59 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-6661939025931990836</guid><description>&lt;strong&gt;Master上的設定&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
my.cnf&lt;br /&gt;
&lt;pre class="conf" name="code"&gt;# 主機ID，不可以重複，範圍 0~4294967295
server-id       = 1

# Log 的名稱或路徑，只有名稱會將檔案放在 datadir 下
log_bin         = mysql-bin

# Log 的格式{ROW,STATEMENT,MIXED}，最低支援版本 5.1.8  
binlog_format = MIXED

# 需要同步的資料庫，多個寫多行
binlog_do_db    = test
binlog_do_db    = mydb

# 針對 InnoDB 且有用 transaction 的設定
innodb_flush_log_at_trx_commit=1
sync_binlog=1 
&lt;/pre&gt;&lt;br /&gt;
進入Master mysql&lt;br /&gt;
&lt;code&gt;mysql -u root -p&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
建立同步連接帳號 db_sync，密碼12345，給 slave_host，&lt;br /&gt;
&lt;code&gt;mysql&amp;gt; GRANT REPLICATION SLAVE ON *.* TO 'db_sync'&lt;/code&gt;&lt;code&gt;'slave_host' IDENTIFIED BY '12345';&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
鎖定資料庫寫入&lt;br /&gt;
&lt;code&gt;mysql&amp;gt; FLUSH TABLES WITH READ LOCK;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
取得 MASTER 上的 Log File 名稱與 Position 編號，這個編號代表當前的 Log 戳記&lt;br /&gt;
&lt;code&gt;mysql&amp;gt; SHOW MASTER STATUS\G;&lt;/code&gt;&lt;br /&gt;
&lt;table&gt;&lt;tr&gt;&lt;th style="text-align:right;"&gt;File:&lt;/th&gt;&lt;th style="text-align:left;"&gt;mysql-bin.000010&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="text-align:right;"&gt;Position:&lt;/th&gt;&lt;th style="text-align:left;"&gt;106&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Binlog_Do_DB:&lt;/td&gt;&lt;td&gt;test,mydb&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Binlog_Ignore_DB:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
離開 mysql&lt;br /&gt;
&lt;code&gt;mysql&amp;gt; quit&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
匯出 MASTER 上的資料 &lt;br /&gt;
&lt;code&gt;mysqldump -uroot -p --flush-logs --opt --master-data test &amp;gt; test.sql&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
解除鎖定&lt;br /&gt;
&lt;code&gt;mysql -u root -p -e UNLOCK TABLES;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Slave上的設定&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
my.cnf&lt;br /&gt;
&lt;pre class="conf" name="code"&gt;# 主機ID，不可以重複，範圍 0~4294967295
server-id       = 2

# 需要同步的資料庫，或指定的資料表
replicate_wild_do_table = test.%
replicate_wild_do_table = mydb.category
replicate_wild_do_table = mydb.blog

# 與 Master 斷線後，重新嘗試連接的時間(sec) 
master-connect-retry = 60
&lt;/pre&gt;&lt;br /&gt;
匯入資料&lt;br /&gt;
&lt;code&gt;mysql -uroot -p test &amp;lt; test.sql&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
進入 Slave mysql&lt;br /&gt;
&lt;code&gt;mysql -uroot -p&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
停止跟清除之前的 SLAVE 連接 &lt;br /&gt;
&lt;code&gt;mysql&amp;gt; STOP SLAVE; RESET SLAVE;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
設定Slave 與 Master 的連接&lt;br /&gt;
&lt;pre class="bash" name="code"&gt;mysql&amp;gt; CHANGE MASTER TO
    MASTER_HOST='master_host',
    MASTER_USER='db_sync',
    MASTER_PASSWORD='12345',
    MASTER_LOG_FILE='mysql-bin.000011',
    MASTER_LOG_POS=106;
&lt;/pre&gt;&lt;br /&gt;
啟動 SLAVE 的連接 &lt;br /&gt;
&lt;code&gt;mysql&amp;gt; START SLAVE;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
察看連接狀態&lt;br /&gt;
&lt;code&gt;mysql&amp;gt; SHOW SLAVE STATUS\G;&lt;/code&gt;&lt;br /&gt;
&lt;table&gt;&lt;tr&gt;&lt;td style="text-align:right;"&gt;Slave_IO_State:&lt;/td&gt;&lt;td&gt;Connecting to master&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_Host:&lt;/td&gt;&lt;td&gt;master_host&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_User:&lt;/td&gt;&lt;td&gt;db_sync&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_Port:&lt;/td&gt;&lt;td&gt;3306&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Connect_Retry:&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_Log_File:&lt;/td&gt;&lt;td&gt;mysql-bin.000011&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Read_Master_Log_Pos:&lt;/td&gt;&lt;td&gt;106&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Relay_Log_File:&lt;/td&gt;&lt;td&gt;master_host-relay-bin.000011&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Relay_Log_Pos:&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Relay_Master_Log_File:&lt;/td&gt;&lt;td&gt;mysql-bin.000011&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="text-align:right;"&gt;Slave_IO_Running:&lt;/th&gt;&lt;th style="text-align: left;"&gt;Yes&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="text-align:right;"&gt;Slave_SQL_Running:&lt;/th&gt;&lt;th style="text-align: left;"&gt;Yes&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Replicate_Do_DB:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Replicate_Ignore_DB:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Replicate_Do_Table:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Replicate_Ignore_Table:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Replicate_Wild_Do_Table:&lt;/td&gt;&lt;td&gt;test.%,mydb.category,mydb.blog&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Replicate_Wild_Ignore_Table:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Last_Errno:&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Last_Error:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Skip_Counter:&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Exec_Master_Log_Pos:&lt;/td&gt;&lt;td&gt;106&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Relay_Log_Space:&lt;/td&gt;&lt;td&gt;106&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Until_Condition:&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Until_Log_File:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Until_Log_Pos:&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_SSL_Allowed:&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_SSL_CA_File:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_SSL_CA_Path:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_SSL_Cert:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_SSL_Cipher:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:right;"&gt;Master_SSL_Key:&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="text-align:right;"&gt;Seconds_Behind_Master:&lt;/th&gt;&lt;th style="text-align: left;"&gt;0&lt;/th&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
接著到 Master 上新增一筆資料測試看看吧！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
參考文章：&lt;br /&gt;
&lt;a href="http://www.d5s.cn/archives/95"&gt;MYSQL 主从服务器配置&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.ooso.net/archives/547"&gt;mysql主从同步快速设置&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blog.longwin.com.tw/2008/03/mysql_replication_master_slave_set_2008/"&gt;MySQL 設定 Replication (Master &amp;#8211; Slave)&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blog.chinaunix.net/space.php?uid=220350&amp;amp;do=blog&amp;amp;id=149202"&gt;多主一从mysql replication同步表的大胆尝试&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://bbs.chinaunix.net/viewthread.php?tid=3566946"&gt;MySQL复制的数据库过滤若干问题&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://wangwei.cao.blog.163.com/blog/static/1023625262010424113726914/"&gt;MYSQL5.1复制参数binlog_format&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-6661939025931990836?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TO2pGUIZLmZwd1VVjvOduqEV_h8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TO2pGUIZLmZwd1VVjvOduqEV_h8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TO2pGUIZLmZwd1VVjvOduqEV_h8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TO2pGUIZLmZwd1VVjvOduqEV_h8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T12:43:59.171+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[PHP] 縮圖方式的比較</title><link>http://jax-work-archive.blogspot.com/2011/12/php-image-thumbnail-diff.html</link><category>PHP</category><category>Linux</category><category>Windows</category><category>工作心得</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Thu, 15 Dec 2011 17:54:41 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-5469794054913464175</guid><description>&lt;ul&gt;&lt;li&gt;&lt;a href="http://php.net/manual/en/function.imagecopyresized.php"&gt;imageCopyResized&lt;/a&gt; 速度快，但縮圖的品質很粗糙&lt;/li&gt;
&lt;li&gt;&lt;a href="http://php.net/manual/en/function.imagecopyresampled.php"&gt;imageCopyResampled&lt;/a&gt; 縮圖的品質好，但花費的時間有點多&lt;/li&gt;
&lt;/ul&gt;這兩種的缺點是，都會根據圖片的像素大小，而佔用PHP的記憶體，會造成 &lt;strong&gt;Fatal error: Out of memory&lt;/strong&gt; 的錯誤出現，有一種狀況是一個 3MB 大小的 JPEG 實際的像素大小卻是 128MB，再來 GD 支援的圖片類型有限，大約就是四五種常用類型。&lt;br /&gt;
&lt;br /&gt;
優點是指需要安裝 GD 套件，這個套件不管是在 Windows 或 Linux 上很容易找到跟安裝，在處理圖片的類型明確跟尺寸不大的情況下，使用這兩個函數是不錯的。&lt;br /&gt;
&lt;br /&gt;
為了改善 &lt;strong&gt;imageCopyResampled&lt;/strong&gt; 效率，可以利用 &lt;strong&gt;imageCopyResized&lt;/strong&gt; 做預先縮圖，例如要縮圖的大小為 100*100 時，可以先將圖片縮小成四倍或八倍，如 400*400 或 800*800，可改善超大圖造成的效率不好。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.imagemagick.org/script/index.php"&gt;ImageMagick&lt;/a&gt; + &lt;a href="http://php.net/manual/en/book.imagick.php"&gt;Imagick&lt;/a&gt; 使用外部的程式來處理圖片，使用指令的方式或透過 Imagick 套件來處理縮圖。&lt;/li&gt;
&lt;/ul&gt;缺點是透過指令的方式很不友善，且容易受到系統權限的限制，而 Imagick 套件在 Windows 上不容易找到合適的 DLL。&lt;br /&gt;
&lt;br /&gt;
優點是支援下面多種格式，效率快且沒有記憶體錯誤的問題。&lt;br /&gt;
&lt;blockquote&gt;3FR, A, AI, ART, ARW, AVI, AVS, B, BGR, BGRA, BMP, BMP2, BMP3, BRF, BRG, C, CAL, CALS, CAPTION, CIN, CIP, CLIP, CMYK, CMYKA, CR2, CRW, CUR, CUT, DCM, DCR, DCX, DDS, DFONT, DJVU, DNG, DOT, DPX, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, ERF, EXR, FAX, FITS, FRACTAL, FTS, G, G3, GBR, GIF, GIF87, GRADIENT, GRAY, GRB, GROUP4, HALD, HISTOGRAM, HRZ, HTM, HTML, ICB, ICO, ICON, INFO, INLINE, IPL, ISOBRL, J2C, JNG, JP2, JPC, JPEG, JPG, JPX, K, K25, KDC, LABEL, M, M2V, M4V, MAP, MAT, MATTE, MIFF, MNG, MONO, MOV, MP4, MPC, MPEG, MPG, MRW, MSL, MSVG, MTV, MVG, NEF, NULL, O, ORF, OTB, OTF, PAL, PALM, PAM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PDFA, PEF, PES, PFA, PFB, PFM, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG24, PNG32, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSB, PSD, PTIF, PWP, R, RADIAL-GRADIENT, RAF, RAS, RBG, RGB, RGBA, RGBO, RLA, RLE, SCR, SCT, SFW, SGI, SHTML, SR2, SRF, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, THUMBNAIL, TIFF, TIFF64, TILE, TIM, TTC, TTF, TXT, UBRL, UIL, UYVY, VDA, VICAR, VID, VIFF, VST, WBMP, WMF, WMV, WMZ, WPG, X, X3F, XBM, XC, XCF, XPM, XPS, XV, XWD, Y, YCbCr, YCbCrA, YUV&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-5469794054913464175?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eNGqzHOCJvM7y2WoJQG5ecbv104/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eNGqzHOCJvM7y2WoJQG5ecbv104/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eNGqzHOCJvM7y2WoJQG5ecbv104/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eNGqzHOCJvM7y2WoJQG5ecbv104/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T09:54:41.782+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[PHP] Documentor (phpdoc) 備忘</title><link>http://jax-work-archive.blogspot.com/2011/12/php-documentor-phpdoc.html</link><category>工作備忘</category><category>PHP</category><category>Linux</category><category>Windows</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Thu, 15 Dec 2011 22:18:53 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-5117327691907039627</guid><description>&lt;strong&gt;Linux 安裝指令&lt;/strong&gt;&lt;br /&gt;
sudo pear install -o PhpDocumentor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Windows 安裝指令&lt;/strong&gt;&lt;br /&gt;
C:\wamp\bin\php\php5.2.4\pear.bat install -o PhpDocumentor &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;使用方式&lt;/strong&gt;&lt;br /&gt;
&lt;pre class="sh" name="code"&gt;phpdoc --parseprivate \
    --output HTML:frames:earthli \
    --ignore Smarty/ \
    --directory /var/www/lib,/var/www/data_mod,/var/www/etc \
    --target /var/www/docs
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;phpdoc 參數說明&lt;/strong&gt;&lt;br /&gt;
&lt;table&gt;&lt;tr valign="top"&gt;&lt;td&gt;-f&lt;/td&gt;&lt;td&gt;--filename&lt;/td&gt;&lt;td&gt;要解析的檔案名稱，可使用 &amp;#8216;,&amp;#8217;分隔多個檔案 &amp;#8220;file1,file2&amp;#8221;，可以包含完整路徑和使用 * ? 萬用符號。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-d&lt;/td&gt;&lt;td&gt;--directory&lt;/td&gt;&lt;td&gt;要解析的目錄路徑，可使用 &amp;#8216;,&amp;#8217;分隔多個目錄路徑 &amp;#8220;directory1，directory2&amp;#8221;。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-t&lt;/td&gt;&lt;td&gt;--target&lt;/td&gt;&lt;td&gt;指定要輸出的目錄。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-i&lt;/td&gt;&lt;td&gt;--ignore&lt;/td&gt;&lt;td&gt;要忽略的檔案名稱，可使用 &amp;#8216;,&amp;#8217;分隔多個檔案 &amp;#8220;file1,file2&amp;#8221;，可以使用 * ? 萬用符號。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-is&lt;/td&gt;&lt;td&gt;--ignoresymlinks&lt;/td&gt;&lt;td&gt;忽略系統連結的檔案或目錄，預設是關閉的。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-it&lt;/td&gt;&lt;td&gt;--ignore-tags&lt;/td&gt;&lt;td&gt;忽略解析的標籤。 @package, @subpackage, @access, @ignore 可能是無法忽視。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-q&lt;/td&gt;&lt;td&gt;--quiet&lt;/td&gt;&lt;td&gt;不顯示解析/轉換的訊息，在 cron 排程時可以選擇開啟，預設是關閉的。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-ti&lt;/td&gt;&lt;td&gt;--title&lt;/td&gt;&lt;td&gt;產生出的文件的標題，預設為 &amp;#8216;Generated Documentation&amp;#8217;。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-h&lt;/td&gt;&lt;td&gt;--help&lt;/td&gt;&lt;td&gt;顯示幫助訊息。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-pp&lt;/td&gt;&lt;td&gt;--parseprivate&lt;/td&gt;&lt;td&gt;將私有(private)成員函式或私有變數也都加入程式文件裡。不然產生出的文件裡只會有公開(public)和保護(protected)的成員函式和變數。&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-o&lt;/td&gt;&lt;td&gt;--output&lt;/td&gt;&lt;td&gt;設置輸出文件的格式&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td colspan="3"&gt;&lt;ul&gt;&lt;li&gt;HTML:frames:* - 包含iframe的HTML格式&lt;/li&gt;
&lt;li&gt;HTML:frames:default – Javadoc風格的文檔模板，很少有格式&lt;/li&gt;
&lt;li&gt;HTML:frames:earthli – 漂亮的模板（作者：Marco von Ballmoos）&lt;/li&gt;
&lt;li&gt;HTML:frames:l0l33t – 流行模板&lt;/li&gt;
&lt;li&gt;HTML:frames:phpdoc.de – 類似於phpdoc.de的PHPDoc輸出&lt;/li&gt;
&lt;li&gt;HTML:frames:phphtmllib – 非常棒的用戶貢獻模板&lt;/li&gt;
&lt;li&gt;HTML:frames:phpedit – 基於PHPEdit Help Generator的文檔&lt;/li&gt;
&lt;li&gt;HTML:Smarty:* - 不使用iframe的HTML格式&lt;/li&gt;
&lt;li&gt;HTML:Smarty:default – 使用css控制的黑體模板&lt;/li&gt;
&lt;li&gt;HTML:Smarty:HandS – 基於PHP的格式，但是經過優化，帶有logo圖片&lt;/li&gt;
&lt;li&gt;HTML:Smarty:PHP – 風格接近PHP官網&lt;/li&gt;
&lt;li&gt;CHM:default:* - 輸出CHM幫助文檔&lt;/li&gt;
&lt;li&gt;CHM:default:default – windows幫助文檔，基於HTML:frames:l0l33t&lt;/li&gt;
&lt;li&gt;PDF:default:* - PDF格式&lt;/li&gt;
&lt;li&gt;PDF:default:default – 標準純文本PDF格式&lt;/li&gt;
&lt;li&gt;XML:DocBook:* - 以DocBook格式輸出的XML&lt;/li&gt;
&lt;li&gt;XML:DocBook/peardoc2:default – 可以被編譯成peardoc的文檔&lt;/li&gt;
&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-j&lt;/td&gt;&lt;td&gt;--javadocdesc&lt;/td&gt;&lt;td&gt;相容 JavaDoc 的格式，預設是關閉的&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;中文亂碼的問題&lt;/strong&gt;&lt;br /&gt;
新版的 phpdoc 輸出的格式已經是 UTF-8 了，所以只要在目錄下增加一個 .htaccess 文件，然後內容為：&lt;br /&gt;
&lt;code&gt;AddCharset UTF-8 .html&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
參考文件：&lt;br /&gt;
&lt;a href="http://pkwbim-programming-note.blogspot.com/2008/01/phpdocumentor-0.html"&gt;多采多姿的程式筆記: phpDocumentor筆記 - 0 立即體驗&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html"&gt;phpDocumentor Tutorial&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://luchuan.iteye.com/blog/954147"&gt;phpDocumentor学习记录&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-5117327691907039627?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/233S7u7UmyCdnhJ9DURxaRHkSHY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/233S7u7UmyCdnhJ9DURxaRHkSHY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/233S7u7UmyCdnhJ9DURxaRHkSHY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/233S7u7UmyCdnhJ9DURxaRHkSHY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T14:18:53.522+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[轉載] Linux Rsync 參數說明</title><link>http://jax-work-archive.blogspot.com/2011/12/linux-rsync.html</link><category>工作備忘</category><category>轉載</category><category>Linux</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 14 Dec 2011 05:02:03 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-307717889326365568</guid><description>轉載自： &lt;a href="http://gaaan.com/cafetw?p=89899"&gt;Rsync 中文參數說明&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;內容開始&lt;/strong&gt;&lt;br /&gt;
rsync 資料同步&lt;strong&gt;敘述:&lt;/strong&gt;&lt;br /&gt;
rsync和rcp的模式很相似,不過rsync有需多參數可以使用來加速檔案傳送.&lt;br /&gt;
rsync遠端更新協定(remote-update protocol)可以透過網路來傳輸兩端檔案不同的地方.&lt;strong&gt;語法:&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;rsync [OPTION]... SRC [SRC]... DEST&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;rsync [OPTION]... [USER@]HOST:SRC [DEST]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;rsync [OPTION]... [USER@]HOST::SRC [DEST]&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;rsyncd 的設定檔:&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;/usr/local/etc/rsyncd.conf&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
說明:&lt;br /&gt;
&lt;table border="0"&gt;&lt;tr valign="top"&gt;&lt;td&gt;[ohaha]:&lt;/td&gt;&lt;td&gt; rsync區段的設定名稱&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;path:&lt;/td&gt;&lt;td&gt; 備份資料存放的路徑&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;auth users:&lt;/td&gt;&lt;td&gt; 連結rsync服務的帳號&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;uid,gid:&lt;/td&gt;&lt;td&gt; 採用何種身分進行檔案存取&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;secerts file:&lt;/td&gt;&lt;td&gt; 帳號密碼檔位置&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;read only:&lt;/td&gt;&lt;td&gt; 是否唯讀&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;參數:&lt;/strong&gt;&lt;br /&gt;
&lt;table border="0"&gt;&lt;tr valign="top"&gt;&lt;td&gt;-h,&lt;/td&gt;&lt;td&gt;--help&lt;/td&gt;&lt;td&gt;顯示rsync求助資訊.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--version&lt;/td&gt;&lt;td&gt;顯示rsync版本.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-v,&lt;/td&gt;&lt;td&gt;--verbose&lt;/td&gt;&lt;td&gt;複雜的輸出訊息.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-q,&lt;/td&gt;&lt;td&gt;--quiet&lt;/td&gt;&lt;td&gt;安靜模式,幾乎沒有訊息產生.常用在以cron執行rsync.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-I,&lt;/td&gt;&lt;td&gt;--ignore-times&lt;/td&gt;&lt;td&gt;通常rsync為了加快速度會忽略同樣檔案大小且同樣存取時間點的檔案. 可以透過此參數關閉此快速檢查.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--size-only&lt;/td&gt;&lt;td&gt;rsync只檢查檔案大小是否改變,不管時間存取點是否改變. 通常用在mirror,且對方時間不太正確時.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-c,&lt;/td&gt;&lt;td&gt;--checksum&lt;/td&gt;&lt;td&gt;在傳送之前透過128bit的md4檢查碼來檢查所有要傳送的檔案.(會拖慢速度.)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-a,&lt;/td&gt;&lt;td&gt;--archive&lt;/td&gt;&lt;td&gt;archive mode 權限保存模式,相當於 -rlptgoD 參數. 很快速的保存幾乎所有的權限設定,除了硬式連結(透過-H設定).&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-r,&lt;/td&gt;&lt;td&gt;--recursive&lt;/td&gt;&lt;td&gt;複製所有下層的資料(遞迴)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-R,&lt;/td&gt;&lt;td&gt;--relative&lt;/td&gt;&lt;td&gt;使用相對路徑.&lt;br /&gt;
如: rsync foo/bar/foo.c remote:/tmp/ 在遠端產生/tmp/foo.c檔案 &lt;br /&gt;
rsync -R foo/bar/foo.c remote:/tmp/ 在遠端產生/tmp/foo/bar/foo.c 檔案&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-R,&lt;/td&gt;&lt;td&gt;--relative&lt;/td&gt;&lt;td&gt;不使用相對路徑.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-b,&lt;/td&gt;&lt;td&gt;--backup&lt;/td&gt;&lt;td&gt;目的地端先前已經存在的檔案在傳輸或刪除前會被備份.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--backup-dir=DIR&lt;/td&gt;&lt;td&gt;設定備份的資料夾.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--suffix=SUFFIX&lt;/td&gt;&lt;td&gt;指定備份的檔案名稱字尾形式(預設為~).&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-K,&lt;/td&gt;&lt;td&gt;--keep-dirlinks&lt;/td&gt;&lt;td&gt;接收方將連結到資料夾的檔案視為資料夾處理&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-l,&lt;/td&gt;&lt;td&gt;--links&lt;/td&gt;&lt;td&gt;複製所有的連結&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-H,&lt;/td&gt;&lt;td&gt;--hard-links&lt;/td&gt;&lt;td&gt;保留硬式連結&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-p,&lt;/td&gt;&lt;td&gt;--perms&lt;/td&gt;&lt;td&gt;保留檔案權限&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-o,&lt;/td&gt;&lt;td&gt;--owner&lt;/td&gt;&lt;td&gt;保留檔案擁有者(root only)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-g,&lt;/td&gt;&lt;td&gt;--group&lt;/td&gt;&lt;td&gt;保留檔案群組&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-D,&lt;/td&gt;&lt;td&gt;--devices&lt;/td&gt;&lt;td&gt;保留device資訊(root only)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-t,&lt;/td&gt;&lt;td&gt;--times&lt;/td&gt;&lt;td&gt;保留時間點&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-n,&lt;/td&gt;&lt;td&gt;--dry-run&lt;/td&gt;&lt;td&gt;不實際執行傳送,只顯示將會有的傳輸動作&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-S,&lt;/td&gt;&lt;td&gt;--sparse&lt;/td&gt;&lt;td&gt;嘗試去處理稀疏的檔案,讓這些檔案在目的端佔去較少的磁碟空間.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-W,&lt;/td&gt;&lt;td&gt;--whole-file&lt;/td&gt;&lt;td&gt;複製所有的檔案,不額外作檢查.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--no-whole-file&lt;/td&gt;&lt;td&gt;關閉 --whole-file 參數&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-x,&lt;/td&gt;&lt;td&gt;--one-file-system&lt;/td&gt;&lt;td&gt;不要跨越檔案系統分界(只在一個檔案系統處理)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-B,&lt;/td&gt;&lt;td&gt;--block-size=SIZE&lt;/td&gt;&lt;td&gt;強制透過rsync程式去比對修復block-sizeforce&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-e&lt;/td&gt;&lt;td&gt;--rsh=COMMAND&lt;/td&gt;&lt;td&gt;定義所使用的remote shell&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--rsync-path=PATH&lt;/td&gt;&lt;td&gt;定義rsync在遠端機器存放資料的路徑&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--existing&lt;/td&gt;&lt;td&gt;只比對更新目的端已經存在的檔案&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--ignore-existing&lt;/td&gt;&lt;td&gt;忽略目的端已經存在的檔案(也就是不更新)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--delete&lt;/td&gt;&lt;td&gt;刪除傳送端已經不存在,而目的端存在的檔案&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--delete-excluded&lt;/td&gt;&lt;td&gt;除了把傳送端已經不存在,而目的端存在的檔案刪除之外, 也刪除 --exclude 參數所包含的檔案.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--delete-after&lt;/td&gt;&lt;td&gt;rsync預設會在檔案傳送前進行相關刪除動作確保接收端有足夠的檔案空間, 但可以透過 --delete-after 讓刪除動作在檔案傳送後再行刪除.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--ignore-errors&lt;/td&gt;&lt;td&gt;忽略任何錯誤既使是I/O error 也進行 --delete 刪除動作.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--max-delete=NUM&lt;/td&gt;&lt;td&gt;定義rsync不要刪除超過 NUM 個檔案.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--partial&lt;/td&gt;&lt;td&gt;rsync若遇到傳輸過程中斷時,會把那些已經傳輸的檔案刪除. &lt;br /&gt;
在某種狀況下保留那些部分傳送的檔案是令人高興的. &lt;br /&gt;
你可以透過 --partial 參數達到這個目的.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--partial-dir=DIR&lt;/td&gt;&lt;td&gt;在 --partial 參數啟動時,你還可以定義rsync把那些部分傳送的檔案 &lt;br /&gt;
寫入定義的資料夾,而非直接寫入目的端.需要注意的是, 此資料夾不應該被其他使用者可以寫入.(如:/tmp)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--force&lt;/td&gt;&lt;td&gt;當目的端資料夾被傳送端非資料夾名稱覆蓋時,強制rsync刪除資料夾, 即使該資料夾不是空的.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--numeric-ids&lt;/td&gt;&lt;td&gt;不將傳送端檔案的uid及gid值,與目的端的使用者/群組進行配對. 若傳送端並沒有uid及gid的對應名稱(如:原帳號群組被刪除的遺留檔案), 或目的端沒有相對應的帳號/群組,保留數字型態的uid/gid&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--timeout=TIMEOUT&lt;/td&gt;&lt;td&gt;設定 I/O 逾時的時間(秒). 超過這個秒數而沒有資料傳送,rsync將會結束. 預設為0,也就是沒有定義逾時時間.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-T,&lt;/td&gt;&lt;td&gt;--temp-dir=DIR&lt;/td&gt;&lt;td&gt;定義rsync在接收端產生暫時性的複製檔案時使用資料夾暫存. 預設是直接在接收端資料夾直接產生暫存檔案.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--compare-dest=DIR&lt;/td&gt;&lt;td&gt;定義rsync在目的端建立資料夾來比對傳送過來的檔案.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--link-dest=DIR&lt;/td&gt;&lt;td&gt;與 --compare-dest 相同,但同時會針對無法改變的檔案建立硬式連結.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-z,&lt;/td&gt;&lt;td&gt;--compress&lt;/td&gt;&lt;td&gt;壓縮模式,當資料在傳送到目的端進行檔案壓縮.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-P&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;-P參數和 --partial --progress 相同.只是為了把參數簡單化.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-C,&lt;/td&gt;&lt;td&gt;--cvs-exclude&lt;/td&gt;&lt;td&gt;排除那些通常不希望傳送的檔案.定義的方式與CVS傳送相同:&lt;br /&gt;
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state&lt;br /&gt;
.nse_depinfo *~ *$ *.old *.bak *.BAK *.orig *.rej &lt;br /&gt;
*.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/ &lt;br /&gt;
符合以上條件的都會被忽略而不傳送.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--exclude=PATTER&lt;/td&gt;&lt;td&gt;符合PATTERN(規則表示式)樣式的檔案不進行傳送&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--exclude-from=FILE&lt;/td&gt;&lt;td&gt;和--exclude參數相同,不過是把不進行傳送的檔案事先寫入某一檔案. 執行時,透過此參數讓rsync讀取. (; #開頭的行列或空白行會被rsync忽略)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--include=PATTERN&lt;/td&gt;&lt;td&gt;定義rsync不要排除符合pattern樣式的檔案.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--include-from=FILE&lt;/td&gt;&lt;td&gt;和--include參數相同,只不過把要包含的檔案寫到某一檔案.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--files-from=FILE&lt;/td&gt;&lt;td&gt;把要傳送的檔案名稱都精確的寫入某一檔案,讓rsync讀取. 如: rsync -a --files-from=/tmp/foo /usr remote:/backup&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-0&lt;/td&gt;&lt;td&gt;--from0&lt;/td&gt;&lt;td&gt;定義檔案所要讀取的檔案是null字元結尾.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--version&lt;/td&gt;&lt;td&gt;顯示版本訊息.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--daemon&lt;/td&gt;&lt;td&gt;定義rsync以daemon型態執行.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--no-detach&lt;/td&gt;&lt;td&gt;當以daemon型態執行時,不要進行分裂且變成背景程序.&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--address=ADDRESS&lt;/td&gt;&lt;td&gt;定義所要連結(bind)的ip位址或是host名稱(daemon限定)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--config=FILE&lt;/td&gt;&lt;td&gt;定義所要讀取的設定檔rsyncd.conf位置(daemon限定) 預設值為 /usr/local/etc/rsyncd.conf&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--port=PORT&lt;/td&gt;&lt;td&gt;定義rsyncd(daemon)要執行的port(預設為tcp 873)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--blocking-io&lt;/td&gt;&lt;td&gt;使用blocking I/O連結遠端的shell,如rsh , remsh&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--no-blocking-io&lt;/td&gt;&lt;td&gt;使用non-blocking連結遠端的shell,如ssh (預設值)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--stats&lt;/td&gt;&lt;td&gt;顯示檔案傳送時的資訊狀態&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--progress&lt;/td&gt;&lt;td&gt;顯示傳送的進度.(給檔案傳送時,怕無聊的人用的..)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--log-format=FORMAT&lt;/td&gt;&lt;td&gt;定義log的格式(在rsyncd.conf設定)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--password-file=FILE&lt;/td&gt;&lt;td&gt;從檔案讀取與遠端rsync伺服器連結的密碼&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--bwlimit=KBPS&lt;/td&gt;&lt;td&gt;定義傳輸頻寬的大小(KBytes/秒)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--write-batch=FILE&lt;/td&gt;&lt;td&gt;把紀錄資料寫入一個檔案(給其他相同環境且相同需求的機器使用)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--read-batch=FILE&lt;/td&gt;&lt;td&gt;透過讀取紀錄檔案來進行傳輸.(檔案由 --write-batch 參數產生)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;--checksum-seed=NUM&lt;/td&gt;&lt;td&gt;定義檔案 checksum-seed 的大小(byte)&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-4&lt;/td&gt;&lt;td&gt;--ipv4&lt;/td&gt;&lt;td&gt;使用IPv4協定&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;-6&lt;/td&gt;&lt;td&gt;--ipv6&lt;/td&gt;&lt;td&gt;使用IPv6協定&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-307717889326365568?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VSNKFGOMltVgbA8hy--WAyjvegQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VSNKFGOMltVgbA8hy--WAyjvegQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VSNKFGOMltVgbA8hy--WAyjvegQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VSNKFGOMltVgbA8hy--WAyjvegQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-14T21:02:03.057+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[PHP] 取得用戶真實 IP</title><link>http://jax-work-archive.blogspot.com/2011/12/php-ip.html</link><category>PHP</category><category>轉載</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 14 Dec 2011 00:22:14 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-5929835333531255939</guid><description>轉載自：&lt;a href="http://www.jaceju.net/blog/archives/1913/"&gt;精進你的程式碼 - 從取得用戶端 IP 的函式談起&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code"&gt;&amp;lt;?php
function get_client_ip(){
    foreach (array(
        'HTTP_CLIENT_IP',
        'HTTP_X_FORWARDED_FOR',
        'HTTP_X_FORWARDED',
        'HTTP_X_CLUSTER_CLIENT_IP',
        'HTTP_FORWARDED_FOR',
        'HTTP_FORWARDED',
        'REMOTE_ADDR'
    ) as $key) {
        if(!array_key_exists($key, $_SERVER)){ continue; }
        
        foreach (explode(',', $_SERVER[$key]) as $ip) {
            $ip = trim($ip);
            if ((bool) filter_var($ip, 
                FILTER_VALIDATE_IP,
                FILTER_FLAG_IPV4 |
                FILTER_FLAG_NO_PRIV_RANGE |
                FILTER_FLAG_NO_RES_RANGE
            )){ return $ip; }
        }
    }
    return null;
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-5929835333531255939?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dOuIj1lNEYfLMscUsAUclrSguo0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dOuIj1lNEYfLMscUsAUclrSguo0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dOuIj1lNEYfLMscUsAUclrSguo0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dOuIj1lNEYfLMscUsAUclrSguo0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-14T16:22:14.085+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[Ubuntu] 掛載 Windows 分享目錄</title><link>http://jax-work-archive.blogspot.com/2011/12/ubuntu-windows.html</link><category>工作備忘</category><category>Linux</category><category>Ubuntu</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Wed, 14 Dec 2011 00:25:06 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-6334794094940651347</guid><description>&lt;ul&gt;&lt;li&gt;安裝 smbfs 套件&lt;br /&gt;
&lt;code&gt;sudo apt-get install smbfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;建立掛載目錄&lt;br /&gt;
&lt;code&gt;sudo mkdir /mnt/windows_share&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;開放最大權限&lt;br /&gt;
&lt;code&gt;sudo chmod 777&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;測試掛載&lt;br /&gt;
&lt;pre class="sh" name="code"&gt;sudo mount -t cifs //192.168.0.10/my_share /mnt/windows_share -o username=jax,password=1234,noacl,noperm,codepage=cp950,iocharset=big5,file_mode=0666,dir_mode=0777
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;察看是否成功&lt;br /&gt;
&lt;code&gt;df -h&lt;/code&gt;&lt;br /&gt;
Filesystem Size Used Avail Use% Mounted on&lt;br /&gt;
//192.168.0.10/my_share 7.9G 208K 7.9G 1% /mnt/windows_share&lt;/li&gt;
&lt;li&gt;卸載&lt;br /&gt;
&lt;code&gt;sudo umount /mnt/windows_share&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改開機掛載設定檔&lt;br /&gt;
&lt;code&gt;sudo vim /etc/fstab&lt;/code&gt;&lt;br /&gt;
&lt;pre class="conf" name="code"&gt;/mnt/windows_share was on //192.168.0.10/my_share
//192.168.0.10/my_share /mnt/windows_share cifs username=jax,password=1234,noacl,noperm,codepage=cp950,iocharset=big5,file_mode=0666,dir_mode=0777 0 0
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;套用開機設定檔&lt;br /&gt;
&lt;code&gt;mount -a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;再次察看是否成功&lt;br /&gt;
&lt;code&gt;df -h&lt;/code&gt;&lt;br /&gt;
Filesystem Size Used Avail Use% Mounted on&lt;br /&gt;
//192.168.0.10/my_share 7.9G 208K 7.9G 1% /mnt/windows_share&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
參考資料：&lt;br /&gt;
&lt;a href="http://geek-garden.blogspot.com/2011/01/ubuntu-mount-windows.html"&gt;在 ubuntu 中 mount windows 分享的目錄&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://indeepnight.blogspot.com/2007/05/mount.html"&gt;載掛（Mount）遠端資料夾的應用&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blog.sina.com.cn/s/blog_53d86b2d0100qeot.html"&gt;ubuntu的几个技巧: 自动连接Windows共享文件夹, 定时文件同步备份&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-6334794094940651347?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rcMLuh-CuO4iqkxVfLEprziWGrk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rcMLuh-CuO4iqkxVfLEprziWGrk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rcMLuh-CuO4iqkxVfLEprziWGrk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rcMLuh-CuO4iqkxVfLEprziWGrk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-14T16:25:06.264+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[MySQL] EXPLAIN 分析報告的意義</title><link>http://jax-work-archive.blogspot.com/2011/11/mysql-explain.html</link><category>MySQL</category><category>工作備忘</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Tue, 22 Nov 2011 08:43:16 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-8400755842588100843</guid><description>轉載自：&lt;a href="http://chensh.loxa.edu.tw/php/C_7.php"&gt;PHP + MySQL 程式設計研習&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;table&lt;/b&gt;&lt;br /&gt;
表示所引用的表格名稱。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;type&lt;/b&gt;&lt;br /&gt;
表示查詢時的「聯結類型」（join type），以下依序是「最佳」至「最差」的各種類型：&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;system&lt;/b&gt;&lt;br /&gt;
表格中僅有一列。這是 const 類型的一個特例。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;const&lt;/b&gt;&lt;br /&gt;
表格中符合條件的只有一列。因為僅有一列，其值在後續的查詢中可被視為常數。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;eq_ref&lt;/b&gt;&lt;br /&gt;
表示在與其它表格的資料列結合時，此表格只有一列會被讀取。當 join 使用到資料表中的所有索引，並索引是 UNIQUE 或 PRIMARY KEY 時才會被用到。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ref&lt;/b&gt;&lt;br /&gt;
表示在與其它表格的資料列結合時，此表格中所有符合的資料列都會被讀出來。這是當 join 只使用到部份鍵值（註），或此鍵非 UNIQUE 或 PRIMARY KEY 時才會用到（依照 join 的條件仍然無法選定單一目標列）。若因此符合的資料列數不多的話，它也算是一種不錯的「聯結類型」。&lt;br /&gt;
&lt;small&gt;註：我們指定「A＋B」欄位為 index key，但查詢時只用到「A」欄位。&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;range&lt;/b&gt;&lt;br /&gt;
表示將在一定範圍內執行搜尋的動作。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;index&lt;/b&gt;&lt;br /&gt;
與 ALL 相同，但只有 index table 會被瀏覽。這通常比 ALL 快，因為 index table 通常比原始資料表來得小。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;All&lt;/b&gt;&lt;br /&gt;
表示這項查詢將對整個原始資料表瀏覽一遍，是最不好的類型。&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;b&gt;possible_keys&lt;/b&gt;&lt;br /&gt;
表示 MySQL 能夠藉由哪些 index 來搜尋目標。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;key&lt;/b&gt;&lt;br /&gt;
表示 MySQL 實際藉由哪個 index 來搜尋目標。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;key_len&lt;/b&gt;&lt;br /&gt;
表示 MySQL 實際使用的 key 長度。若 index key 是由兩個欄位以上複合而成的話，您可以在此看見 MySQL 使用了 index 的多少部份。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ref&lt;/b&gt;&lt;br /&gt;
表示哪個欄位（或常數）將被用來與 key 一起比對。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rows&lt;/b&gt;&lt;br /&gt;
表示 MySQL 粗略估計在查詢的過程中，必須瀏覽的資料列數。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Extra&lt;/b&gt;&lt;br /&gt;
顯示 MySQL 在解決這項查詢工作時的一些附加訊息。例如：「where used」表示 where 子句將會限制某些資料列的輸出。&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-8400755842588100843?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zrmg4AGBTUZ_5Wo9H7u_LFz3n2k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zrmg4AGBTUZ_5Wo9H7u_LFz3n2k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zrmg4AGBTUZ_5Wo9H7u_LFz3n2k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zrmg4AGBTUZ_5Wo9H7u_LFz3n2k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-23T00:43:16.276+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[MySQL] TEMPORARY 臨時表</title><link>http://jax-work-archive.blogspot.com/2011/11/mysql-temporary.html</link><category>MySQL</category><category>工作備忘</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Tue, 22 Nov 2011 08:17:35 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-4065930316008574536</guid><description>最近為了解決一個效率太差的問題而找上這個東西，由於有一個資料表的筆數實在太多了，再加上好幾百個 query 都同時在同一個區段做查詢，剛好可以使用臨時表來處理這個問題，原本查詢需要的時間大概超過一分鐘，現在最多只要 10 秒，刷新後約 2 秒。&lt;br /&gt;
&lt;br /&gt;
MySQL 的臨時表只會存在在 Session 期間，當 Session 結束後就會自動刪除，不同的 Session 的表名稱並不會衝突，所以就算用一樣的名稱也不會出現錯誤，臨時表只能用在 MEMORY,MyISAM,MERGE,或者InnoDB 引擎上。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;-- 透過 SELECT 建立臨時表
CREATE TEMPORARY TABLE my_temp_table ENGINE=MEMORY
SELECT * FROM my_table WHERE col_1 &amp;gt; 1000

-- 為臨時表建立索引
ALTER TABLE my_temp_table
    ADD INDEX (col_1),
    ADD INDEX (col_1,col_2)
&lt;/pre&gt;&lt;br /&gt;
參考資料：&lt;br /&gt;
&lt;a href="http://dev.mysql.com/doc/refman/5.1/en/create-table.html"&gt;MySQL CREATE TABLE Syntax&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://homeserver.com.tw/mysql/mysql-%E8%87%A8%E6%99%82%E8%A1%A8temporary-table/"&gt;mysql temporary table簡介&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://fcamel-life.blogspot.com/2010/11/mysql-temporary-table-on-disk.html"&gt;避免 MySQL 使用 temporary table on disk&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-4065930316008574536?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iefatM-3_kJ8XEE4m_JmBFTRVew/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iefatM-3_kJ8XEE4m_JmBFTRVew/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iefatM-3_kJ8XEE4m_JmBFTRVew/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iefatM-3_kJ8XEE4m_JmBFTRVew/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-23T00:17:35.998+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[PHP] 把多個圖片壓縮封裝並下載</title><link>http://jax-work-archive.blogspot.com/2011/11/php.html</link><category>工作備忘</category><category>PHP</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Tue, 22 Nov 2011 07:31:19 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-3802182202218725971</guid><description>&lt;pre class="php" name="code"&gt;&amp;lt;?php
$fileList = array(
    '/var/www/pics/001.jpg',
    '/var/www/pics/002.jpg',
    '/var/www/pics/003.jpg',
    '/var/www/pics/004.jpg',
    '/var/www/pics/005.jpg',
    '/var/www/pics/006.jpg',
);


/*建立臨時壓縮檔*/
$file = tempnam("tmp", "zip");
$zip = new ZipArchive;
$res = $zip-&amp;gt;open($file, ZipArchive::CREATE|ZipArchive::OVERWRITE);
if ($res!==true) { exit('壓縮錯誤');}

foreach ($filePathList as $filePath){
    $zip-&amp;gt;addFile($filePath, $fileName);
}
$zip-&amp;gt;close();

ob_end_clean();
header('Content-type: application/octet-stream');
header('Content-Transfer-Encoding: Binary');
header('Content-disposition: attachment; filename=pics_list.zip');

readfile($file);
unlink($file); 
exit;
&lt;/pre&gt;&lt;br /&gt;
參考連結：&lt;a href="http://php.net/manual/en/class.ziparchive.php"&gt;PHP: ZipArchive - Manual&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-3802182202218725971?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FNZTqiPpSR0cQx9SqsOWIS-RQtU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FNZTqiPpSR0cQx9SqsOWIS-RQtU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FNZTqiPpSR0cQx9SqsOWIS-RQtU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FNZTqiPpSR0cQx9SqsOWIS-RQtU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T23:31:19.131+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>正三角體中心至頂點間距</title><link>http://jax-work-archive.blogspot.com/2011/11/blog-post.html</link><category>工作備忘</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Thu, 10 Nov 2011 08:24:47 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-6739089160679430331</guid><description>&lt;a href="http://4.bp.blogspot.com/-UL5e3oXeWwM/Trv5_ilUEZI/AAAAAAAAKAQ/ZJzD5REsgbE/s1600/%25E6%25AD%25A3%25E4%25B8%2589%25E8%25A7%2592%25E9%25AB%2594%25E4%25B8%25AD%25E5%25BF%2583%25E8%2587%25B3%25E9%25A0%2582%25E9%25BB%259E%25E9%2596%2593%25E8%25B7%259D.png" &gt;&lt;img alt="Triangle body center to vertex distance" src="http://4.bp.blogspot.com/-UL5e3oXeWwM/Trv5_ilUEZI/AAAAAAAAKAQ/ZJzD5REsgbE/s800/%25E6%25AD%25A3%25E4%25B8%2589%25E8%25A7%2592%25E9%25AB%2594%25E4%25B8%25AD%25E5%25BF%2583%25E8%2587%25B3%25E9%25A0%2582%25E9%25BB%259E%25E9%2596%2593%25E8%25B7%259D.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-6739089160679430331?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6hbV7_8tfEoFkeMhKAkpHiEBlnM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6hbV7_8tfEoFkeMhKAkpHiEBlnM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6hbV7_8tfEoFkeMhKAkpHiEBlnM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6hbV7_8tfEoFkeMhKAkpHiEBlnM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T00:24:47.082+08:00</app:edited><media:thumbnail url="http://4.bp.blogspot.com/-UL5e3oXeWwM/Trv5_ilUEZI/AAAAAAAAKAQ/ZJzD5REsgbE/s72-c/%25E6%25AD%25A3%25E4%25B8%2589%25E8%25A7%2592%25E9%25AB%2594%25E4%25B8%25AD%25E5%25BF%2583%25E8%2587%25B3%25E9%25A0%2582%25E9%25BB%259E%25E9%2596%2593%25E8%25B7%259D.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[PHP] 以活躍指標顯示日期時間</title><link>http://jax-work-archive.blogspot.com/2011/10/php_6083.html</link><category>工作備忘</category><category>PHP</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Thu, 20 Oct 2011 00:43:43 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-4528096672425046231</guid><description>&lt;pre class="php" name="code"&gt;function ShowTimeLive($date) {
    $diff = time() - strtotime($date);
    
    if($diff &amp;lt; 60){
        return $diff.' 秒前';
    }elseif($diff &amp;lt; 3600){
        return round($diff/60).' 分鐘前';
    }elseif($diff &amp;lt; 86400){
        return round($diff/3600).' 小時前';
    }elseif($diff &amp;lt; 432000){
        return round($diff/86400).' 天前';
    }else{/*超過5天*/
        return date('n月j日',strtotime($date));
    }
}

/*demo*/
echo ShowTimeLive('2011-10-13 21:14:42');
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-4528096672425046231?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7mEO67qvJmN_ySRPNlnGA0GrDW0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7mEO67qvJmN_ySRPNlnGA0GrDW0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7mEO67qvJmN_ySRPNlnGA0GrDW0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7mEO67qvJmN_ySRPNlnGA0GrDW0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-20T15:43:43.976+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[PHP] 使用簡易單位顯示檔案大小</title><link>http://jax-work-archive.blogspot.com/2011/10/php_20.html</link><category>工作備忘</category><category>PHP</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Thu, 20 Oct 2011 00:33:48 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-7140466137650008779</guid><description>&lt;pre class="php" name="code"&gt;function ShowBytes($size) {
    $size=doubleval($size);
    $sizes = array(
        " Bytes", 
        " KB", 
        " MB", 
        " GB", 
        " TB"
    );
    if ($size == 0) { 
        return('n/a'); 
    } else {
        $i = floor( log($size, 1024) );
        return (round( $size/pow(1024, $i), 2) . $sizes[$i]); 
    }
}

/*demo*/
for($size=0; $size&amp;lt;3000000; $size+=512) {
    echo $size,' =&amp;gt; ', ShowBytes($size),'&amp;lt;br /&amp;gt;';
}
/*
0 =&amp;gt; n/a
512 =&amp;gt; 512 Bytes
1024 =&amp;gt; 1 KB
1536 =&amp;gt; 1.5 KB
2048 =&amp;gt; 2 KB
2560 =&amp;gt; 2.5 KB
3072 =&amp;gt; 3 KB
3584 =&amp;gt; 3.5 KB
*/
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-7140466137650008779?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QQKibPOCgctM4o4EEjMqRfTlKeI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QQKibPOCgctM4o4EEjMqRfTlKeI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QQKibPOCgctM4o4EEjMqRfTlKeI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QQKibPOCgctM4o4EEjMqRfTlKeI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-20T15:33:48.092+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[PHP] 格式化單位秒數</title><link>http://jax-work-archive.blogspot.com/2011/10/php.html</link><category>工作備忘</category><category>PHP</category><author>noreply@blogger.com (胡忠晞 Jax)</author><pubDate>Thu, 20 Oct 2011 00:26:45 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5946530704742130970.post-7229124588758059860</guid><description>只要將秒數減去 28800 之後，丟進 date() 就OK了，不過只能顯示到小時，至於要有天數的部分就不能這樣做了，只能用在一些短時間的顯示。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="php" name="code"&gt;for($sec=0; $sec&amp;lt;30000; $sec+=30) {
    echo $sec,' =&amp;gt; ', date('H:i:s',$sec-28800),'&amp;lt;br /&amp;gt;';
}
/*
0 =&amp;gt; 00:00:00
30 =&amp;gt; 00:00:30
60 =&amp;gt; 00:01:00
90 =&amp;gt; 00:01:30
120 =&amp;gt; 00:02:00
150 =&amp;gt; 00:02:30
180 =&amp;gt; 00:03:00
*/
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5946530704742130970-7229124588758059860?l=jax-work-archive.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HuZCbVIwB2JyGknU8oltYz3vyBA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HuZCbVIwB2JyGknU8oltYz3vyBA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HuZCbVIwB2JyGknU8oltYz3vyBA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HuZCbVIwB2JyGknU8oltYz3vyBA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-20T15:26:45.891+08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><media:rating>nonadult</media:rating></channel></rss>

