• yam天空
  • 天空部落
  • 新聞
  • 登入 註冊 網誌隨便逛
  • 加入天空部落

網誌 相簿 影音 PK吧! Honda嬉遊趣 設計裝潢‧宅樂活 大買家最便宜
即時新聞 影音新聞 新聞專輯 政治新聞 財經新聞 娛樂新聞 運動新聞 兩岸新聞 科技新聞
管理介面 發表網誌 發表日記 上傳相片 上傳影音 管理留言
推薦這個部落格: 195

A HA! 心情雜物間

專供個人碎碎念的心得小屋,或是好物分享~~ ^_^

日記 |網誌 |相簿 |好友 |留言板
【密碼】64-bit OS 相關 | 主頁 | [VC] Change mouse cursor
March 17, 2009
閒聊 CGI(Common Gateway Interface)程式以文找文
csylvia 在天空部落發表於17:04:30 | 網頁相關
鼓勵此網誌:0 

最近工作要用到 CGI,所以稍微研究一下。

之前有用 CGI 寫個小程式,
再加上每次搜尋 CGI 教學內容幾乎大同小異,
所以一直以為 CGI 是「某個程式語言」,
其實不是......


CGI(Common Gateway Interface)其實是泛指所有伺服端的程式,
包括 PHP、Perl、ASP,甚至是 C、C++、JAVA 都是,
因為常見用 Perl 寫 CGI,難怪我之前老困惑到底 Perl 跟 CGI 有什麼關係~~XD"
(基本上就跟困惑 PHP 和 ASP 為什麼會扯在一起一樣...bb)

今天終於解惑,我還真是後知後覺(打),
而且「CGI」也不等於「CGI 程式(CGI scripts)」,
這跟我之前研究「ActiveX」其實不等於「ActiveX control」一樣(註)~~XD

 

這篇網頁有詳盡的說明:

...CGI 是 Common Gateway Interface 的縮寫,它可以連結網路主機端與瀏覽器端,使其能夠作檔案存取等動作的一種介面,CGI 程式就是可達成前述動作的程式,這是一種通稱而不是指某種特定的程式,CGI 程式可以使用多種電腦語言來撰寫,依據作業平台的不同最常見的有 C、C++、Perl、PHP、TCL、JAVA、VB...等。

......

在網路上較常見的 CGI 程式多數是使用 Perl 語言撰寫的,因為它幾乎可說是專門為了撰寫 CGI 程式而量身打造的一種電腦語言,而且可使用的平台也較廣,如果是使用 VB 來撰寫 CGI 程式,那就只能在 Windows 平台上執行,若使用 C 語言來撰寫 CGI 程式,那麼就必須要在不同的作業平台上重新編譯過,否則是不能正常運作的。

Perl 語言是一種解譯式 (或稱直譯式) 的電腦語言,因此是以原始碼的型態散播的,它的語法基本上與 C 極為類似,許多學習 CGI 程式的人都是由觀摩他人撰寫的 Perl 程式,進而修改成自己想要的介面或功能來入門的,Perl 比較特別的是正規表示式 (Regular Expressions),功能非常非常的強大,但是因為是以符號所組成的一些處理規則,所以常常有初學者因為懶得查閱文件所以被它給打敗,如果您能在參考他人的程式時勤查文件來對照,其實學習起來並不難!

但是網路上雖然較常看到以 Perl 語言所撰寫的 CGI 程式,但是 CGI 與 Perl 並不等於是同義字,請不要將名詞弄混了,如果是請教有關 Perl 語言所撰寫的程式問題,就寫明請教的是有關 Perl 語言的語法或流程等,"CGI" 與 "CGI 程式" 也一樣不等於是同義字,"CGI" 一詞僅指 "通訊協定",而 "CGI 程式" 才是指 "程式"。

......

 

這樣說起來,CGI 程式就是一般泛稱的「網頁程式」(相對於應用程式)了嘛!
喔喔~~一時要轉變觀念還真不習慣~~XD

而在這篇也有精闢的解釋:

什麼是 CGI ? 什麼是 CGI 程式?

CGI 是 Common Gateway Interface 的簡稱,一般中譯為:共通閘道介面。

Common 是指共通的、不限於一種作法的意思,在這裡指的是語言的獨立性,換言之,可以用任何一種程式語言來實作。

Gateway 是說伺服器的應用能力是經由擴充得到的,它將查詢等要求交由外部程式處理,處理完了之後,再將結果傳回。

Interface 是指一種介面的意思,符合此一介面標準,便可以輕鬆地製作外部程式,而無需去擔心或處理低階的問題。

......

CGI 就是提供給外部程式的一種介面,只要符合此一介面標準,程式設計師便可以輕鬆地使用該平台上支援的任何一種程式語言來撰寫外部程式,於是我們說:凡是符合 CGI 介面標準的外部程式,就稱之為 CGI 程式。

撰寫 CGI 程式,常見的語言有 Perl、Python、C、C++、VB,甚至某些 UNIX 中的 shell script 都有人使用。

我們可以這樣來看待 CGI 以及 CGI 程式:

CGI 程式是 WEB 伺服器應用能力的擴充(Extension),而 CGI 則是此一擴充能力的介面,熟悉瞭解此一介面的原理及運作方式,我們便可以為 WEB 伺服器建立即時互動的能力,以滿足客戶端的要求。

 

CGI簡介中也有不錯的說明:

......CGI程式可以根據使用者輸入的要求自動產生HTML格式的資料。因為輸入資料是由WWW server負責接收,並非CGI程式本身,故得找出一個有效率的方法,來做使用者輸入參數和產生HTML文件程式間的溝通工作。 CGI本身制訂的標準有提到可以藉由環境變數來達成這個目的,而且CGI程式也有能力取得現存在各類資料庫裡的資料。這就是為什麼我們稱之為Common Gateway Interface,因為CGI程式通常就像橋樑或閘道一般,溝通著非WWW系統和WWW server (這和下面所說的Web server、HTTP server是一樣的,都是指一個架有HTTPd的伺服器)。

......一部Web server上一定會跑起HTTPd,這是HTTP的server程式(daemon)。由於HTTPd牽涉到系統設定問題,所以除非你是系統管理者或是自己架一台server跑起HTTPd,否則一般使用者是沒有權跑自己寫的CGI程式的。不過現在另外有個程式叫CGI wrap,它可以透過一種特殊的方法讀取userhome/www/cgi-bin裡的CGI程式,並且以使用者的身份來執行這個CGI程式,所以不虞有被破站的危險。

......使用者用瀏覽器link到一個CGI程式時,瀏覽器會透過HTTP這個通訊協定,送出一個請求(require)給遠端(remote)的Web server,Web server就會跑一個HTTPd process,這個process會去找指定的目錄下有沒有這個CGI程式,如果有的話HTTPd會啟動一個child process來跑這個CGI程式,也因此繼承了HTTPd所有的環境變數設定。這也就是說使用者所輸入的要求會經由HTTP通訊協定傳送到Web server的HTTPd,再經由環境變數或標準輸入裝置(STDIN)傳遞給CGI程式。

 

  

 

【CGI程式運作流程】

 

在找尋 CGI 相關資料的過程中也學到不少東西,
像是 WIKI 提到

...The user agent requests the name of an entry; the server will retrieve the source of that entry's page (if one exists), transform it into HTML, and send the result back to the browser or prompt the user to create it. ...

From the Web server's point of view, certain locators, e.g. http://www.example.com/wiki.cgi, are defined as corresponding to a program to execute via CGI. When a request for the URL is received, the corresponding program is executed.

 

 在 CGI 介紹中也提到

在觀賞CGI網頁時, 同樣地瀏覽器會和 Web 主機上的 Http server 建立一個連線,  但是接著 Http server 不是去抓檔案, 而是去啟動一個 CGI 程式, 然後將 CGI 程式所產生的內容當成 HTML 傳回給使用者瀏覽器.

 

也就是 CGI script 在伺服器端是視為一個「可執行檔」而非單純檔案,
當使用者端提出 request 後,
server 會去「啟動」對應的 CGI 程式,
然後將該程式輸出的網頁內容傳回給使用者端呈現在瀏覽器上。

這個觀念對我而言很新穎,
但其實前幾天就有跟同事討論到這件事情,
所以放上來跟大家分享。

 

CGI程式入門中有很完整的介紹:

......還記得HTML語法中有個<FORM>標籤嗎? 這就是CGI程式主要應用的地方。當你按下submit按鈕後,瀏覽器會將你填好的資料傳送到WWW server上去,若HTTPd發現這是一個CGI request,就會藉由CGI去呼叫指定的程式,並建立起互相溝通的管道。第一種可互相溝通的管道就是環境變數:由於CGI程式是由HTTPd所呼叫而產生的一個子行程(child process),所以CGI程式繼承了HTTPd所有的環境變數,因此也得到由client端的瀏覽器傳過來的一些資訊。

......

HTTPd不但將自己的環境變數傳給CGI程式,它還將CGI程式的標準輸入、輸出(STDIN、STDOUT)重新導向,使得HTTPd能將<FORM>裡面的資料藉由STDIN傳遞給CGI程式,而CGI程式也能藉由STDOUT將程式執行結果傳遞給HTTPd show在瀏覽器上。這就是CGI所提供的第二個溝通管道。

還記得<FORM>標籤有個method屬性,它有二種值:get和post,就分別代表著上述二種溝通管道: method=get是藉由環境變數來傳遞資料,一旦指定了這種方法,瀏覽器會將你填入<FORM>裡的資料附加在action屬性所指定的CGI程式名稱後面,並以"?"隔開,當HTTPd收到這個request後會將"?"後面的字串存放在QUERY_STRING這個環境變數中,於是CGI程式就可以透過這個環境變數取得<FORM>裡面的資料了。

但是,環境變數的大小是有一定的限制的,當需要傳送的資料量大時,儲存環境變數的空間可能會不足,造成資料接收不完全,甚至無法執行CGI程式。因此後來又發展出另外一種方法:method=post,也就是利用I/O重新導向的技巧,讓CGI程式可以藉由STDIN和STDOUT直接跟瀏覽器溝通。當我們指定用這種方法傳遞<FORM>裡面的資料時,HTTPd收到資料後會先放在一塊輸入緩衝區中,並且將資料的大小記錄在CONTENT_LENGTH這個環境變數,然後呼叫CGI程式並將CGI程式的STDIN指向這塊緩衝區,於是我們就可以很順利的透過STDIN和環境變數CONTENT_LENGTH得到所有的資料,再沒有資料大小的限制了。 

 

 真是學到好多~~@0@

 

 

 

 【參數傳遞的方式】

 

寫過網頁程式的人都知道,
呼叫 CGI script 時傳遞參數的方式有兩種:GET 和 POST,
也可能知道這兩個方式的差別之一在於參數資料的長度。

GET 參數長度的限制有人說 256 bytes,也有人說 1K 或 512 bytes,
但 IE support 上有寫

Microsoft Internet Explorer has a maximum uniform resource locator (URL) length of 2,083 characters. Internet Explorer also has a maximum path length of 2,048 characters. This limit applies to both POST request and GET request URLs.

If you are using the GET method, you are limited to a maximum of 2,048 characters, minus the number of characters in the actual path.

However, the POST method is not limited by the size of the URL for submitting name/value pairs. These pairs are transferred in the header and not in the URL.

 

也就是 IE 上長度的限制為 2048。

至於其他的瀏覽器呢?
WWW FAQs: What is the maximum length of a URL? 整理了所有瀏覽器的 URL 長度限制喔!
因為內容有點長,所以有興趣者請點回原頁觀看或點擊這裡。

Microsoft Internet Explorer (Browser)

Microsoft states that the maximum length of a URL in Internet Explorer is 2,083 characters, with no more than 2,048 characters in the path portion of the URL. In my tests, attempts to use URLs longer than this produced a clear error message in Internet Explorer.

Firefox (Browser)

After 65,536 characters, the location bar no longer displays the URL in Windows Firefox 1.5.x. However, longer URLs will work. I stopped testing after 100,000 characters.

Safari (Browser)

At least 80,000 characters will work. I stopped testing after 80,000 characters.

Opera (Browser)

At least 190,000 characters will work. I stopped testing after 190,000 characters. Opera 9 for Windows continued to display a fully editable, copyable and pasteable URL in the location bar even at 190,000 characters.

Apache (Server)

My early attempts to measure the maximum URL length in web browsers bumped into a server URL length limit of approximately 4,000 characters, after which Apache produces a "413 Entity Too Large" error. I used the current up to date Apache build found in Red Hat Enterprise Linux 4. The official Apache documentation only mentions an 8,192-byte limit on an individual field in a request.

Microsoft Internet Information Server

The default limit is 16,384 characters (yes, Microsoft's web server accepts longer URLs than Microsoft's web browser). This is configurable.

Perl HTTP::Daemon (Server)

Up to 8,000 bytes will work. Those constructing web application servers with Perl's HTTP::Daemon module will encounter a 16,384 byte limit on the combined size of all HTTP request headers. This does not include POST-method form data, file uploads, etc., but it does include the URL. In practice this resulted in a 413 error when a URL was significantly longer than 8,000 characters. This limitation can be easily removed. Look for all occurrences of 16x1024 in Daemon.pm and replace them with a larger value. Of course, this does increase your exposure to denial of service attacks.

Recommendations

Extremely long URLs are usually a mistake. URLs over 2,000 characters will not work in the most popular web browser. Don't use them if you intend your site to work for the majority of Internet users.

 

所以建議 URL 長度不要超過 2000 characters,
如果參數內容很長,最好還是採用 POST 比較好~~ ^^

為什麼 GET 會有長度限制?

因為它是 append 在網址(URL)之後,以 Key-Value 成對的方式傳送,
兩筆以上的參數則以 & 隔開,
格式如下
 

http://CGI_URL?param1=value1&param2=value2&...


所以會受到 URL 長度的限制,
太長的部分或許會被截掉,
端看瀏覽器和伺服器端的處理方式。

伺服器端會把用 GET 方法傳進的參數設成環境變數,
這我也是最近才從同事那裏得知,
之前一直以為所謂的環境變數是指「伺服器端的環境」,例如架設平台、版本之類,
原來不只是這樣啊~~XD|||

在 [教學] CGI 程式設計 - CGI 語言 - 電腦程式設計 - 伊莉討論區中描述:  

 以 GET 的方式傳遞時,伺服器會將資料放入環境變數 QUERY_STRING 之中,我們必須由這個環境變數來取得資料。

 

CGI 介紹中也有提到:

 Http server 會將參數串設成環境變數 QUERY_STRING, CGI 程式只要將這個環境變數抓出來用即可, 不過由於是透過環境變數在傳遞這個參數串, 所以會有長度上的限制.

 

總之,GET 參數會被伺服器存入環境變數就是了,
而環境變數也有空間的限制。

 

至於 POST 方法,
則是透過瀏覽器 header 傳輸而非 append 在 URL 上,
因此不會受到 URL 長度所限制,
該參數會被放到伺服器的標準輸出入機制中,藉此傳給 CGI script,
至於資料的長度則存在 CONTENT_LENGTH 中。

在 [教學] CGI 程式設計 - CGI 語言 - 電腦程式設計 - 伊莉討論區的描述:

 POST 利用 HTML 語法的 Form 表單,由瀏覽器將鍵值傳給伺服器,並放入伺服器的標準輸出入機制中,由於它沒有 GET 的缺點,因此可以傳送較多的資料,一般而言,我們大多使用 POST 的方式。欲使用 POST 方式,要在表單中將方法 (method) 設為 POST 才行。以 POST 的方式傳遞時,我們必須由標準輸出入來取得資料,資料的長度,伺服器將它記錄在環境變數 CONTENT_LENGTH 中。

 

 CGI 介紹中的描述:

 Http server 會將參數串透過標準輸入傳給 CGI

 

對這兩個方法有更進一步的了解了~~ ^^

 

 

 

【CGI Script Sample - Perl】

來個 Hello World 程式,
因為之前說過,目前看到的是以 Perl 來寫 CGI 為大宗,
所以這是網路上常見的 Perl 版本。

以下範例來自[教學] CGI 程式設計 - CGI 語言 - 電腦程式設計 - 伊莉討論區。

 

 #! /usr/bin/perl     
# 上面這一列用來指出 perl 的路徑,注意:一定要是第一列喔!
# 第二列開始,若有出現 # 表示該列為註解,Perl 將不會執行它

# 這是 MIME 表頭,用來告訴瀏覽器要送出的資料型態是什麼?
# 一定要寫出這一行,否則會出現 Error 500 錯誤
# 注意:每列命令用 ; 做為結束!
print "Content-type:text/html\n\n";

# 接下來印出欲顯示的網頁內容
print "<html><head><title>Hello CGI!</title></head>";

print "<body bgcolor='white'>";

print "<h1>Hello, world!!</h1>";

print "</body></html>"; 

 

不難。

麻煩的是伺服器端環境的架設,以及檔案的屬性設定,
由於這跟使用哪種語言來寫 CGI Script 有關,
這裡就不再說明,
有興趣可以到網路上搜尋一下。(笑)

 

 

 

【CGI程式的簡略比較】

資料內容整理自CGI基本概念、Common Gateway Interface - 維基百科,自由的百科全書、Perl語言簡介,
不一定全對,只是先記錄下來提供參考。

常見的 CGI Script 有以下幾種:

 

1. Perl

是現今大多數的人所使用之 CGI 撰寫語言,最大好處就是它的字串處理能力,其有很多簡便指令可以處理其他語言不易做到的字串處理,例如 split, join......及強大的 regular expression(這真的是超厲害!),而且不用宣告一些繁雜的變數。

缺點是因它講求「實用性」、「方便性」還有「安全」,而非「效率」,
所以對速度並不是很要求,或許還可能浪費記憶體和 CPU......= =b


2. C/C++

C/C++ 所撰寫的缺點就是其變數之宣告(不過這算缺點嗎?嗯......= =)

最大的優點就是它是編譯式(Compile),而非像 Perl 的直譯式(Interpret)程式語言,
所以不必每次 request 時就要新生成一個程序的副本來運行,
運行速度更快、對作業系統的負荷更小。


3. Visual Basic / DOS 的 BATCH

最大的缺點就是要在 MicroSoft 作業系統下才能運作。 

 

另外,
據說 PHP 目前最多人使用,有超越 Perl 的跡象;
Python 似乎性能最好(就 interpret 程式而言),比較適合圖形介面方面的開發。

不過個人覺得這是應用層面不同,
每種語言都有各自的強項,
像如果做字串處理,很少有語言贏得過 perl,
比效率,那應該只有編譯式語言強,
這是比較的立基點不同而已,
所以還是挑自己想學的來學吧~~:)

 

參考資料:

  • 谈谈cgi的速度问题---比较asp,php,perl最流行的cgi编写语言。
  • PHP perl Python 到底是什么关系? Web 开发 / PHP - CSDN社区
  • perl, python, php到底都能干什么?·百家电脑学院

 

 

 

【C++ for CGI】

上面提過我之前就有寫過 CGI 小程式,
不過是用 Perl 寫,
而我每次搜尋 CGI 教學也幾乎都是以 Perl 為主的網站,
所以才會有「CGI 和 Perl」到底有什麼關係的困惑。

這次會想研究 CGI,
主要也是發現公司竟然是用 C++ 寫 CGI,
才讓我驚訝到趕緊上網查 CGI 到底是什麼意思~~XD"

語法很簡單,就是一般的 C++ 語法,
用標準輸出入就可運作:

 #include <iostream.h>

void main()
{
          // Every CGI script must first output a content-type header
          // The two newlines following the header tells the server 
          // where the headers end and where the data begins.
          cout << "Content-type: text/plain" << endl << endl;
  
          // output plaintext
          cout << "Hello, World!";
}

 

或以 HTML 格式輸出:

 

 #include <iostream.h>

void main()
{
          cout << "Content-type: text/html" << endl << endl
          << "<html>" << endl
          << "<head>" << endl
          << "<title>CGI Test</title>" << endl
          << "</head>" << endl
          << "<body>" << endl
          << "<h1><em>" << endl
          << "Hello, World!" << endl
           << "</em></h1>" << endl
          << "</body>" << endl
          << "</html>";
}

 

以上範例來自 cgi and c++。

但我比較困惑的是,如何把這些 C++ code 編譯成 CGI 檔?

搜尋了一下,發現網路上還挺多用 C++ 寫 CGI 的資料,
在這篇就有解釋:

 

 In order to set up a C program as a CGI script, it needs to be turned into a binary executable program. This is often problematic, since people largely work on Windows whereas servers often run some version of UNIX or Linux. The system where you develop your program and the server where it should be installed as a CGI script may have quite different architectures, so that the same executable does not run on both of them.

......

You need to compile and load your C program on the server (or, in principle, on a system with the same architecture, so that binaries produced for it are executable on the server too).

......

 

嗯......總之要編譯,這我知道,
問題是要怎麼編譯成 CGI 檔?(好像跳針一樣)
其實這網頁的下面有講,
似乎用 gcc 就可以 compile 了,
看起來真的有些複雜,
不過應該是我不熟的關係啦,
有空就來仔細研究~~= =+

 

參考資料:

  • cgi and c++ 
  • Getting Started with CGI Programming in C
  • Open Source C++ Libraries for CGI Development

 

 

雖然我在學校主修網路程式,
但很多觀念我還是這次第一次學到,
果然是活到老學到老啊~~XD"

儘管從很多教學網頁中汲取知識,
但也有看到錯誤解釋的網頁,
像 CGI 介紹開頭寫著:

 

 一般使用者透過瀏覽器觀賞網頁時, 瀏覽器會和 Web 主機上的 Http server 建立一個連線, 然後 Http server 會到一堆事先做好的 HTML 檔案中, 找出使用者要看的網頁, 回傳給瀏覽器, 讓使用者觀賞. 這種方式, 由於 HTML 檔案是靜態的, 所以使用者看過幾次就沒興趣了.因此就有人想到要透過程式來產生 HTML 內容, 這樣就不會一成不變了, 這就是 CGI 的來由.

 

HTML 的檔案是靜態的沒錯,
使用者看過幾次就沒興趣了或許也沒錯,
但這不是 CGI 的來由。

即使用 CGI 建立網頁,
靜態的 HTML 還是靜態的,
不會因為用 CGI 建立就變動態的。

網頁會變成動態呈現主要是使用 DHTML(Dynamic HTML,DOM+JavaScript+HTML)技術,
不論是 HTML、JavaScript 還是 CSS 都是由瀏覽器來解譯(Interpret),
這也是為什麼寫網頁時常常要注意瀏覽器廠牌與版本的原因;
也因為 HTML 檔案是在客戶端被解譯,因此無法 access 到伺服器端的資料(例如資料庫),
所以才需要 CGI 程式,
透過 CGI 能讓客戶端的網頁來 access 伺服器端的資料。

CGI 的來由是讓客戶端能跟伺服器端「互動」,而非產生「動態網頁」。

網頁上的這段文字顯示出觀念上的混淆,
所以那張「CGI 運作架構」圖想當然耳也是錯誤的,
「盡信書不如無書」,大家參考網路教學文章時也要多注意喔~~ ^^

 

  

 (註)根據定義,ActiveX is a term Microsoft uses to describe a number of its COM technologies,而 ActiveX controls 則是 small program building blocks that can be used to create distributed applications that work over the Internet through web browsers (Another term for "OLE Object" or "COM Object),但文件中最後有提到「However, when most people say "ActiveX", they are really referring to ActiveX controls.」,也就是現在都混用在一起了~~XD

 

  • CGI - Wikipedia, the free encyclopedia(CGI 不僅是 Common Gateway Interface 的縮寫)
  • Common Gateway Interface - Wikipedia, the free encyclopedia
  • Common Gateway Interface - 維基百科,自由的百科全書(用簡體中文翻譯的名詞實在讓人難以下嚥......= =|||b)
  • Web Hosting Technologies
  • CGI&Perl
  • CGI
  • CGI教學
  • Perl/CGI 教學
  • [教學] CGI 程式設計 - CGI 語言 - 電腦程式設計 - 伊莉討論區
  • CGI 介紹

 

留言 (1) | 引用 (0) | 人氣 () | 轉寄
此分類上一篇:[CSS] 強迫斷行 | 主頁 | 此分類下一篇:無障礙網頁規範(部分)
引用 (你可以針對此文寫一篇屬於自己的blog/想法,並給作者一個通告)
引用
留言 (1筆)
1.
不過現在應該很少用CGI了吧

若是存取資料庫的話,COM也可以做到
其他功能也沒有問題
但COM或許會受限於使用的系統
板主回覆:
現在 CGI 還是很熱門啊,
要寫網路程式一定還是會用到 CGI,
我看 PHP、ASP 的熱潮不減,
甚至 Ruby on Rails 也有逐漸追上的趨勢,
CGI 短期內依然是寫網路程式的主力哪。
Wesley 於 2009-03-19 17:26:28 留言 |

發表你的留言 (字數限制 最多 2000 個中文字)
私密留言: 是 否
Name:





是 否
內容:
系統公告
系統工具


Sylvia 小檔案
個人圖檔
ID:csylvia
暱稱:Sylvia
地區:臺北市
  • 訂閱 |
    • 我要訂閱此部落格的
    • 日記
    • 網誌
    • 相簿
  • 好友 |
    • 好友功能
    • 觀看好友列表
    • 觀看人緣列表
  • 人氣 |
  • 簡介 

文章分類
  • 生活資訊 (6)
    • 螢養保健 (11)
    • 小辭典 (13)
    • 飲食美味 (2)
    • 美容美髮 (2)
    • 體操按摩 (5)
    • 有用資訊 (10)
  • 資源連結 (4)
    • 資源整理 (12)
    • 噗浪 (8)
    • 介紹&推薦 (45)
    • BLOG小玩意 (44)
  • 真人電影 (4)
    • 電影介紹&推薦 (20)
    • 西洋電影 (35)
    • 東洋電影 (2)
    • 國片電影 (4)
  • 語言筆記 (3)
    • 英文 (4)
    • 其他語言 (1)
    • 日文 (6)
  • 創作欣賞 (7)
    • 串珠飾品 (12)
    • 毛線球 (2)
    • 文章 (1)
    • 設計 (2)
    • 不織布 DIY (5)
    • 其他創作 (1)
    • CG (8)
  • 電視影集 (3)
    • 綜藝節目 (7)
    • 紀錄片/連續劇 (11)
    • 經典影集 (12)
  • 科技資訊 (19)
    • C/C++ (58)
    • AJAX (37)
    • Code::Blocks 相關 (29)
    • WM5.0 (26)
    • Symbian (26)
    • ActiveX (22)
    • AIR (2)
    • ASP (9)
    • JavaScript (29)
    • FLASH (9)
    • 網頁相關 (8)
    • PHP (3)
    • Database (3)
    • 其他 (29)
    • Install (2)
    • SOAP (1)
    • VLC (14)
    • Linux 相關 (2)
    • Batch File (8)
  • 動漫遊戲 (3)
    • 西洋動漫 (9)
    • 其他動漫 (1)
    • 日本動漫 (22)
  • Amway (3)
    • 其他筆記 (0)
    • 智囊團 (0)
    • 紀錄 (4)
  • 個人記事 (6)
  • 書籍藝文 (29)
  • 話題探討 (28)
csylvia的最新的回應
  • uhptpbl:
    加油~ 很好~ ...
  • nhksgchzjz:
    感謝分享~ ...
  • uytanbslnw:
    不錯的BLOG~&my...
  • xgaamotkm:
    不錯的BLOG~ ...
  • obnsdm:
    加油~ ...
  • Wesley:
    好久以前的東西,都忘光...
  • Wesley:
    妳真是好人
  • jamie:
    我也有類似的經驗,...
  • 小豬仔:
    Hi Sylvia,...
  • Anne:
    NANA...
網站集結
迷你窩 miniworld
aNobii 書櫃
珍惜台灣
天下雜誌綠色行動4力串聯貼紙



台灣是我的國家

台灣貨‧暢其流
該推就是要推

禁虐

搶救生命 棄兒不捨!
天下雜誌台灣不願面對的真相貼紙



Chine Free

力挺泰山串聯貼紙
天氣
台北
-
RANKING
Google PageRank Checker



Free PageRank Meter for blog.webs-tv.net/csylvia
人氣指數
當日人次:
累積人次:
網誌搜尋
搜尋:
參觀者
RSS 訂閱


RSS 訂閱
RSS2
ATOM
贊助商
其它資訊
本部落所刊登之內容,皆由作者個人所提供,不代表 yam 天空 本身立場。
POWERED BY
POWERED BY 天空部落
會員登入│免費註冊