這是最近受到寵幸的網誌,因為速度快、又漂亮、貼程式碼也好看
http://mac1.ccns.ncku.edu.tw/wordpress/
順便列一下之前用過,但是現在不用的XDD
http://www.wretch.cc/blog/iwhiori
http://magicalloveshe.blogspot.com[就是你現在待的地方啦 :) ]
http://sites.google.com/site/iwhiori
新家。
http://sites.google.com/site/iwhiori
使用雲端系統節能減碳、又可以省去自己維護機器的費用
所以我用了google.sites
相較於Blog,sites可以有系統的建立自己的紀錄,比較符合我的需求!
使用雲端系統節能減碳、又可以省去自己維護機器的費用
所以我用了google.sites
相較於Blog,sites可以有系統的建立自己的紀錄,比較符合我的需求!
如何在blog貼出程式碼?
程式碼貼出的時候,常常會遇到被瀏覽器轉換成程式碼的結果,而無法理想的秀出原始的程式碼,基本一點的作法有,在程式碼的前後加上<pre></pre>,讓程式碼原封不動的印出。
但是有些blog似乎不理<pre></pre>
這時候就可以利用編碼的網站,將您的code編碼之後在貼上,省去會被編譯器轉換的困擾
下面提供一個可以轉換code的網站作參考
http://www.opinionatedgeek.com/DotNet/Tools/HTMLEncode/Encode.aspx
但是有些blog似乎不理<pre></pre>
這時候就可以利用編碼的網站,將您的code編碼之後在貼上,省去會被編譯器轉換的困擾
下面提供一個可以轉換code的網站作參考
http://www.opinionatedgeek.com/DotNet/Tools/HTMLEncode/Encode.aspx
checkbox經submit送出勾選的資料
ftp.php用來取得ftp上面擁有的檔案,並列出,勾選後送出給del.php
del.php接收到值之後印出,然後執行刪除的指令(本範例中沒有寫出刪除的語法)
ftp.php
--
del.php
--
del.php接收到值之後印出,然後執行刪除的指令(本範例中沒有寫出刪除的語法)
ftp.php
--
<?php
$ftp_fd = ftp_connect("myweb.ncku.edu.tw");
ftp_login($ftp_fd, "xxxx","xxxx");
$list = ftp_nlist($ftp_fd, "fresh_night");
printf("<form action=\"del.php\" method=\"POST\">\n");
foreach($list as $key => $value){
printf("%02d <input type=\"checkbox\" name=\"file[]\" value=\"%s\">%s\n", $key, $value, $value);
echo "<br>";
}
printf("<input type=submit name=sub value=刪除所選檔案>");
printf("</form>");
?>
del.php
--
<?php
$file = $_POST['file'];
if(count($file)>0){
foreach($file as $k=>$v){
echo $k."=".$v;
echo "<br>";
}
}
?>
apt-get source.list
#官網
deb http://http.us.debian.org/debian testing main contrib
deb http://non-us.debian.org/debian-non-US testing/non-US main contrib
deb http://http.us.debian.org/debian testing main contrib
deb http://non-us.debian.org/debian-non-US testing/non-US main contrib
bsd ls 顏色顯示變亮眼彩色 超推薦!
install gnuls
cd /usr/ports/misc/gnuls/
make install clean
執行下面這一行
alias ls 'gnuls --color=auto --show-control-chars'
ref:http://freebsd.lab.mlc.edu.tw/gnuls.htm
cd /usr/ports/misc/gnuls/
make install clean
執行下面這一行
alias ls 'gnuls --color=auto --show-control-chars'
ref:http://freebsd.lab.mlc.edu.tw/gnuls.htm
kof server
http://kaillera.com/download.php
Kaillera server downloads:
(You need this if you want to create a Kaillera server)
- Kaillera server v0.86 (Windows binary) (21kb).
- Kaillera server v0.86 (Linux binary) (36kb).
http://kaillera.com/files/kaillerasrv-0.86-linux.tgz
- Kaillera server v0.86 (FreeBSD binary) (36kb).
http://kaillera.com/files/kaillerasrv-0.86-freebsd.tgz
如果出現以下錯誤訊息
> ./kaillerasrv
/usr/libexec/ld-elf.so.1: Shared object "libc_r.so.4" not found, required by
"kaillerasrv"
可以試試下面這篇文章解決方法
http://help.directadmin.com/item.php?id=55
If you get the following error when installing the Frontpage Extensions to a
domain:
Error setting up your web: /usr/libexec/ld-elf.so.1: /usr/lib/libc_r.so.4:
Undefined symbol "_flockfile"
or
Error setting up your web: /usr/libexec/ld-elf.so.1: Shared object
"libc.so.4" not found, required by "owsadm.exe"
then you'll need to do the following:
pkg_add -r compat4x
cd /usr/lib
mv libc_r.so.4 libc_r.so.4.old
ln -s /usr/local/lib/compat/libc_r.so.4.compat4x libc_r.so.4
If pkg_add fails, try this:
cd /usr/ports/misc/compat4x
make deinstall
make clean
make install
cd /usr/lib
mv libc_r.so.4 libc_r.so.4.old
ln -s /usr/local/lib/compat/libc_r.so.4.compat4x libc_r.so.4
For FreeBSD 6.0, try this code
cd /usr/lib
ln -s /usr/local/lib/compat/libcrypt.so.2
ln -s /usr/local/lib/compat/libm.so.2
mv libc.so.4 libc.so.4.old
ln -s /usr/local/lib/compat/libc.so.4
On one 6.1 system, after the compat libraries were setup, I had to run
cd /lib
ln -s libcrypt.so.3 libcrypt.so.2
which didn't actually use the compat libaries in the end.
kaillerasrv.conf的設置方式
; Kaillera server config file
; ServerName can be up to 64 characters long.
ServerName=Unknown serv0r 輸入你的伺服器名稱(任意)
; Location can be up to 64 characters long.
Location=Unknown location 輸入你伺服器所在位置(任意)
; URL can be up to 128 characters long. (ex: http://www.mysite.com/)
URL= 輸入你伺服器連結(任意、可省略)
MaxUsers=10 伺服器人數上限
Port=27888 伺服器所使用 Port(建議不修改)
; Set Public to 0 if you want to run the server on a private LAN
Public=1 是否為私人伺服器(0 為區網、1 為網路)
; Use this parameter if you want to manually specify your server's
; IP address or leave blank for automatic
; (ex: IP=154.253.21.56)
IP= 輸入你的 IP(必要)
; Messages flood protection
; FloodMsgNb is the max. number of times a same message has to
; be received in FloodMsgTime seconds.
FloodMsgNb=5
FloodMsgTime=3
; Minimum ping restriction (in ms)
; 0=disabled
MinPing=0
; Maximum connection setting restriction
; 0=disabled, 1=Bad, 2=Low, 3=Average, 4=Good, 5=Excellant, 6=LAN
MaxConnSet=0
; Message of the Day
; Note that you can stack "MotdLine" options
;MotdLine=Welcome to unknown serv0r! You can
;MotdLine=see our website at http://web.site/
; AllowWebAccess (1=yes,0=no)
AllowWebAccess=1
; End of Kaillera server config file
Kaillera server downloads:
(You need this if you want to create a Kaillera server)
- Kaillera server v0.86 (Windows binary) (21kb).
- Kaillera server v0.86 (Linux binary) (36kb).
http://kaillera.com/files/kaillerasrv-0.86-linux.tgz
- Kaillera server v0.86 (FreeBSD binary) (36kb).
http://kaillera.com/files/kaillerasrv-0.86-freebsd.tgz
如果出現以下錯誤訊息
> ./kaillerasrv
/usr/libexec/ld-elf.so.1: Shared object "libc_r.so.4" not found, required by
"kaillerasrv"
可以試試下面這篇文章解決方法
http://help.directadmin.com/item.php?id=55
If you get the following error when installing the Frontpage Extensions to a
domain:
Error setting up your web: /usr/libexec/ld-elf.so.1: /usr/lib/libc_r.so.4:
Undefined symbol "_flockfile"
or
Error setting up your web: /usr/libexec/ld-elf.so.1: Shared object
"libc.so.4" not found, required by "owsadm.exe"
then you'll need to do the following:
pkg_add -r compat4x
cd /usr/lib
mv libc_r.so.4 libc_r.so.4.old
ln -s /usr/local/lib/compat/libc_r.so.4.compat4x libc_r.so.4
If pkg_add fails, try this:
cd /usr/ports/misc/compat4x
make deinstall
make clean
make install
cd /usr/lib
mv libc_r.so.4 libc_r.so.4.old
ln -s /usr/local/lib/compat/libc_r.so.4.compat4x libc_r.so.4
For FreeBSD 6.0, try this code
cd /usr/lib
ln -s /usr/local/lib/compat/libcrypt.so.2
ln -s /usr/local/lib/compat/libm.so.2
mv libc.so.4 libc.so.4.old
ln -s /usr/local/lib/compat/libc.so.4
On one 6.1 system, after the compat libraries were setup, I had to run
cd /lib
ln -s libcrypt.so.3 libcrypt.so.2
which didn't actually use the compat libaries in the end.
kaillerasrv.conf的設置方式
; Kaillera server config file
; ServerName can be up to 64 characters long.
ServerName=Unknown serv0r 輸入你的伺服器名稱(任意)
; Location can be up to 64 characters long.
Location=Unknown location 輸入你伺服器所在位置(任意)
; URL can be up to 128 characters long. (ex: http://www.mysite.com/)
URL= 輸入你伺服器連結(任意、可省略)
MaxUsers=10 伺服器人數上限
Port=27888 伺服器所使用 Port(建議不修改)
; Set Public to 0 if you want to run the server on a private LAN
Public=1 是否為私人伺服器(0 為區網、1 為網路)
; Use this parameter if you want to manually specify your server's
; IP address or leave blank for automatic
; (ex: IP=154.253.21.56)
IP= 輸入你的 IP(必要)
; Messages flood protection
; FloodMsgNb is the max. number of times a same message has to
; be received in FloodMsgTime seconds.
FloodMsgNb=5
FloodMsgTime=3
; Minimum ping restriction (in ms)
; 0=disabled
MinPing=0
; Maximum connection setting restriction
; 0=disabled, 1=Bad, 2=Low, 3=Average, 4=Good, 5=Excellant, 6=LAN
MaxConnSet=0
; Message of the Day
; Note that you can stack "MotdLine" options
;MotdLine=Welcome to unknown serv0r! You can
;MotdLine=see our website at http://web.site/
; AllowWebAccess (1=yes,0=no)
AllowWebAccess=1
; End of Kaillera server config file
sh.sh
--a.sh--
#!/bin/sh
for unzipfile in $(ls *.tgz)
do
tar -zxf $unzipfile
echo "$unzipfile done!"
rm $unzipfile
done
--sh.sh--
rm -r /home/bbs/usr
rm -r /home/bbs/brd
rm -r /home/bbs/gem/brd
rm /home/bbs/.BRD
rm /home/bbs/.USR
mkdir /home/bbs/usr
mkdir /home/bbs/brd
mkdir /home/bbs/gem/brd
cp -r /bbs.data/usr0831.0901.02.03/* /home/bbs/usr/
cp /home/bbs/a.sh /home/bbs/usr/a
cd /home/bbs/usr/a
sh a.sh
mv a.sh ../b
cd ../b
sh a.sh
mv a.sh ../c
cd ../c
sh a.sh
mv a.sh ../d
cd ../d
sh a.sh
mv a.sh ../e
cd ../e
sh a.sh
mv a.sh ../f
cd ../f
sh a.sh
mv a.sh ../g
cd ../g
sh a.sh
mv a.sh ../h
cd ../h
sh a.sh
mv a.sh ../i
cd ../i
sh a.sh
mv a.sh ../j
cd ../j
sh a.sh
mv a.sh ../k
cd ../k
sh a.sh
mv a.sh ../l
cd ../l
sh a.sh
mv a.sh ../m
cd ../m
sh a.sh
mv a.sh ../n
cd ../n
sh a.sh
mv a.sh ../o
cd ../o
sh a.sh
mv a.sh ../p
cd ../p
sh a.sh
mv a.sh ../q
cd ../q
sh a.sh
mv a.sh ../r
cd ../r
sh a.sh
mv a.sh ../s
cd ../s
sh a.sh
mv a.sh ../t
cd ../t
sh a.sh
mv a.sh ../u
cd ../u
sh a.sh
mv a.sh ../v
cd ../v
sh a.sh
mv a.sh ../w
cd ../w
sh a.sh
mv a.sh ../x
cd ../x
sh a.sh
mv a.sh ../y
cd ../y
sh a.sh
mv a.sh ../z
cd ../z
sh a.sh
rm a.sh
mkdir /home/bbs/usr/@
chown -R bbs:bbs /home/bbs/usr
cp -r /bbs.data/brd0904.05/* /home/bbs/brd
cp /home/bbs/a.sh /home/bbs/brd
cd /home/bbs/brd
sh a.sh
rm a.sh
chown -R bbs:bbs /home/bbs/brd
cp -r /bbs.data/gem0906/* /home/bbs/gem/brd
cp /home/bbs/a.sh /home/bbs/gem/brd
cd /home/bbs/gem/brd
sh a.sh
rm a.sh
chown -R bbs:bbs /home/bbs/gem
cp /bbs.data/20080907.BRD /tmp
cp /bbs.data/20080907.USR /home/bbs/.USR
#!/bin/sh
for unzipfile in $(ls *.tgz)
do
tar -zxf $unzipfile
echo "$unzipfile done!"
rm $unzipfile
done
--sh.sh--
rm -r /home/bbs/usr
rm -r /home/bbs/brd
rm -r /home/bbs/gem/brd
rm /home/bbs/.BRD
rm /home/bbs/.USR
mkdir /home/bbs/usr
mkdir /home/bbs/brd
mkdir /home/bbs/gem/brd
cp -r /bbs.data/usr0831.0901.02.03/* /home/bbs/usr/
cp /home/bbs/a.sh /home/bbs/usr/a
cd /home/bbs/usr/a
sh a.sh
mv a.sh ../b
cd ../b
sh a.sh
mv a.sh ../c
cd ../c
sh a.sh
mv a.sh ../d
cd ../d
sh a.sh
mv a.sh ../e
cd ../e
sh a.sh
mv a.sh ../f
cd ../f
sh a.sh
mv a.sh ../g
cd ../g
sh a.sh
mv a.sh ../h
cd ../h
sh a.sh
mv a.sh ../i
cd ../i
sh a.sh
mv a.sh ../j
cd ../j
sh a.sh
mv a.sh ../k
cd ../k
sh a.sh
mv a.sh ../l
cd ../l
sh a.sh
mv a.sh ../m
cd ../m
sh a.sh
mv a.sh ../n
cd ../n
sh a.sh
mv a.sh ../o
cd ../o
sh a.sh
mv a.sh ../p
cd ../p
sh a.sh
mv a.sh ../q
cd ../q
sh a.sh
mv a.sh ../r
cd ../r
sh a.sh
mv a.sh ../s
cd ../s
sh a.sh
mv a.sh ../t
cd ../t
sh a.sh
mv a.sh ../u
cd ../u
sh a.sh
mv a.sh ../v
cd ../v
sh a.sh
mv a.sh ../w
cd ../w
sh a.sh
mv a.sh ../x
cd ../x
sh a.sh
mv a.sh ../y
cd ../y
sh a.sh
mv a.sh ../z
cd ../z
sh a.sh
rm a.sh
mkdir /home/bbs/usr/@
chown -R bbs:bbs /home/bbs/usr
cp -r /bbs.data/brd0904.05/* /home/bbs/brd
cp /home/bbs/a.sh /home/bbs/brd
cd /home/bbs/brd
sh a.sh
rm a.sh
chown -R bbs:bbs /home/bbs/brd
cp -r /bbs.data/gem0906/* /home/bbs/gem/brd
cp /home/bbs/a.sh /home/bbs/gem/brd
cd /home/bbs/gem/brd
sh a.sh
rm a.sh
chown -R bbs:bbs /home/bbs/gem
cp /bbs.data/20080907.BRD /tmp
cp /bbs.data/20080907.USR /home/bbs/.USR
以書喻人的話,女生是紅樓夢,男生是金瓶梅
以書喻人的話,
女生是紅樓夢,
男生是金瓶梅。
有阿,你很有這一方面的潛能,只不過埋得很深,比較難挖掘
只尋找被愛,
而吝於愛人,
很難覓得真愛的吧。
早就告訴過你們,
安全第一,
你們知道被車子撞飛在空中的樣子多像一個殘破的娃娃嗎?
寬鬆的上衣讓我幾乎可以毫無阻礙的窺視進去
節錄自很多書,多到我忘了有哪些
女生是紅樓夢,
男生是金瓶梅。
有阿,你很有這一方面的潛能,只不過埋得很深,比較難挖掘
只尋找被愛,
而吝於愛人,
很難覓得真愛的吧。
早就告訴過你們,
安全第一,
你們知道被車子撞飛在空中的樣子多像一個殘破的娃娃嗎?
寬鬆的上衣讓我幾乎可以毫無阻礙的窺視進去
節錄自很多書,多到我忘了有哪些
分享一個不錯的 .bashrc SP1設定
PS1='\[\033[1;33m\]\u\[\033[1;37m\]@\[\033[1;32m\]\h\[\033[1;37m\]:\[\033[1;31m\]\W \[\033[1;36m\]\$ \[\033[0m\]'
看起來像這個樣子 (比較容易識別):
root@zaurus:home #
說明:
\[\033[ 是 ANSI 顏色控制碼起始
1;33m\] 是顏色控制碼
第一個數字是亮度, 1 是高亮度,0是普通亮度,還有2閃爍 (少數 shell 才有支援)
第二個數字是顏色代碼
\[\033[0m\] 是關閉 ANSI 顏色控制碼,必須加於末尾,後來畫面顯示的文字才不會帶顏色
轉貼自http://forum.palmislife.com/viewthread.php?tid=12210
看起來像這個樣子 (比較容易識別):
root@zaurus:home #
說明:
\[\033[ 是 ANSI 顏色控制碼起始
1;33m\] 是顏色控制碼
第一個數字是亮度, 1 是高亮度,0是普通亮度,還有2閃爍 (少數 shell 才有支援)
第二個數字是顏色代碼
\[\033[0m\] 是關閉 ANSI 顏色控制碼,必須加於末尾,後來畫面顯示的文字才不會帶顏色
轉貼自http://forum.palmislife.com/viewthread.php?tid=12210
什麼是伺服器?What is server?
什麼是伺服器?
一般人對伺服器的印象常常是『一個巨大的機房,裡面放著很多機器,很多線路,好像那種東西是一般大眾買不到的、很神秘的東西!』其實,完全不對!
在維基百科上面,伺服器的定義如下:『伺服器以硬體來說,通常是指那些具有較高計算能力,能夠提供給多個用戶使用的電腦主機。 伺服器與個人電腦的不同點太多了,例如個人電腦在同一個時間通常只為一個使用者服務。而伺服器同時給很多人使用。』
不過這已經是舊時代的想法了,以現在(20080810)市面上的電腦來說,一個一萬二的主機,不含螢幕價錢,其實也可以勝任一個不錯的伺服器。大約可以給兩百人同時瀏覽架設於其上的網頁沒有問題!有人說,電腦硬體就像一個軀殼,軟體就像思想或靈魂,硬體的效能決定了軀殼強壯與否,而軟體決定了CPU這個軀殼的身份以及行為。
伺服器就硬體上而言我們期待它是『夠強壯』的軀殼好勝任繁重的工作,並搭配合適的軟體讓它扮演特定角色;舉例來說,它會扮演成客服人員、接洽窗口、銀行行員、行政人員或是銷售員等各種角色,就像各種類型的伺服器軟體所提供的服務。
而使用者要使用這些服務也會有不同的方法,像有些單位會要求你領取號碼牌等候或是按照某些行政流程處理事項等,因此使用者使用特定服務時也有對應的客戶端程式來存取伺服器提供的服務。
那究竟伺服器是怎麼辦到的呢?遊戲的伺服器、MSN的伺服器、網頁的伺服器、FTP的伺服器、※夢之大地※的伺服器?這些可以讓我們連上去使用的服務,例如,你可以連上魔獸世界進行你的副本,你可以連上MSN取得你的朋友清單,可以連上GOOGLE進行你要的資料搜尋,可以連上夢之大地去course版找到你要的課的建議!這些服務是怎麼辦到的呢?
其實,仔細分析一下,上述的那些動作都可以分解為
『①利用某軟體,②然後去某處,③送出並傳回某些資料』
其中的第一項這個動作就是在你的電腦上面,也就是在所謂的客戶端上面完成,例如:
① 你開啟你安裝的魔獸世界執行檔
下一個步驟是在遠端的伺服器上面完成的,遠端的伺服器機器讓你的帳號登入,並且將你的角色資料從硬碟中讀到記憶體裡面,例如:
② 連去魔獸世界的伺服器
最後一個步驟從遠端伺服器開始,終於客戶端,也就是你自己的個人電腦。
③你送出你的帳密、或者你的角色移動的方向給魔獸伺服器
魔獸的伺服器會傳回帳密是否正確,或者你的角色移動之後的場景樣式給你的電腦,接著你的電腦上面的魔獸執行檔就會把那些電子資訊轉換成螢幕上的楊子給你看到了!又或者以網頁來說。
① 你打開你安裝的火狐瀏覽器
② 連去咕狗的首頁
③ 送出你搜尋的關鍵字,然後咕狗回傳給你搜尋的結果
上面所述流程就是所有伺服器的運作模式了!相信你所看到的!這絕對是『所有』伺服器的運作模式!任何伺服器提供的服務絕對都可以分解成以上動作,不過你必須知道,上面那些分解是為了讓大家容易瞭解伺服器做的事情,而正常我們在架設伺服器,對於網路的狀況作分析時,並不是像那樣分析的。
這些伺服器其實就只是一台電腦,一台可以開打他的網路某個通訊埠,讓別人的電腦可以透過這個通訊埠來取得資料的電腦!
具上所述,只要你的電腦可以連上網路,然後裝上可以回應出別人從網路上送出的要求的軟體!那麼,那就是一台俗稱的伺服器!
如何成為伺服器!
上面說過了!只要你的電腦可以回應給其他電腦正確的資訊時,那就是一台伺服器!
舉例來說:你想要一台網頁伺服器該怎麼作呢?
首先,你必須知道哪些軟體可以回應別人的電腦發出的HTTP協定要求,然後安裝他,並且開啟該軟體會使用到的通訊埠。真的!這樣就搞定了!當然了,只有作這樣的話其實並沒有做好一個伺服器該有的規劃,一個好的伺服器必須把硬碟的分割包含檔案分配做好,平均分散每顆硬碟的使用率,做好定期備份重要檔案,設置防火牆以免網頁被駭。即使你不去作這些規劃,你的伺服器依然可以運作,而且運氣好的話甚至可以運作得很順利(當然這不太可能…)。
至於,什麼是可以回應HTTP通訊協定的軟體?這本講義可以簡單的給你一個答案『Apache』。他唸作『阿帕契』
在Debain系統下你可以利用以下指令安裝Apache
apt-get install apache2
等系統將apache2下載並安裝完畢之後。基本上,你的網頁伺服器就完成了。
詳細的安裝和設定Apache,這就不在本講義的範圍之內了,不過我可以告訴你幾個地方,讓你有跡可循。
● 鳥哥的私房菜。鳥哥是成大的環工學長喔!鳥網裡面會告訴你,如何安裝linux(通常我們用這個os架站),如何安裝Apache和其他伺服軟體,例如電子郵件、FTP、DNS…。而且都會寫上非常詳細的各種服務的觀念!非常建議閱讀!
● Study-Area。這個網站裡面最富盛名的應該就是網中人了(netman),這個站裡面除了對於linux系統有非常多的介紹之外,也有寫到BSD系統的freeBSD。那也是一個非常棒的伺服器OS選擇!夢大就是運行在freeBSD上面的呢!
● FreeBSD架設管理與應用。其實這是一本書啦,這本書成大總圖有,不過全書內容都在作者佛心的分享之下統統都上線了!講義中我偏偏不俗套的附上網址,反正附了你們也不可能一個字一個字打上網址列,相信我,直接咕狗『FreeBSD架設管理與應用』比打網址快多了!這本書應該是最適合新手上路的一本書,因為他從基礎的安裝作業系統,到進階的伺服器設定都有深入淺出的介紹。筆者我就是從這本書開始我的伺服器之旅的!
其他還有說不盡的資訊通通都在網路上,多花點時間上網搜尋,或者直接進入網愛社面對面功力傳授,你的伺服器功力肯定都可以有大幅度進步!
小宅宅:『那一個首頁會在一台伺服器的哪裡呢?為什麼我安裝了Apache之後,別人連過來我的IP就會有首頁了?』
大宅宅:『其實那就是所謂設定Apache的部份了,這個問題如果弄懂了之後應該有助於大家對伺服器基礎的,且重要的認知!所以下面簡單介紹一下!』
以freeBSD為例,當你利用port安裝Apache後,再沒有更改安裝參數的情況之下,『你的首頁』是下面這個路徑這個檔案!
/usr/local/www/data-dist/index.html
只要你更改了那個檔案的內容,別人連過來你的電腦看到的首頁就會你改過的樣子了!
freeBSD之下安裝Apache的方法附於下:
# cd /usr/port/www/apache20
# make install clean
要進行這些步驟你還必須對unix-like系統有相當程度的認識,至少要知道什麼是超級使用者(root),還要可以將自己的權限提昇到超級使用者,才能正確的安裝Apache軟體。
Windows之下安裝了Apache之後,預設的首頁路徑大概如下
C:\Appserv\data\index.html
恩…其實我沒有在Windows之下安裝伺服器的經驗,上面那個路徑是我猜的………哈哈。
附帶一提,Windows上面的伺服器軟體最普遍被一般人使用的是Appserv,你可以用這個關鍵字直接去咕狗,你可以找到他的官方網站,並且下載該軟體,安裝方法應該也是所謂的『一直下一步』。這東西我沒安裝過,不提了。
有哪些伺服服務?
這裡簡單介紹幾種伺服服務。
→DHCP:設定一個網域的自動ip分配服務。
→DNS:將數字ip轉換為文字ip的網址服務。
→WWW:網頁服務。
→SAMBA:讓win的電腦可以存取unix的檔案。
→Mail:電子郵件服務
→Proxy:可以節省頻寬的網路服務。
以上的伺服器都可以在鳥網看到非常詳細的介紹。
什麼是PHP、HTML、BBS?
其實所有『你看到的』網頁都是html語法了,但是你看到的html語法可能是由php、cgi、JavaScript產生的,但是無論如何,那些程式都是經由你在瀏覽器上面送出的資訊,利用那些資訊運算出你要的資訊,製作成html語法傳給你的瀏覽器,瀏覽器再將那些html語法解釋出來,作成各種貼圖,文字效果,然後產生你看到的網頁!
現在的網頁幾乎都會把各種語言來拿綜合著用,例如我自己作過的類似youtube的影片播放網頁,裡面就有html和JavaScript!也就是在一份index.html裡面寫著html和JavaScript的語法。
php舉例說明;
echo Date( "D" ) ;
?>
上面三行php程式碼在有安裝php的伺服器中,會回應出當天的星期,例如如果你是禮拜二去瀏覽該網頁的,那麼,上面那三行php程式碼就會變成:
Tru
Tru這三個英文字!而你無法在瀏覽器上面看到Tru這三個英文字是原本寫上去的html語法,或者是php在伺服器上面運算出來的結果!
附帶一提,php是在伺服器上面運算,然後將運算出來的結果傳給瀏覽器,所以要能夠執行php語法的伺服器還必須安裝php程式,這樣才能正確執行php語法。php除了像上面那種Date函式之外,你還可以像C語言那樣撰寫迴圈,變數。
說到BBS,那可以算是中港台三地的網路應用神蹟了!因為台灣的網路速度普遍頻寬很低,所以可以高速作為交流的BBS平台相當受大學生族群的歡迎!而能夠把一台機器和程式的效能發揮的如此淋漓盡致,也堪稱是在逆境中求生存的最優異表現了!當大家利用PCman連上夢大、PTT,可以看到網址開頭的六個英文字是『telnet』,其實那就是BBS使用的通訊協定了,其實telnet原本是用來登入遠端機器作為遠端管理的工具,其畫面擷取如下。
在如何成為伺服器那邊說過了,伺服器會有一支程式來處理客戶端要求的資料,telnet就是那麼一支在處理使用者登入之後的程式!telnet程式將你的登入資訊和儲存在硬碟裡面的資料作比對,正確的話就讓你正確登入BBS,然後你看到的每一篇文章都是一個在硬碟上面的檔案,就如同Apache一樣,Apache有/usr/loacal/www/date-dist放置首頁,BBS也會有自己的檔案放置位址,一般BBS都會將主程式放置在/home/bbs/bin/裡面,通常這個位址裡面會有一個叫做bbsd的程式在處理你的登入資訊和各種要求,這隻bbsd就是telnet程式了!
附帶一提,bbsd可以理解為BBS Daemon,Daemon的意思是『在unix之下獨立運行的程式』。
另外,你還需要知道的是,BBS是最早也是最快速的『互動式表單系統』,web2.0起於各種互動式網頁的產生,大家可以在網頁論壇上面留下自己的意見,跟世界各地的網友互動,www利用html、php、MySQL處理各項資料,但是速度永遠比不上瞬間完成的BBS,但是若未來網路速度可以提升到全民光纖的時代,產生像BBS那樣快速方便好用的web服務是有可能的!
什麼是FTP?
比起前面的Apache、BBS,FTP真的是簡單太多了!長話短說,FTP就是一個可以登入遠端機器,利用FTP程式裡面的程式取回遠端電腦的檔案。
如同前面所說的任何服務一樣,FTP也會開啟一個通訊埠(通常是21)讓客戶端連進來,然後客戶端傳送要求資料的訊息,再來伺服器就把檔案送給客戶端。如此,就完成了FTP在做的事情了!
比較特別的是,FTP程式利用兩個通訊埠,port21是讓客戶端的登入資訊命令、移動到其他資料夾的命令、下載某檔案的命令通行的通訊埠,port20才是我們真正在傳輸檔案的port!至於為什麼會一次使用兩個port?這點我也不清楚,待查了………!
在unix-likeOS上面常用的ftp軟體很多種,我推薦pure-ftpd。因為他真的很單純,但是也不會單純到功能東缺稀少!使用的記憶體也非常少量!獨立運行也不曾掛掉。
什麼是PORT?
當我們連上某個網址的時候,例如,bbs.ncku.edu.tw,我們在PCman裡面輸入這個網址,不過,為什麼我們不會連到這個網址提供的其他服務(如果有的話),例如www或者ftp呢?
這就是port的功用了,我們在PCman裡面輸入的網址,PCman軟體會以預設的telnet通訊埠23作為溝通的管道,然後夢大伺服器上面在管理telnet的軟體會處理的訊號也就是從port23過來的資訊,所以如果你在PCman連到bbs.ccns.ncku.eud.tw:21的話,只會發生連不上主機的情況而已了!
各種服務都有制式化的port,稱之為
『well known port』
你可以直接上網查詢這個關鍵字,你可以看到
ftp:21
ssh:22
telnet:23
http:80
還有其他很多port都有規定,當然了,這些port都可以改,但是改了之後別人要進入你提供的服務就要再另外加上那些port才能使用你提供的服務了,例如如果你改了你的telnet通訊埠到408。那麼別人就要在網址後面加上:480,如『telnet://bbs.ccns.ncku.edu.tw:408』這樣才可以登入你的服務!
Windows VS UNIX
眾所皆知,以個人桌上型或者筆記型電腦來說,作業系統絕對是以Windows為大宗,不過,一旦提到伺服器這方面,如果你使用Windows作為你的OS的話,恩,那我會替你捏把冷汗………。
為什麼大家都用Windows作為個人電腦的作業系統,但是一旦當作伺服器的作業系統時,卻又敬而遠之呢?這邊,我簡單說明一下!
伺服器最重要的就是所謂的uptime,中文意思就是開機上線進行服務的時間,例如夢大之前常常當機,那夢大一年下來的uptime就不到99%了!一台標準的伺服器要可以做到有99%的上線時間,也就是一年中有三千一百二十二萬零六百四十分鐘必須是可以讓使用者連線上的,以另外一種說法來說,一年只能不在線上三十一萬五千三百六十分鐘,也就是八十七點六小時,也就是一年下來總和離線時間只能有三點六五天!但是這只是一般的標準,真正進行商業行為的網站對於uptime要求絕對比99%還要高出很多很多很多,甚至是100%。畢竟商業服務容不得任何時間讓客戶連不上網站阿!
總的來說,因為不能讓各種硬體或者軟體問題導致斷線,所以在硬體方面,幾乎所有大型伺服器都會有備援機,也就是兩台機器裡面的資料是一模一樣的,如果其中一台忽然硬體掛掉了,那麼另一台馬上接手繼續之前的服務,其中的間隙是使用者感覺不出來的。那麼,在軟體方面,因為Windows上面有各種亂七八糟的病毒肆虐,OS的記憶體也管理做的不好,一來無法防治病毒無情的惡搞,記憶體管理的不好也會讓開機時間和效能呈現負相關成長,開機越久,效能越低。
小宅宅:『病毒攻擊和記憶體管理不好的情形大概是什麼阿?很嚴重嗎?』
大宅宅:『病毒可以簡單的想成,你的電腦開了那些網頁服務之後,或許會因為OS軟體裡面某個通訊可以透過你已經開啟的服務,讓駭客傳送奇怪的資料導致OS將開不應該開啟的通訊埠打開,然後對方以這個通訊埠傳送命令過來,例如刪除windows底下所有D槽裡面的檔案這種指令,當然囉,這樣被搞過之後你的伺服器上得資料肯定跟你說拜拜了。
那麼記憶體管理的話,你可以回家打開你的Windows電腦,叫出你的windows工作管理員,切換到處理程序那個分頁,按下檢視…選擇欄位…把虛擬記憶體也勾選起來,你可以看到每一支程式總使用的記憶體量裡面,差不多會有30%~50%是放在虛擬記憶體上面的,而虛擬記憶體是在硬碟上面分割出來當作記憶體使用的東西,這部份詳談的話,是另一個故事了,跳過不提。你只要知道受限於硬碟傳送資料速度約為記憶體的萬分之一,所以虛擬記憶體會拖垮程式速度,而unix-like系統上面會優先使用實體記憶體,甚至把目前沒有實際使用到的記憶體快取起來,所以可以的對於網路上送來的要求,快速開啟一支對於該要求產生回應或者處理資料的程式』
通篇而論,想要有長時間上線,又擁有優異效能,unix-like是你的首選!
本篇文章立意主在釐清新手對於伺服器的概念,不包含建立伺服器的方法,因為建立伺服器的方法在網路上有太多太多文章你必須參考,那些文章都很棒,非看不可!
by magicallove
2008/8/12
一般人對伺服器的印象常常是『一個巨大的機房,裡面放著很多機器,很多線路,好像那種東西是一般大眾買不到的、很神秘的東西!』其實,完全不對!
在維基百科上面,伺服器的定義如下:『伺服器以硬體來說,通常是指那些具有較高計算能力,能夠提供給多個用戶使用的電腦主機。 伺服器與個人電腦的不同點太多了,例如個人電腦在同一個時間通常只為一個使用者服務。而伺服器同時給很多人使用。』
不過這已經是舊時代的想法了,以現在(20080810)市面上的電腦來說,一個一萬二的主機,不含螢幕價錢,其實也可以勝任一個不錯的伺服器。大約可以給兩百人同時瀏覽架設於其上的網頁沒有問題!有人說,電腦硬體就像一個軀殼,軟體就像思想或靈魂,硬體的效能決定了軀殼強壯與否,而軟體決定了CPU這個軀殼的身份以及行為。
伺服器就硬體上而言我們期待它是『夠強壯』的軀殼好勝任繁重的工作,並搭配合適的軟體讓它扮演特定角色;舉例來說,它會扮演成客服人員、接洽窗口、銀行行員、行政人員或是銷售員等各種角色,就像各種類型的伺服器軟體所提供的服務。
而使用者要使用這些服務也會有不同的方法,像有些單位會要求你領取號碼牌等候或是按照某些行政流程處理事項等,因此使用者使用特定服務時也有對應的客戶端程式來存取伺服器提供的服務。
那究竟伺服器是怎麼辦到的呢?遊戲的伺服器、MSN的伺服器、網頁的伺服器、FTP的伺服器、※夢之大地※的伺服器?這些可以讓我們連上去使用的服務,例如,你可以連上魔獸世界進行你的副本,你可以連上MSN取得你的朋友清單,可以連上GOOGLE進行你要的資料搜尋,可以連上夢之大地去course版找到你要的課的建議!這些服務是怎麼辦到的呢?
其實,仔細分析一下,上述的那些動作都可以分解為
『①利用某軟體,②然後去某處,③送出並傳回某些資料』
其中的第一項這個動作就是在你的電腦上面,也就是在所謂的客戶端上面完成,例如:
① 你開啟你安裝的魔獸世界執行檔
下一個步驟是在遠端的伺服器上面完成的,遠端的伺服器機器讓你的帳號登入,並且將你的角色資料從硬碟中讀到記憶體裡面,例如:
② 連去魔獸世界的伺服器
最後一個步驟從遠端伺服器開始,終於客戶端,也就是你自己的個人電腦。
③你送出你的帳密、或者你的角色移動的方向給魔獸伺服器
魔獸的伺服器會傳回帳密是否正確,或者你的角色移動之後的場景樣式給你的電腦,接著你的電腦上面的魔獸執行檔就會把那些電子資訊轉換成螢幕上的楊子給你看到了!又或者以網頁來說。
① 你打開你安裝的火狐瀏覽器
② 連去咕狗的首頁
③ 送出你搜尋的關鍵字,然後咕狗回傳給你搜尋的結果
上面所述流程就是所有伺服器的運作模式了!相信你所看到的!這絕對是『所有』伺服器的運作模式!任何伺服器提供的服務絕對都可以分解成以上動作,不過你必須知道,上面那些分解是為了讓大家容易瞭解伺服器做的事情,而正常我們在架設伺服器,對於網路的狀況作分析時,並不是像那樣分析的。
這些伺服器其實就只是一台電腦,一台可以開打他的網路某個通訊埠,讓別人的電腦可以透過這個通訊埠來取得資料的電腦!
具上所述,只要你的電腦可以連上網路,然後裝上可以回應出別人從網路上送出的要求的軟體!那麼,那就是一台俗稱的伺服器!
如何成為伺服器!
上面說過了!只要你的電腦可以回應給其他電腦正確的資訊時,那就是一台伺服器!
舉例來說:你想要一台網頁伺服器該怎麼作呢?
首先,你必須知道哪些軟體可以回應別人的電腦發出的HTTP協定要求,然後安裝他,並且開啟該軟體會使用到的通訊埠。真的!這樣就搞定了!當然了,只有作這樣的話其實並沒有做好一個伺服器該有的規劃,一個好的伺服器必須把硬碟的分割包含檔案分配做好,平均分散每顆硬碟的使用率,做好定期備份重要檔案,設置防火牆以免網頁被駭。即使你不去作這些規劃,你的伺服器依然可以運作,而且運氣好的話甚至可以運作得很順利(當然這不太可能…)。
至於,什麼是可以回應HTTP通訊協定的軟體?這本講義可以簡單的給你一個答案『Apache』。他唸作『阿帕契』
在Debain系統下你可以利用以下指令安裝Apache
apt-get install apache2
等系統將apache2下載並安裝完畢之後。基本上,你的網頁伺服器就完成了。
詳細的安裝和設定Apache,這就不在本講義的範圍之內了,不過我可以告訴你幾個地方,讓你有跡可循。
● 鳥哥的私房菜。鳥哥是成大的環工學長喔!鳥網裡面會告訴你,如何安裝linux(通常我們用這個os架站),如何安裝Apache和其他伺服軟體,例如電子郵件、FTP、DNS…。而且都會寫上非常詳細的各種服務的觀念!非常建議閱讀!
● Study-Area。這個網站裡面最富盛名的應該就是網中人了(netman),這個站裡面除了對於linux系統有非常多的介紹之外,也有寫到BSD系統的freeBSD。那也是一個非常棒的伺服器OS選擇!夢大就是運行在freeBSD上面的呢!
● FreeBSD架設管理與應用。其實這是一本書啦,這本書成大總圖有,不過全書內容都在作者佛心的分享之下統統都上線了!講義中我偏偏不俗套的附上網址,反正附了你們也不可能一個字一個字打上網址列,相信我,直接咕狗『FreeBSD架設管理與應用』比打網址快多了!這本書應該是最適合新手上路的一本書,因為他從基礎的安裝作業系統,到進階的伺服器設定都有深入淺出的介紹。筆者我就是從這本書開始我的伺服器之旅的!
其他還有說不盡的資訊通通都在網路上,多花點時間上網搜尋,或者直接進入網愛社面對面功力傳授,你的伺服器功力肯定都可以有大幅度進步!
小宅宅:『那一個首頁會在一台伺服器的哪裡呢?為什麼我安裝了Apache之後,別人連過來我的IP就會有首頁了?』
大宅宅:『其實那就是所謂設定Apache的部份了,這個問題如果弄懂了之後應該有助於大家對伺服器基礎的,且重要的認知!所以下面簡單介紹一下!』
以freeBSD為例,當你利用port安裝Apache後,再沒有更改安裝參數的情況之下,『你的首頁』是下面這個路徑這個檔案!
/usr/local/www/data-dist/index.html
只要你更改了那個檔案的內容,別人連過來你的電腦看到的首頁就會你改過的樣子了!
freeBSD之下安裝Apache的方法附於下:
# cd /usr/port/www/apache20
# make install clean
要進行這些步驟你還必須對unix-like系統有相當程度的認識,至少要知道什麼是超級使用者(root),還要可以將自己的權限提昇到超級使用者,才能正確的安裝Apache軟體。
Windows之下安裝了Apache之後,預設的首頁路徑大概如下
C:\Appserv\data\index.html
恩…其實我沒有在Windows之下安裝伺服器的經驗,上面那個路徑是我猜的………哈哈。
附帶一提,Windows上面的伺服器軟體最普遍被一般人使用的是Appserv,你可以用這個關鍵字直接去咕狗,你可以找到他的官方網站,並且下載該軟體,安裝方法應該也是所謂的『一直下一步』。這東西我沒安裝過,不提了。
有哪些伺服服務?
這裡簡單介紹幾種伺服服務。
→DHCP:設定一個網域的自動ip分配服務。
→DNS:將數字ip轉換為文字ip的網址服務。
→WWW:網頁服務。
→SAMBA:讓win的電腦可以存取unix的檔案。
→Mail:電子郵件服務
→Proxy:可以節省頻寬的網路服務。
以上的伺服器都可以在鳥網看到非常詳細的介紹。
什麼是PHP、HTML、BBS?
其實所有『你看到的』網頁都是html語法了,但是你看到的html語法可能是由php、cgi、JavaScript產生的,但是無論如何,那些程式都是經由你在瀏覽器上面送出的資訊,利用那些資訊運算出你要的資訊,製作成html語法傳給你的瀏覽器,瀏覽器再將那些html語法解釋出來,作成各種貼圖,文字效果,然後產生你看到的網頁!
現在的網頁幾乎都會把各種語言來拿綜合著用,例如我自己作過的類似youtube的影片播放網頁,裡面就有html和JavaScript!也就是在一份index.html裡面寫著html和JavaScript的語法。
php舉例說明;
echo Date( "D" ) ;
?>
上面三行php程式碼在有安裝php的伺服器中,會回應出當天的星期,例如如果你是禮拜二去瀏覽該網頁的,那麼,上面那三行php程式碼就會變成:
Tru
Tru這三個英文字!而你無法在瀏覽器上面看到Tru這三個英文字是原本寫上去的html語法,或者是php在伺服器上面運算出來的結果!
附帶一提,php是在伺服器上面運算,然後將運算出來的結果傳給瀏覽器,所以要能夠執行php語法的伺服器還必須安裝php程式,這樣才能正確執行php語法。php除了像上面那種Date函式之外,你還可以像C語言那樣撰寫迴圈,變數。
說到BBS,那可以算是中港台三地的網路應用神蹟了!因為台灣的網路速度普遍頻寬很低,所以可以高速作為交流的BBS平台相當受大學生族群的歡迎!而能夠把一台機器和程式的效能發揮的如此淋漓盡致,也堪稱是在逆境中求生存的最優異表現了!當大家利用PCman連上夢大、PTT,可以看到網址開頭的六個英文字是『telnet』,其實那就是BBS使用的通訊協定了,其實telnet原本是用來登入遠端機器作為遠端管理的工具,其畫面擷取如下。
在如何成為伺服器那邊說過了,伺服器會有一支程式來處理客戶端要求的資料,telnet就是那麼一支在處理使用者登入之後的程式!telnet程式將你的登入資訊和儲存在硬碟裡面的資料作比對,正確的話就讓你正確登入BBS,然後你看到的每一篇文章都是一個在硬碟上面的檔案,就如同Apache一樣,Apache有/usr/loacal/www/date-dist放置首頁,BBS也會有自己的檔案放置位址,一般BBS都會將主程式放置在/home/bbs/bin/裡面,通常這個位址裡面會有一個叫做bbsd的程式在處理你的登入資訊和各種要求,這隻bbsd就是telnet程式了!
附帶一提,bbsd可以理解為BBS Daemon,Daemon的意思是『在unix之下獨立運行的程式』。
另外,你還需要知道的是,BBS是最早也是最快速的『互動式表單系統』,web2.0起於各種互動式網頁的產生,大家可以在網頁論壇上面留下自己的意見,跟世界各地的網友互動,www利用html、php、MySQL處理各項資料,但是速度永遠比不上瞬間完成的BBS,但是若未來網路速度可以提升到全民光纖的時代,產生像BBS那樣快速方便好用的web服務是有可能的!
什麼是FTP?
比起前面的Apache、BBS,FTP真的是簡單太多了!長話短說,FTP就是一個可以登入遠端機器,利用FTP程式裡面的程式取回遠端電腦的檔案。
如同前面所說的任何服務一樣,FTP也會開啟一個通訊埠(通常是21)讓客戶端連進來,然後客戶端傳送要求資料的訊息,再來伺服器就把檔案送給客戶端。如此,就完成了FTP在做的事情了!
比較特別的是,FTP程式利用兩個通訊埠,port21是讓客戶端的登入資訊命令、移動到其他資料夾的命令、下載某檔案的命令通行的通訊埠,port20才是我們真正在傳輸檔案的port!至於為什麼會一次使用兩個port?這點我也不清楚,待查了………!
在unix-likeOS上面常用的ftp軟體很多種,我推薦pure-ftpd。因為他真的很單純,但是也不會單純到功能東缺稀少!使用的記憶體也非常少量!獨立運行也不曾掛掉。
什麼是PORT?
當我們連上某個網址的時候,例如,bbs.ncku.edu.tw,我們在PCman裡面輸入這個網址,不過,為什麼我們不會連到這個網址提供的其他服務(如果有的話),例如www或者ftp呢?
這就是port的功用了,我們在PCman裡面輸入的網址,PCman軟體會以預設的telnet通訊埠23作為溝通的管道,然後夢大伺服器上面在管理telnet的軟體會處理的訊號也就是從port23過來的資訊,所以如果你在PCman連到bbs.ccns.ncku.eud.tw:21的話,只會發生連不上主機的情況而已了!
各種服務都有制式化的port,稱之為
『well known port』
你可以直接上網查詢這個關鍵字,你可以看到
ftp:21
ssh:22
telnet:23
http:80
還有其他很多port都有規定,當然了,這些port都可以改,但是改了之後別人要進入你提供的服務就要再另外加上那些port才能使用你提供的服務了,例如如果你改了你的telnet通訊埠到408。那麼別人就要在網址後面加上:480,如『telnet://bbs.ccns.ncku.edu.tw:408』這樣才可以登入你的服務!
Windows VS UNIX
眾所皆知,以個人桌上型或者筆記型電腦來說,作業系統絕對是以Windows為大宗,不過,一旦提到伺服器這方面,如果你使用Windows作為你的OS的話,恩,那我會替你捏把冷汗………。
為什麼大家都用Windows作為個人電腦的作業系統,但是一旦當作伺服器的作業系統時,卻又敬而遠之呢?這邊,我簡單說明一下!
伺服器最重要的就是所謂的uptime,中文意思就是開機上線進行服務的時間,例如夢大之前常常當機,那夢大一年下來的uptime就不到99%了!一台標準的伺服器要可以做到有99%的上線時間,也就是一年中有三千一百二十二萬零六百四十分鐘必須是可以讓使用者連線上的,以另外一種說法來說,一年只能不在線上三十一萬五千三百六十分鐘,也就是八十七點六小時,也就是一年下來總和離線時間只能有三點六五天!但是這只是一般的標準,真正進行商業行為的網站對於uptime要求絕對比99%還要高出很多很多很多,甚至是100%。畢竟商業服務容不得任何時間讓客戶連不上網站阿!
總的來說,因為不能讓各種硬體或者軟體問題導致斷線,所以在硬體方面,幾乎所有大型伺服器都會有備援機,也就是兩台機器裡面的資料是一模一樣的,如果其中一台忽然硬體掛掉了,那麼另一台馬上接手繼續之前的服務,其中的間隙是使用者感覺不出來的。那麼,在軟體方面,因為Windows上面有各種亂七八糟的病毒肆虐,OS的記憶體也管理做的不好,一來無法防治病毒無情的惡搞,記憶體管理的不好也會讓開機時間和效能呈現負相關成長,開機越久,效能越低。
小宅宅:『病毒攻擊和記憶體管理不好的情形大概是什麼阿?很嚴重嗎?』
大宅宅:『病毒可以簡單的想成,你的電腦開了那些網頁服務之後,或許會因為OS軟體裡面某個通訊可以透過你已經開啟的服務,讓駭客傳送奇怪的資料導致OS將開不應該開啟的通訊埠打開,然後對方以這個通訊埠傳送命令過來,例如刪除windows底下所有D槽裡面的檔案這種指令,當然囉,這樣被搞過之後你的伺服器上得資料肯定跟你說拜拜了。
那麼記憶體管理的話,你可以回家打開你的Windows電腦,叫出你的windows工作管理員,切換到處理程序那個分頁,按下檢視…選擇欄位…把虛擬記憶體也勾選起來,你可以看到每一支程式總使用的記憶體量裡面,差不多會有30%~50%是放在虛擬記憶體上面的,而虛擬記憶體是在硬碟上面分割出來當作記憶體使用的東西,這部份詳談的話,是另一個故事了,跳過不提。你只要知道受限於硬碟傳送資料速度約為記憶體的萬分之一,所以虛擬記憶體會拖垮程式速度,而unix-like系統上面會優先使用實體記憶體,甚至把目前沒有實際使用到的記憶體快取起來,所以可以的對於網路上送來的要求,快速開啟一支對於該要求產生回應或者處理資料的程式』
通篇而論,想要有長時間上線,又擁有優異效能,unix-like是你的首選!
本篇文章立意主在釐清新手對於伺服器的概念,不包含建立伺服器的方法,因為建立伺服器的方法在網路上有太多太多文章你必須參考,那些文章都很棒,非看不可!
by magicallove
2008/8/12
所謂?戰?
原因是我不願意放下身段思考,秉持著我的意見單刀直入,硬押著夥伴
或者敵人上架,不顧其他人甚至是一個團隊的好處,我堅持著那樣做就
是那樣做。
我媽說,人人不一樣,資質、經歷都有差。是的,我可以繼續這樣戰,
戰那些跟我意見不一樣的人,用我的高調語氣與尖銳的語言。月亮的男
人說我這樣不成人之美,以我的腦袋多想兩分鐘就可以用其他句子來說
一件事情,但我以前喜歡,也常用聽聞起來較為刺耳的字詞,因為那很
爽,可以把別人弄到失焦或者火冒三丈。我就像是惟恐天下不亂的樣子
!
就像是老師教學生那樣,老師可以用不同的方法教不同程度的學生,讓
每個學生都快快樂樂的有所學,不過那樣老師要花很多力氣想教學方法
。也可以用教精英的方法教所有學生,不過那樣的話,後段的學生只會
在下課後幹譙,或者跑去看妹。但是精英的學生可以學到更多東西!
這讓我想到『曲高和寡』的故事,不過不知道這意思這樣對不對。
看到很多人常常花時間放鬆自己,甚至有人無時無刻都在放鬆自己,而
且是近乎渾沌了的那種放鬆,他們花時間去做那種我認為毫無意思的事
情(注意到沒,這句話容易引戰?應該吧)我媽建議我選擇閉口不語,
我可以知道或者認為誰怎麼樣做不好,但是不用說出來,反正別人的命
是他的,他要怎麼使用與我何干?後面兩句話是我自己的註解。不是我
媽說的。
我認為,沒有什麼事情是不能說出來的,彼此的友誼或者任何關係之間
糝有著秘密或者謊言,怎麼可能不會垮掉?為什麼有人會認為不能講?
不講就會好嗎?學研營有一句話,做了不一定有機會,不做絕對沒機會
,依照偉期的照樣照句『說了不一定會好,不說一定不會好!』
如果我為了迎合每個人,開始去掩飾原本的情緒,開始用皆大歡喜的說
法來溝通,是不是會比較好?
如果生氣,卻還要想想如何表達才能不傷人,又要傳達出我很憤怒的情
緒?這樣真的能行嗎?這樣還叫做生氣嗎?
給那些不一定有幸看到這篇文章,但是我有些話想告誡的人
Who do you think you are? You are nobody!
沒有那個能耐讓大家亂了陣腳!
永遠別再希冀誰會再給予幫助。
或者敵人上架,不顧其他人甚至是一個團隊的好處,我堅持著那樣做就
是那樣做。
我媽說,人人不一樣,資質、經歷都有差。是的,我可以繼續這樣戰,
戰那些跟我意見不一樣的人,用我的高調語氣與尖銳的語言。月亮的男
人說我這樣不成人之美,以我的腦袋多想兩分鐘就可以用其他句子來說
一件事情,但我以前喜歡,也常用聽聞起來較為刺耳的字詞,因為那很
爽,可以把別人弄到失焦或者火冒三丈。我就像是惟恐天下不亂的樣子
!
就像是老師教學生那樣,老師可以用不同的方法教不同程度的學生,讓
每個學生都快快樂樂的有所學,不過那樣老師要花很多力氣想教學方法
。也可以用教精英的方法教所有學生,不過那樣的話,後段的學生只會
在下課後幹譙,或者跑去看妹。但是精英的學生可以學到更多東西!
這讓我想到『曲高和寡』的故事,不過不知道這意思這樣對不對。
看到很多人常常花時間放鬆自己,甚至有人無時無刻都在放鬆自己,而
且是近乎渾沌了的那種放鬆,他們花時間去做那種我認為毫無意思的事
情(注意到沒,這句話容易引戰?應該吧)我媽建議我選擇閉口不語,
我可以知道或者認為誰怎麼樣做不好,但是不用說出來,反正別人的命
是他的,他要怎麼使用與我何干?後面兩句話是我自己的註解。不是我
媽說的。
我認為,沒有什麼事情是不能說出來的,彼此的友誼或者任何關係之間
糝有著秘密或者謊言,怎麼可能不會垮掉?為什麼有人會認為不能講?
不講就會好嗎?學研營有一句話,做了不一定有機會,不做絕對沒機會
,依照偉期的照樣照句『說了不一定會好,不說一定不會好!』
如果我為了迎合每個人,開始去掩飾原本的情緒,開始用皆大歡喜的說
法來溝通,是不是會比較好?
如果生氣,卻還要想想如何表達才能不傷人,又要傳達出我很憤怒的情
緒?這樣真的能行嗎?這樣還叫做生氣嗎?
給那些不一定有幸看到這篇文章,但是我有些話想告誡的人
Who do you think you are? You are nobody!
沒有那個能耐讓大家亂了陣腳!
永遠別再希冀誰會再給予幫助。
rm link director 刪除建立的連結或者資料夾
案發經過(下面是一模一樣情況的模擬,不是刪掉當時檔案的經過)
pwd:/usr/home/aaa/bbb
ln -s /usr/home/aaa/ccc/ /usr/home/aaa/bbb/ccc
rm -r ccc/
也就是說我在 /usr/home/aaa/bbb/ccc
給了刪除ccc這個link的指令 rm -r ccc/
但是正確的方法是 rm ccc
我要刪掉的ccc是一個連結檔案,給了斜線並加上 -r 之後
變成遞迴刪除ccc/底下的東西,哭哭阿!!!
因為多給了一條斜線,所以資料全毀了!
pwd:/usr/home/aaa/bbb
ln -s /usr/home/aaa/ccc/ /usr/home/aaa/bbb/ccc
rm -r ccc/
也就是說我在 /usr/home/aaa/bbb/ccc
給了刪除ccc這個link的指令 rm -r ccc/
但是正確的方法是 rm ccc
我要刪掉的ccc是一個連結檔案,給了斜線並加上 -r 之後
變成遞迴刪除ccc/底下的東西,哭哭阿!!!
因為多給了一條斜線,所以資料全毀了!
最基本的密碼登入網頁製作方法
<html> |
<?php |
真的很簡單
在login.php輸入的資訊為兩個字串(當作是字串就可以了)
執行的動作是以POST的方法送到auth.php
然後執行auth.php這個網頁
又,在login.php裡面的字串有在auth.php裡面使用到
用途是作為判斷要輸出哪個字串的
伺服器端不會判斷你到底是不是正確使用者
但是他會檢查你輸入的字串符合哪個輸出條件,然後輸出相對應的東西
至於什麼是POST方法(另一種是GET方法)
新手可以先不要管,照著寫就好。
如果你想要深入了解的話在去找資料看吧
google,php教學就有很多資料了
或者,我推薦,「碼上學會PHP5&MySQL5」這本中文書
ISBN
978-986-6884-05-4
上面的code轉自
http://php.igt.com.tw/unit_102.htm
防止被搜尋引擎找到的方法
http://www.mcanerin.com/EN/search-engine/robots-txt.asp
要不被搜索引擎找到
你必須是該網站的管理員才行
因為我們必須新增一個叫做robots.txt的純文字檔案
並且放在www服務的根目錄下
最基本的範例,如
--
# Disallows all robots
User-agent: *
Disallow: /
--
將上面的內容寫到名為robots.txt的檔案裡面
並將該檔放置於網頁根目錄,如此一來搜索引擎機器人就不會搜索你的網頁了
至於,放在其他地方會不會生效。
這份文件是怎麼作用的我並不清楚,改天知道的話會來補充。
要不被搜索引擎找到
你必須是該網站的管理員才行
因為我們必須新增一個叫做robots.txt的純文字檔案
並且放在www服務的根目錄下
最基本的範例,如
--
# Disallows all robots
User-agent: *
Disallow: /
--
將上面的內容寫到名為robots.txt的檔案裡面
並將該檔放置於網頁根目錄,如此一來搜索引擎機器人就不會搜索你的網頁了
至於,放在其他地方會不會生效。
這份文件是怎麼作用的我並不清楚,改天知道的話會來補充。
BBS ACCT 結構
下面是夢大的code
/*-------------------------------------------------------*/
/* struct.h ( NTHU CS MapleBBS Ver 2.36 ) */
/*-------------------------------------------------------*/
/* target : all definitions about data structure */
/* create : 95/03/29 */
/* update : 95/12/15 */
/*-------------------------------------------------------*/
#ifndef _STRUCT_H_
#define _STRUCT_H_
#define STRLEN 80 /* Length of most string data */
#define BTLEN 42 /* Length of board title */
#define BMLEN 36 /* Length of board managers */
#define TTLEN 72 /* Length of title */
#define FNLEN 28 /* Length of filename */
#define IDLEN 12 /* Length of board / user id */
#define PASSLEN 14 /* Length of encrypted passwd field */
#define BFLAG(n) (1 << n)/* 32 bit-wise flag */
typedef char const *STRING;
typedef unsigned char uschar; /* length = 1 */
typedef unsigned int usint; /* length = 4 */
typedef struct UTMP UTMP;
/* ban email 轉信用 */
typedef struct
{
char name[IDLEN+1];
} ADMIN;
typedef struct
{
char name[IDLEN+1];
char email[60];
} CONTACT;
typedef struct
{
char date[8];
char time[8];
char work[50];
} MEMORANDUM;
typedef struct
{
char data[48];
int mode;
time_t time;
int usage;
} BANMAIL;
typedef struct
{
char data[48];
int mode; time_t time;
int usage;
char name[IDLEN+1];
} FW;
#define FW_OWNER 0x01
#define FW_TITLE 0x02
#define FW_TIME 0x04
#define FW_PATH 0x08
#define FW_ORIGIN 0x10
#define FW_ALL 0xFF
/* ----------------------------------------------------- */
/* 使用者帳號 .ACCT struct : 512 bytes */
/* ----------------------------------------------------- */
typedef struct
{
int userno; /* 使用者編號 */
char userid[IDLEN + 1]; /* 使用者ID */
char passwd[PASSLEN]; /* DES編碼過後的密碼 */
uschar signature; /* 使用的簽名檔編號 */
char realname[20]; /* 真實性名 */
char username[24]; /* 暱稱 */
usint userlevel; /* user perm */
int numlogins; /* 登入次數 */
int numposts; /* 發文次數 */
usint ufo; /* user basic flags */
time_t firstlogin; /* 第一次登入時間 */
time_t lastlogin; /* 最後一次登入時間 */
time_t staytime; /* 總共停留時間 */
time_t tcheck; /* time to check mbox/pal */
char lasthost[32]; /* 上次登入來源 */
int numemail; /* 寄發 Inetrnet E-mail 次數 */
time_t tvalid; /* 通過認證、更改 mail address 的時間 */
char email[60]; /* 使用者信箱 */
char address[60]; /* 使用者地址 */
char justify[60]; /* FROM of replied justify mail */
char vmail[60]; /* 通過認證之 email */
time_t deny; /* user violatelaw time */
int extrambox; /* 加大信箱 (最大 50 封) */
int extrasize; /* 加大信箱容量 (最大 1000K) */
usint ufo2; /* 延伸的個人設定 */
char ident[104]; /* user remote host ident */
time_t vtime; /* validate time */
} ACCT;
typedef struct
{
int money; /* 夢幣 */
int save; /* 存款 */
int request; /* 小雞點券 */
// int request_times; /* 當天點歌次數 */
// char lastrequestdate[11]; /* 最後點歌日期 */
} MONEY;
typedef struct /* 16 bytes */
{
time_t uptime;
char userid[IDLEN];
} SCHEMA;
#ifdef HAVE_REGISTER_FORM
typedef struct /* 註冊表單 (Register From) 256 bytes */
{
int userno;
time_t rtime;
char userid[IDLEN + 1];
char agent[IDLEN + 1];
char realname[20];
char career[50];
char address[60];
char phone[20];
char reply[61];
char idno[11];
} RFORM;
#ifndef HAVE_SIMPLE_RFORM
typedef struct
{
int userno;
char userid[IDLEN + 1];
char msg[80];
} RFORM_R;
#endif
#endif
/* ----------------------------------------------------- */
/* User Flag Option : flags in ACCT.ufo */
/* ----------------------------------------------------- */
#define UFO_COLOR BFLAG(0) /* true if the ANSI color mode open */
#define UFO_MOVIE BFLAG(1) /* true if show movie */
#define UFO_BRDNEW BFLAG(2) /* 新文章模式 */
#define UFO_BNOTE BFLAG(3) /* 顯示進板畫面 */
#define UFO_VEDIT BFLAG(4) /* 簡化編輯器 */
#define UFO_PAGER BFLAG(5) /* 關閉呼叫器 */
#define UFO_QUIET BFLAG(6) /* 結廬在人境,而無車馬喧 */
//#define UFO_PAL BFLAG(7) /* 訊息上限拒收訊息 */
#define UFO_MAXMSG BFLAG(7) /* 訊息上限拒收訊息 */
#define UFO_FORWARD BFLAG(8) /* 自動轉寄 */
//#define UFO_ALOHA BFLAG(8) /* 自動轉寄 */
#define UFO_CLASSTABLE BFLAG(9) /* 功課表通知 */
//#define UFO_MOTD BFLAG(9) /* 功課表通知 */
//#define UFO_MIME BFLAG(13) /* MIME 解碼 */
#define UFO_BROADCAST BFLAG(14) /* 拒收廣播 */
//#define UFO_SIGN BFLAG(15) /* 簽名檔 */
//#define UFO_SHOWUSER BFLAG(16) /* 顯示 ID 和 暱稱 */
//#define UFO_WATER BFLAG(10) /* 多重水球 */
//#define UFO_BMWRECORD BFLAG(11) /* 水球紀錄 */
//#define UFO_BMWRESERVE BFLAG(12) /* 水球記錄離站預設保存 */
//#define UFO_BMWDELETE BFLAG(13) /* 水球記錄離站預設刪除 */
#define UFO_HIDEDN BFLAG(18) /* 隱藏來源 */
#define UFO_CLOAK BFLAG(19) /* true if cloak was ON */
#define UFO_ACL BFLAG(20) /* true if ACL was ON */
#define UFO_NET BFLAG(21) /* visor.991030: 網路程式 */
#define UFO_WEB BFLAG(22) /* visor.020325: WEB */
#define UFO_MPAGER BFLAG(10) /* lkchu.990428: 電子郵件傳呼 */
//#define UFO_NWLOG BFLAG(11) /* lkchu.990510: 不存對話紀錄 */
//#define UFO_NTLOG BFLAG(12) /* lkchu.990510: 不存聊天紀錄 */
#define UFO_MESSAGE BFLAG(23) /* visor.991030: 訊息全關 */
#define UFO_PAGER1 BFLAG(26) /* visor.991030: 呼叫器全關 */
/* ----------------------------------------------------- */
/* bit 24-27 : client/server or telnet BBS */
/* ----------------------------------------------------- */
#define UFO_BIFFN BFLAG(24) /* 有新訊息 */
#define UFO_SPARE BFLAG(25) /* ready for connection */
/* these are flags in UTMP.ufo */
#define UFO_BIFF BFLAG(27) /* 有新信件 */
#define UFO_SOCKET BFLAG(28) /* true if socket port active */
#define UFO_REJECT BFLAG(29) /* true if reject any body */
/* special purpose */
#define UFO_FCACHE BFLAG(30) /* 有好友 */
#define UFO_MQUOTA BFLAG(31) /* 信箱中有待清理之信件 */
#define UFO_UTMP_MASK (UFO_BIFF|UFO_BIFFN)
/* Thor.980805: 定義ufo中以utmp->ufo為本尊的flag, 解決與cuser.ufo不同步的問題 */
/* ----------------------------------------------------- */
/* User Flag Option Extend: flags in ACCT.ufo2 */
/* ----------------------------------------------------- */
#define UFO2_COLOR BFLAG(0) /* true if the ANSI color mode open */
#define UFO2_MOVIE BFLAG(1) /* true if show movie */
#define UFO2_BRDNEW BFLAG(2) /* 新文章模式 */
#define UFO2_BNOTE BFLAG(3) /* 顯示進板畫面 */
#define UFO2_VEDIT BFLAG(4) /* 簡化編輯器 */
#define UFO2_PAL BFLAG(5) /* true if show pals only */
#define UFO2_MOTD BFLAG(6) /* 簡化進站畫面 */
#define UFO2_MIME BFLAG(7) /* MIME 解碼 */
#define UFO2_SIGN BFLAG(8) /* 簽名檔 */
#define UFO2_SHOWUSER BFLAG(9) /* 顯示 ID 和 暱稱 */
#define UFO2_PRH BFLAG(10) /* 顯示推薦文章分數 */
#define UFO2_SHIP BFLAG(11) /* visor.991030: 好友描述 */
#define UFO2_NWLOG BFLAG(12) /* lkchu.990510: 不存對話紀錄 */
#define UFO2_NTLOG BFLAG(13) /* lkchu.990510: 不存聊天紀錄 */
#define UFO2_CIRCLE BFLAG(14) /* 循環閱讀 */
#define UFO2_ORIGUI BFLAG(15) /* 關閉風之塔超炫介面 */
#define UFO2_DEF_ANONY BFLAG(16) /* 預設不匿名 */
#define UFO2_DEF_LEAVE BFLAG(17) /* 預設不離站 */
#define UFO2_REPLY BFLAG(18) /* 開啟水球回顧介面 */
#define UFO2_READNEWS BFLAG(19) /* 上站就讀新聞 */
#define UFO2_ONLINE BFLAG(20) /* 關閉作者線上提示 */
#define UFO2_BOTTOM BFLAG(21) /* 關閉置底功能 */
#define UFO2_ACL BFLAG(24) /* true if ACL was ON */
#define UFO2_REALNAME BFLAG(28) /* visor.991030: 真實姓名 */
#include "hdr.h"
/* ----------------------------------------------------- */
/* control of board vote : 256 bytes */
/* ----------------------------------------------------- */
typedef struct VoteControlHeader
{
time_t chrono; /* 投票開辦時間 */ /* Thor:為 key */
/* 而且 match HDR chrono */
time_t bstamp; /* 看板辨識代碼 */ /* Thor:為 key */
time_t vclose; /* 投票結束時間 */
char xname[17]; /* 主檔名 */ /* Thor: match HDR的xname */
char vsort; /* 開票結果是否排序 */
char vpercent; /* 是否顯示百分比例 */
char cdate[9]; /* 結束日期 */ /* Thor.990329: 只供顯示, y2k */
int maxblt; /* 每人可投幾票 */
char owner[129]; /* 舉辦人 */
char check; /* 學生投票系統 */
char date[9]; /* 開始日期 */ /* Thor: match HDR的date*/
char title[TTLEN + 1]; /* 投票主題 */
} VCH;
typedef struct VoteStudents
{
char grad[3];
char major[2];
char first[4];
char last[4];
char end;
} VCHS;
typedef char vitem_t[32]; /* 投票選項 */
/* filepath : brd//.VCH, brd//@/... */
/* ----------------------------------------------------- */
/* Mail-Queue struct : 256 bytes */
/* ----------------------------------------------------- */
typedef struct
{
time_t mailtime; /* 寄信時間 */
char method;
char sender[IDLEN + 1];
char username[24];
char subject[TTLEN + 1];
char rcpt[60];
char filepath[77];
char *niamod; /* reverse domain */
} MailQueue;
#define MQ_UUENCODE 0x01 /* 先 uuencode 再寄出 */
#define MQ_JUSTIFY 0x02 /* 身分認證信函 */
#define MQ_MIME 0x04 /* MIME */
/* ----------------------------------------------------- */
/* PAL : friend struct : 64 bytes */
/* ----------------------------------------------------- */
typedef struct
{
char userid[IDLEN + 1];
char ftype;
char ship[46];
int userno;
} PAL;
#ifdef HAVE_BANMSG
typedef struct
{
char userid[IDLEN + 1];
char ship[46];
int userno;
} BANMSG;
#endif
/* 上站通知名單 */
typedef struct
{
char userid[IDLEN+1];
int userno;
} ALOHA;
#define PAL_BAD 0x02 /* 好友 vs 損友 */
/* ----------------------------------------------------- */
/* structure for call-in message : 100 bytes */
/* ----------------------------------------------------- */
typedef struct
{
time_t btime;
UTMP *caller; /* who call-in me ? */
// unsigned long long sender; /* calling userno */
// unsigned long long recver; /* called userno */
int sender;
int recver;
char userid[IDLEN + 1];
char msg[71]; /* 熱訊 */
} BMW; /* bbs message write */
#define BMW_MODE 0x01
/* ----------------------------------------------------- */
/* Structure used in UTMP file : 148 bytes */
/* ----------------------------------------------------- */
#ifdef HAVE_PIP_FIGHT1
typedef struct
{
char name[20];
int pid;
int hp; /*體力*/
int maxhp; /*體力上限*/
int mp; /*法力*/
int maxmp; /*法力上限*/
int attack; /*攻擊*/
int resist; /*防禦*/
int speed; /*速度*/
int mresist; /*魔法防禦*/
int resistmore; /*防禦型態*/
int nodone; /*完成*/
int leaving; /*離開*/
int pipmode; /*狀態*/
int mode; /*幾代雞*/
int msgcount; /*訊息個數*/
int chatcount;
char msg[150]; /*訊息內容*/
char chat[10][150]; /*聊天內容*/
} pipdata;
typedef struct
{
pipdata pip1;
pipdata pip2;
} PIPUTMP;
#endif
struct UTMP
{
pid_t pid; /* process ID */
int userno; /* user number in .PASSWDS */
time_t idle_time; /* active time for last event */
usint mode; /* bbsmode */
usint ufo; /* the same as userec.ufo */
u_long in_addr; /* Internet address */
int sockport; /* socket port for talk */
UTMP *talker; /* who talk-to me ? */
BMW *mslot[BMW_PER_USER];
char userid[IDLEN + 1]; /* user's ID */
char mateid[IDLEN + 1]; /* partner's ID */
char username[24];
char realname[20];
usint userlevel;
char from[30]; /* remote host */
char today[5];
#ifdef HAVE_SHOWNUMMSG
int num_msg; /* receive messages */
#endif
int pal_max; /* friends max */
int pal_spool[PAL_MAX]; /* friends spool */
#ifdef HAVE_BANMSG
int banmsg_max; /* banmsg max */
int banmsg_spool[BANMSG_MAX]; /* banmsg spool */
#endif
#ifdef HAVE_BOARD_PAL
// char board_pal[IDLEN + 1];
int board_pal;
#endif
#ifdef HAVE_PIP_FIGHT1
pipdata *pip;
#endif
#ifdef PREFORK
int bgen; /* generation */
#endif
};
/* ----------------------------------------------------- */
/* BOARDS struct : 256 bytes */
/* ----------------------------------------------------- */
typedef struct BoardHeader
{
char brdname[IDLEN + 1]; /* board ID */
char title[BTLEN + 1];
char color;
char class[5];
char BM[BMLEN + 1]; /* BMs' uid, token '/' */
uschar bvote; /* 共有幾項投票舉行中 */
time_t bstamp; /* 建立看板的時間, unique */
usint readlevel; /* 閱讀文章的權限 */
usint postlevel; /* 發表文章的權限 */
usint battr; /* 看板屬性 */
time_t btime; /* .DIR 的 st_mtime */
int bpost; /* 共有幾篇 post */
time_t blast; /* 最後一篇 post 的時間 */
usint expiremax; /* Expire Max Post */
usint expiremin; /* Expire Min Post */
usint expireday; /* Expire old Post */
char reserve[116]; /* 保留未用 */
} BRD;
#define BRD_NOZAP 0x00001 /* 不可 zap */
#define BRD_NOTRAN 0x00002 /* 不轉信 */
#define BRD_NOCOUNT 0x00004 /* 不計文章發表篇數 */
#define BRD_NOSTAT 0x00008 /* 不納入熱門話題統計 */
#define BRD_NOVOTE 0x00010 /* 不公佈投票結果於 [sysop] 板 */
#define BRD_ANONYMOUS 0x00020 /* 匿名看板 */
#define BRD_NOFORWARD 0x00040 /* lkchu.981201: 不可轉寄 */
#define BRD_LOGEMAIL 0x00080 /* 自動附加e-mail */
#define BRD_NOBAN 0x00100 /* 不擋信 */
#define BRD_NOLOG 0x00200 /* 不紀錄站內違法 */
#define BRD_NOCNTCROSS 0x00400 /* 不紀錄 cross post */
#define BRD_NOREPLY 0x00800 /* 不能回文章 */
#define BRD_NOLOGREAD 0x01000 /* 不紀錄看版閱讀率 */
#define BRD_CHECKWATER 0x02000 /* 紀錄灌水次數 */
#define BRD_CHANGETITLE 0x04000 /* 版主修改版名 */
#define BRD_MODIFY 0x08000 /* 使用者修改文章 */
#define BRD_PRH 0x10000 /* 推薦文章 */
#define BRD_BOTTOM 0x20000 /* 關閉置底功能 */
#define BRD_NOCROSS 0x40000 /* 不接受轉文章轉錄 */
#define POST_STOP_PERM 0x01 /* 自動抓 crosspost 開關旗標 */
typedef struct NewBoardHeader
{
char brdname[IDLEN + 1];
char title[49];
char category[5];
char bm[IDLEN * 3 + 3];
time_t btime;
time_t etime;
char xname[32];
char owner[IDLEN +1];
char date[9];
usint mode;
usint total;
usint agree;
usint assist;
char reserve[64];
} NBRD;
#define NBRD_ING 0x01 /* 連署中 */
#define NBRD_OPEN 0x02 /* 已開版 */
#define NBRD_CLOSE 0x04 /* 未達連署人數 */
#define NBRD_STOP 0x08 /* 禁止開版 停止連署 */
#define NBRD_OK 0x10 /* 連署完成 */
#define NBRD_START 0x20 /* 申請通過 */
#define NBRD_REJECT 0x40 /* 申請不通過 */
#define NBRD_NBRD 0x1000 /* 新版 */
#define NBRD_CANCEL 0x2000 /* 廢版主 */
#define NBRD_OTHER 0x8000 /* 其它 */
#define NBRD_MASK (NBRD_NBRD|NBRD_CANCEL|NBRD_OTHER)
/* ----------------------------------------------------- */
/* Class image */
/* ----------------------------------------------------- */
#define CLASS_INIFILE "Class"
#define CLASS_IMGFILE "run/class.img"
#define PROFESS_INIFILE "Profess"
#define PROFESS_IMGFILE "run/profess.img"
#define CH_END -1
#define CH_TTLEN 64
typedef struct
{
int count;
char title[CH_TTLEN];
short chno[0];
} ClassHeader;
/* ----------------------------------------------------- */
/* cache.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
int shot[MOVIE_MAX]; /* Thor.980805: 可能還要再加1,因合理範圍為0..MOVIE_MAX */
char film[MOVIE_SIZE];
} FCACHE;
#define FILM_SIZ 4000 /* max size for each film */
#define FILM_WELCOME (0)
#define FILM_GOODBYE (1)
#define FILM_APPLY (2) /* new account */
#define FILM_TRYOUT (3)
#define FILM_POST (4)
#define FILM_GEM (5) /* help message */
#define FILM_BOARD (6)
#define FILM_CLASS (7)
#define FILM_PAL (8)
#define FILM_MAIL (9)
#define FILM_ULIST (10)
#define FILM_VOTE (11)
#define FILM_MORE (12)
#define FILM_EDIT (13)
#define FILM_BMW (14)
#define FILM_BANMAIL (15)
#define FILM_INCOME (16)
#define FILM_ADMIN (17)
#define FILM_SONG (18)
#define FILM_MIME (19)
#define FILM_CONTACT (20)
#define FILM_MEMORANDUM (21)
#define FILM_ALOHA (22)
#define FILM_SIGNUP (23)
#define FILM_MOVIE (24) /* normal movies */
#define FILM_ROW (40)
typedef struct
{
UTMP uslot[MAXACTIVE]; /* UTMP slots */
usint count; /* number of active session */
usint offset; /* offset for last active UTMP */
double sysload[3];
int avgload;
BMW *mbase; /* sequential pointer for BMW */
BMW mpool[BMW_MAX];
#ifdef HAVE_PIP_FIGHT1
PIPUTMP pip[PIP_MAX];
#endif
} UCACHE;
typedef struct
{
BRD bcache[MAXBOARD];
int number;
time_t uptime;
} BCACHE;
typedef struct
{
BANMAIL fwcache[MAXFIREWALL];
int number;
} FWCACHE;
typedef struct
{
FW fwocache[MAXOFILEWALL];
int mode;
} FWOCACHE;
typedef struct
{
char verb[9]; /* 動詞 */
char chinese[7]; /* 中文翻譯 */
char part1_msg[60]; /* 介詞 */
char part2_msg[60]; /* 動作 */
} ChatAction;
typedef struct
{
ChatAction chat_speak[SPEAK_MAX+1];
ChatAction chat_condition[CONDITION_MAX+1];
ChatAction chat_party[PARTY_MAX+1];
ChatAction chat_party2[PARTY_MAX+1];
ChatAction chat_person[CONDITION_MAX+1];
} MUD;
/* ----------------------------------------------------- */
/* screen.c 中運用的資料結構 */
/* ----------------------------------------------------- */
#define ANSILINELEN (255) /* Maximum Screen width in chars */
/* 假設 160 個就夠用了,最多可以到 255 */
/* Screen Line buffer modes */
#define SL_MODIFIED (1) /* if line has been modifed, screen output */
#define SL_STANDOUT (2) /* if this line contains standout code */
#define SL_ANSICODE (4) /* if this line contains ANSI code */
typedef struct screenline
{
uschar oldlen; /* previous line length */
uschar len; /* current length of line */
uschar width; /* padding length of ANSI codes */
uschar mode; /* status of line, as far as update */
uschar smod; /* start of modified data */
uschar emod; /* end of modified data */
uschar sso; /* start of standout data */
uschar eso; /* end of standout data */
uschar data[ANSILINELEN];
} screenline;
typedef struct LinkList
{
struct LinkList *next;
char data[0];
} LinkList;
/* ----------------------------------------------------- */
/* xover.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct OverView
{
int pos; /* current position */
int top; /* top */
int max; /* max */
int key; /* key */
char *xyz; /* staff */
struct OverView *nxt; /* next */
char dir[0]; /* data path */
} XO;
typedef struct
{
int key;
int (*func) ();
} KeyFunc;
typedef struct
{
XO *xo;
KeyFunc *cb;
int mode;
} XZ;
typedef struct
{
time_t chrono;
int recno;
} TagItem;
#ifdef MODE_STAT
typedef struct
{
time_t logtime;
time_t used_time[30];
} UMODELOG;
typedef struct
{
time_t logtime;
time_t used_time[30];
int count[30];
int usercount;
} MODELOG;
#endif
/* ----------------------------------------------------- */
/* acct.c 中運用的資料結構 */
/* ----------------------------------------------------- */
#define DENY_SEL_TALK 0x00000001
#define DENY_SEL_POST 0x00000002
#define DENY_SEL_MAIL 0x00000004
#define DENY_SEL_AD 0x00000008
#define DENY_SEL_SELL 0x00000010
#define DENY_SEL_OK 0x00000020
#define DENY_SEL (DENY_SEL_TALK|DENY_SEL_POST|DENY_SEL_MAIL|DENY_SEL_AD|DENY_SEL_SELL)
#define DENY_DAYS_1 0x00010000
#define DENY_DAYS_2 0x00020000
#define DENY_DAYS_3 0x00040000
#define DENY_DAYS_4 0x00080000
#define DENY_DAYS_5 0x00100000
#define DENY_DAYS (DENY_DAYS_1|DENY_DAYS_2|DENY_DAYS_3|DENY_DAYS_4|DENY_DAYS_5)
#define DENY_MODE_TALK 0x01000000
#define DENY_MODE_MAIL 0x02000000
#define DENY_MODE_POST 0x04000000
#define DENY_MODE_GUEST 0x08000000
#define DENY_MODE_NICK 0x10000000
#define DENY_MODE_ALL (DENY_MODE_TALK|DENY_MODE_MAIL|DENY_MODE_POST|DENY_MODE_NICK|DENY_MODE_GUEST)
typedef struct
{
char email[60];
int num;
} SAME_EMAIL;
typedef struct
{
char email[56];
int times;
time_t deny;
} EMAIL;
/* ----------------------------------------------------- */
/* classtable.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
int lost;
char name[9];
char teacher[9];
char class[5];
char obj_id[7];
} CLASS;
typedef struct
{
int hour;
int min;
} CLOCK;
typedef struct
{
CLOCK start[13];
CLOCK end[13];
} CLASS_TIME;
typedef struct
{
int mode;
CLASS table[6][13];
CLASS_TIME time;
} CLASS_TABLE;
/* ----------------------------------------------------- */
/* list.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
char userid[IDLEN+1];
char userdesc[51];
} LIST;
typedef struct
{
char title[MAX_LIST][41];
} LIST_TITLE;
/* ----------------------------------------------------- */
/* counter.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
int hour_max_login;
int day_max_login;
int samehour_max_login;
int max_regist;
int cur_hour_max_login;
int cur_day_max_login;
time_t samehour_max_time;
int max_regist_old;
int samehour_max_login_old;
char ident[90];
} COUNTER;
typedef struct
{
time_t date;
int mode;
char userid[IDLEN + 1];
char username[19];
char buf[3][80];
} notedata;
typedef struct
{
int start;
int end;
} REAPER_TIME;
/* ----------------------------------------------------- */
/* 生日年齡星座統計 中運用的資料結構 */
/* ----------------------------------------------------- */
#ifdef HAVE_PERSON_DATA
#define USER_ATTR_SUPPORT 0x00000001
typedef struct
{
int year;
int month;
int day;
int sex;
int blood;
int mode;
char reserve[232];
} USER_ATTR;
#endif
typedef struct
{
char *grad;
char *server;
} YZU_MAIL;
typedef struct
{
char name[20];
char host[26];
char ip[16];
char port[6];
} BBSNET;
#define TOPLOGINS (0)
#define TOPPOSTS (1)
#define TOPNUM (50)
#define TOPNUM_HALF (TOPNUM/2)
typedef struct
{
char userid[IDLEN + 1];
char username[24];
int num;
} DATA;
#ifdef HAVE_CLASSTABLE
typedef struct
{
char condensation[9];
char name[30];
char teacher[11];
char other[30];
char room[20];
int valid;
int x;
int y;
} CLASS_TABLE2;
#ifdef HAVE_CLASSTABLEALERT
typedef struct
{
char condensation[9];
char room[20];
usint used;
} CLASS_TABLE_ALERT_ITEM;
typedef struct
{
CLASS_TABLE_ALERT_ITEM item[78];
usint userno;
} CLASS_TABLE_ALERT;
#endif
#endif
#ifdef HAVE_OBSERVE_LIST
typedef struct
{
char userid[16];
usint userno;
char title[64];
char reserve[44];
} OBSERVE;
typedef struct
{
usint userno[MAXOBSERVELIST];
int total;
int mode;
} OCACHE;
#endif
typedef struct
{
void *func;
/* int (*func) (); */
usint level;
int umode;
char *desc;
} MENU;
typedef struct PersonalBoard
{
char userid[IDLEN + 1];
char email[60];
char brdname[IDLEN + 1];
char brdtitle[BTLEN + 1];
usint state;
} PB;
#define PB_APPLY 0x01 /* 申請中 */
#define PB_OPEN 0x02 /* 已開版 */
#endif /* _STRUCT_H_ */
/*-------------------------------------------------------*/
/* struct.h ( NTHU CS MapleBBS Ver 2.36 ) */
/*-------------------------------------------------------*/
/* target : all definitions about data structure */
/* create : 95/03/29 */
/* update : 95/12/15 */
/*-------------------------------------------------------*/
#ifndef _STRUCT_H_
#define _STRUCT_H_
#define STRLEN 80 /* Length of most string data */
#define BTLEN 42 /* Length of board title */
#define BMLEN 36 /* Length of board managers */
#define TTLEN 72 /* Length of title */
#define FNLEN 28 /* Length of filename */
#define IDLEN 12 /* Length of board / user id */
#define PASSLEN 14 /* Length of encrypted passwd field */
#define BFLAG(n) (1 << n)/* 32 bit-wise flag */
typedef char const *STRING;
typedef unsigned char uschar; /* length = 1 */
typedef unsigned int usint; /* length = 4 */
typedef struct UTMP UTMP;
/* ban email 轉信用 */
typedef struct
{
char name[IDLEN+1];
} ADMIN;
typedef struct
{
char name[IDLEN+1];
char email[60];
} CONTACT;
typedef struct
{
char date[8];
char time[8];
char work[50];
} MEMORANDUM;
typedef struct
{
char data[48];
int mode;
time_t time;
int usage;
} BANMAIL;
typedef struct
{
char data[48];
int mode; time_t time;
int usage;
char name[IDLEN+1];
} FW;
#define FW_OWNER 0x01
#define FW_TITLE 0x02
#define FW_TIME 0x04
#define FW_PATH 0x08
#define FW_ORIGIN 0x10
#define FW_ALL 0xFF
/* ----------------------------------------------------- */
/* 使用者帳號 .ACCT struct : 512 bytes */
/* ----------------------------------------------------- */
typedef struct
{
int userno; /* 使用者編號 */
char userid[IDLEN + 1]; /* 使用者ID */
char passwd[PASSLEN]; /* DES編碼過後的密碼 */
uschar signature; /* 使用的簽名檔編號 */
char realname[20]; /* 真實性名 */
char username[24]; /* 暱稱 */
usint userlevel; /* user perm */
int numlogins; /* 登入次數 */
int numposts; /* 發文次數 */
usint ufo; /* user basic flags */
time_t firstlogin; /* 第一次登入時間 */
time_t lastlogin; /* 最後一次登入時間 */
time_t staytime; /* 總共停留時間 */
time_t tcheck; /* time to check mbox/pal */
char lasthost[32]; /* 上次登入來源 */
int numemail; /* 寄發 Inetrnet E-mail 次數 */
time_t tvalid; /* 通過認證、更改 mail address 的時間 */
char email[60]; /* 使用者信箱 */
char address[60]; /* 使用者地址 */
char justify[60]; /* FROM of replied justify mail */
char vmail[60]; /* 通過認證之 email */
time_t deny; /* user violatelaw time */
int extrambox; /* 加大信箱 (最大 50 封) */
int extrasize; /* 加大信箱容量 (最大 1000K) */
usint ufo2; /* 延伸的個人設定 */
char ident[104]; /* user remote host ident */
time_t vtime; /* validate time */
} ACCT;
typedef struct
{
int money; /* 夢幣 */
int save; /* 存款 */
int request; /* 小雞點券 */
// int request_times; /* 當天點歌次數 */
// char lastrequestdate[11]; /* 最後點歌日期 */
} MONEY;
typedef struct /* 16 bytes */
{
time_t uptime;
char userid[IDLEN];
} SCHEMA;
#ifdef HAVE_REGISTER_FORM
typedef struct /* 註冊表單 (Register From) 256 bytes */
{
int userno;
time_t rtime;
char userid[IDLEN + 1];
char agent[IDLEN + 1];
char realname[20];
char career[50];
char address[60];
char phone[20];
char reply[61];
char idno[11];
} RFORM;
#ifndef HAVE_SIMPLE_RFORM
typedef struct
{
int userno;
char userid[IDLEN + 1];
char msg[80];
} RFORM_R;
#endif
#endif
/* ----------------------------------------------------- */
/* User Flag Option : flags in ACCT.ufo */
/* ----------------------------------------------------- */
#define UFO_COLOR BFLAG(0) /* true if the ANSI color mode open */
#define UFO_MOVIE BFLAG(1) /* true if show movie */
#define UFO_BRDNEW BFLAG(2) /* 新文章模式 */
#define UFO_BNOTE BFLAG(3) /* 顯示進板畫面 */
#define UFO_VEDIT BFLAG(4) /* 簡化編輯器 */
#define UFO_PAGER BFLAG(5) /* 關閉呼叫器 */
#define UFO_QUIET BFLAG(6) /* 結廬在人境,而無車馬喧 */
//#define UFO_PAL BFLAG(7) /* 訊息上限拒收訊息 */
#define UFO_MAXMSG BFLAG(7) /* 訊息上限拒收訊息 */
#define UFO_FORWARD BFLAG(8) /* 自動轉寄 */
//#define UFO_ALOHA BFLAG(8) /* 自動轉寄 */
#define UFO_CLASSTABLE BFLAG(9) /* 功課表通知 */
//#define UFO_MOTD BFLAG(9) /* 功課表通知 */
//#define UFO_MIME BFLAG(13) /* MIME 解碼 */
#define UFO_BROADCAST BFLAG(14) /* 拒收廣播 */
//#define UFO_SIGN BFLAG(15) /* 簽名檔 */
//#define UFO_SHOWUSER BFLAG(16) /* 顯示 ID 和 暱稱 */
//#define UFO_WATER BFLAG(10) /* 多重水球 */
//#define UFO_BMWRECORD BFLAG(11) /* 水球紀錄 */
//#define UFO_BMWRESERVE BFLAG(12) /* 水球記錄離站預設保存 */
//#define UFO_BMWDELETE BFLAG(13) /* 水球記錄離站預設刪除 */
#define UFO_HIDEDN BFLAG(18) /* 隱藏來源 */
#define UFO_CLOAK BFLAG(19) /* true if cloak was ON */
#define UFO_ACL BFLAG(20) /* true if ACL was ON */
#define UFO_NET BFLAG(21) /* visor.991030: 網路程式 */
#define UFO_WEB BFLAG(22) /* visor.020325: WEB */
#define UFO_MPAGER BFLAG(10) /* lkchu.990428: 電子郵件傳呼 */
//#define UFO_NWLOG BFLAG(11) /* lkchu.990510: 不存對話紀錄 */
//#define UFO_NTLOG BFLAG(12) /* lkchu.990510: 不存聊天紀錄 */
#define UFO_MESSAGE BFLAG(23) /* visor.991030: 訊息全關 */
#define UFO_PAGER1 BFLAG(26) /* visor.991030: 呼叫器全關 */
/* ----------------------------------------------------- */
/* bit 24-27 : client/server or telnet BBS */
/* ----------------------------------------------------- */
#define UFO_BIFFN BFLAG(24) /* 有新訊息 */
#define UFO_SPARE BFLAG(25) /* ready for connection */
/* these are flags in UTMP.ufo */
#define UFO_BIFF BFLAG(27) /* 有新信件 */
#define UFO_SOCKET BFLAG(28) /* true if socket port active */
#define UFO_REJECT BFLAG(29) /* true if reject any body */
/* special purpose */
#define UFO_FCACHE BFLAG(30) /* 有好友 */
#define UFO_MQUOTA BFLAG(31) /* 信箱中有待清理之信件 */
#define UFO_UTMP_MASK (UFO_BIFF|UFO_BIFFN)
/* Thor.980805: 定義ufo中以utmp->ufo為本尊的flag, 解決與cuser.ufo不同步的問題 */
/* ----------------------------------------------------- */
/* User Flag Option Extend: flags in ACCT.ufo2 */
/* ----------------------------------------------------- */
#define UFO2_COLOR BFLAG(0) /* true if the ANSI color mode open */
#define UFO2_MOVIE BFLAG(1) /* true if show movie */
#define UFO2_BRDNEW BFLAG(2) /* 新文章模式 */
#define UFO2_BNOTE BFLAG(3) /* 顯示進板畫面 */
#define UFO2_VEDIT BFLAG(4) /* 簡化編輯器 */
#define UFO2_PAL BFLAG(5) /* true if show pals only */
#define UFO2_MOTD BFLAG(6) /* 簡化進站畫面 */
#define UFO2_MIME BFLAG(7) /* MIME 解碼 */
#define UFO2_SIGN BFLAG(8) /* 簽名檔 */
#define UFO2_SHOWUSER BFLAG(9) /* 顯示 ID 和 暱稱 */
#define UFO2_PRH BFLAG(10) /* 顯示推薦文章分數 */
#define UFO2_SHIP BFLAG(11) /* visor.991030: 好友描述 */
#define UFO2_NWLOG BFLAG(12) /* lkchu.990510: 不存對話紀錄 */
#define UFO2_NTLOG BFLAG(13) /* lkchu.990510: 不存聊天紀錄 */
#define UFO2_CIRCLE BFLAG(14) /* 循環閱讀 */
#define UFO2_ORIGUI BFLAG(15) /* 關閉風之塔超炫介面 */
#define UFO2_DEF_ANONY BFLAG(16) /* 預設不匿名 */
#define UFO2_DEF_LEAVE BFLAG(17) /* 預設不離站 */
#define UFO2_REPLY BFLAG(18) /* 開啟水球回顧介面 */
#define UFO2_READNEWS BFLAG(19) /* 上站就讀新聞 */
#define UFO2_ONLINE BFLAG(20) /* 關閉作者線上提示 */
#define UFO2_BOTTOM BFLAG(21) /* 關閉置底功能 */
#define UFO2_ACL BFLAG(24) /* true if ACL was ON */
#define UFO2_REALNAME BFLAG(28) /* visor.991030: 真實姓名 */
#include "hdr.h"
/* ----------------------------------------------------- */
/* control of board vote : 256 bytes */
/* ----------------------------------------------------- */
typedef struct VoteControlHeader
{
time_t chrono; /* 投票開辦時間 */ /* Thor:為 key */
/* 而且 match HDR chrono */
time_t bstamp; /* 看板辨識代碼 */ /* Thor:為 key */
time_t vclose; /* 投票結束時間 */
char xname[17]; /* 主檔名 */ /* Thor: match HDR的xname */
char vsort; /* 開票結果是否排序 */
char vpercent; /* 是否顯示百分比例 */
char cdate[9]; /* 結束日期 */ /* Thor.990329: 只供顯示, y2k */
int maxblt; /* 每人可投幾票 */
char owner[129]; /* 舉辦人 */
char check; /* 學生投票系統 */
char date[9]; /* 開始日期 */ /* Thor: match HDR的date*/
char title[TTLEN + 1]; /* 投票主題 */
} VCH;
typedef struct VoteStudents
{
char grad[3];
char major[2];
char first[4];
char last[4];
char end;
} VCHS;
typedef char vitem_t[32]; /* 投票選項 */
/* filepath : brd/
/* ----------------------------------------------------- */
/* Mail-Queue struct : 256 bytes */
/* ----------------------------------------------------- */
typedef struct
{
time_t mailtime; /* 寄信時間 */
char method;
char sender[IDLEN + 1];
char username[24];
char subject[TTLEN + 1];
char rcpt[60];
char filepath[77];
char *niamod; /* reverse domain */
} MailQueue;
#define MQ_UUENCODE 0x01 /* 先 uuencode 再寄出 */
#define MQ_JUSTIFY 0x02 /* 身分認證信函 */
#define MQ_MIME 0x04 /* MIME */
/* ----------------------------------------------------- */
/* PAL : friend struct : 64 bytes */
/* ----------------------------------------------------- */
typedef struct
{
char userid[IDLEN + 1];
char ftype;
char ship[46];
int userno;
} PAL;
#ifdef HAVE_BANMSG
typedef struct
{
char userid[IDLEN + 1];
char ship[46];
int userno;
} BANMSG;
#endif
/* 上站通知名單 */
typedef struct
{
char userid[IDLEN+1];
int userno;
} ALOHA;
#define PAL_BAD 0x02 /* 好友 vs 損友 */
/* ----------------------------------------------------- */
/* structure for call-in message : 100 bytes */
/* ----------------------------------------------------- */
typedef struct
{
time_t btime;
UTMP *caller; /* who call-in me ? */
// unsigned long long sender; /* calling userno */
// unsigned long long recver; /* called userno */
int sender;
int recver;
char userid[IDLEN + 1];
char msg[71]; /* 熱訊 */
} BMW; /* bbs message write */
#define BMW_MODE 0x01
/* ----------------------------------------------------- */
/* Structure used in UTMP file : 148 bytes */
/* ----------------------------------------------------- */
#ifdef HAVE_PIP_FIGHT1
typedef struct
{
char name[20];
int pid;
int hp; /*體力*/
int maxhp; /*體力上限*/
int mp; /*法力*/
int maxmp; /*法力上限*/
int attack; /*攻擊*/
int resist; /*防禦*/
int speed; /*速度*/
int mresist; /*魔法防禦*/
int resistmore; /*防禦型態*/
int nodone; /*完成*/
int leaving; /*離開*/
int pipmode; /*狀態*/
int mode; /*幾代雞*/
int msgcount; /*訊息個數*/
int chatcount;
char msg[150]; /*訊息內容*/
char chat[10][150]; /*聊天內容*/
} pipdata;
typedef struct
{
pipdata pip1;
pipdata pip2;
} PIPUTMP;
#endif
struct UTMP
{
pid_t pid; /* process ID */
int userno; /* user number in .PASSWDS */
time_t idle_time; /* active time for last event */
usint mode; /* bbsmode */
usint ufo; /* the same as userec.ufo */
u_long in_addr; /* Internet address */
int sockport; /* socket port for talk */
UTMP *talker; /* who talk-to me ? */
BMW *mslot[BMW_PER_USER];
char userid[IDLEN + 1]; /* user's ID */
char mateid[IDLEN + 1]; /* partner's ID */
char username[24];
char realname[20];
usint userlevel;
char from[30]; /* remote host */
char today[5];
#ifdef HAVE_SHOWNUMMSG
int num_msg; /* receive messages */
#endif
int pal_max; /* friends max */
int pal_spool[PAL_MAX]; /* friends spool */
#ifdef HAVE_BANMSG
int banmsg_max; /* banmsg max */
int banmsg_spool[BANMSG_MAX]; /* banmsg spool */
#endif
#ifdef HAVE_BOARD_PAL
// char board_pal[IDLEN + 1];
int board_pal;
#endif
#ifdef HAVE_PIP_FIGHT1
pipdata *pip;
#endif
#ifdef PREFORK
int bgen; /* generation */
#endif
};
/* ----------------------------------------------------- */
/* BOARDS struct : 256 bytes */
/* ----------------------------------------------------- */
typedef struct BoardHeader
{
char brdname[IDLEN + 1]; /* board ID */
char title[BTLEN + 1];
char color;
char class[5];
char BM[BMLEN + 1]; /* BMs' uid, token '/' */
uschar bvote; /* 共有幾項投票舉行中 */
time_t bstamp; /* 建立看板的時間, unique */
usint readlevel; /* 閱讀文章的權限 */
usint postlevel; /* 發表文章的權限 */
usint battr; /* 看板屬性 */
time_t btime; /* .DIR 的 st_mtime */
int bpost; /* 共有幾篇 post */
time_t blast; /* 最後一篇 post 的時間 */
usint expiremax; /* Expire Max Post */
usint expiremin; /* Expire Min Post */
usint expireday; /* Expire old Post */
char reserve[116]; /* 保留未用 */
} BRD;
#define BRD_NOZAP 0x00001 /* 不可 zap */
#define BRD_NOTRAN 0x00002 /* 不轉信 */
#define BRD_NOCOUNT 0x00004 /* 不計文章發表篇數 */
#define BRD_NOSTAT 0x00008 /* 不納入熱門話題統計 */
#define BRD_NOVOTE 0x00010 /* 不公佈投票結果於 [sysop] 板 */
#define BRD_ANONYMOUS 0x00020 /* 匿名看板 */
#define BRD_NOFORWARD 0x00040 /* lkchu.981201: 不可轉寄 */
#define BRD_LOGEMAIL 0x00080 /* 自動附加e-mail */
#define BRD_NOBAN 0x00100 /* 不擋信 */
#define BRD_NOLOG 0x00200 /* 不紀錄站內違法 */
#define BRD_NOCNTCROSS 0x00400 /* 不紀錄 cross post */
#define BRD_NOREPLY 0x00800 /* 不能回文章 */
#define BRD_NOLOGREAD 0x01000 /* 不紀錄看版閱讀率 */
#define BRD_CHECKWATER 0x02000 /* 紀錄灌水次數 */
#define BRD_CHANGETITLE 0x04000 /* 版主修改版名 */
#define BRD_MODIFY 0x08000 /* 使用者修改文章 */
#define BRD_PRH 0x10000 /* 推薦文章 */
#define BRD_BOTTOM 0x20000 /* 關閉置底功能 */
#define BRD_NOCROSS 0x40000 /* 不接受轉文章轉錄 */
#define POST_STOP_PERM 0x01 /* 自動抓 crosspost 開關旗標 */
typedef struct NewBoardHeader
{
char brdname[IDLEN + 1];
char title[49];
char category[5];
char bm[IDLEN * 3 + 3];
time_t btime;
time_t etime;
char xname[32];
char owner[IDLEN +1];
char date[9];
usint mode;
usint total;
usint agree;
usint assist;
char reserve[64];
} NBRD;
#define NBRD_ING 0x01 /* 連署中 */
#define NBRD_OPEN 0x02 /* 已開版 */
#define NBRD_CLOSE 0x04 /* 未達連署人數 */
#define NBRD_STOP 0x08 /* 禁止開版 停止連署 */
#define NBRD_OK 0x10 /* 連署完成 */
#define NBRD_START 0x20 /* 申請通過 */
#define NBRD_REJECT 0x40 /* 申請不通過 */
#define NBRD_NBRD 0x1000 /* 新版 */
#define NBRD_CANCEL 0x2000 /* 廢版主 */
#define NBRD_OTHER 0x8000 /* 其它 */
#define NBRD_MASK (NBRD_NBRD|NBRD_CANCEL|NBRD_OTHER)
/* ----------------------------------------------------- */
/* Class image */
/* ----------------------------------------------------- */
#define CLASS_INIFILE "Class"
#define CLASS_IMGFILE "run/class.img"
#define PROFESS_INIFILE "Profess"
#define PROFESS_IMGFILE "run/profess.img"
#define CH_END -1
#define CH_TTLEN 64
typedef struct
{
int count;
char title[CH_TTLEN];
short chno[0];
} ClassHeader;
/* ----------------------------------------------------- */
/* cache.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
int shot[MOVIE_MAX]; /* Thor.980805: 可能還要再加1,因合理範圍為0..MOVIE_MAX */
char film[MOVIE_SIZE];
} FCACHE;
#define FILM_SIZ 4000 /* max size for each film */
#define FILM_WELCOME (0)
#define FILM_GOODBYE (1)
#define FILM_APPLY (2) /* new account */
#define FILM_TRYOUT (3)
#define FILM_POST (4)
#define FILM_GEM (5) /* help message */
#define FILM_BOARD (6)
#define FILM_CLASS (7)
#define FILM_PAL (8)
#define FILM_MAIL (9)
#define FILM_ULIST (10)
#define FILM_VOTE (11)
#define FILM_MORE (12)
#define FILM_EDIT (13)
#define FILM_BMW (14)
#define FILM_BANMAIL (15)
#define FILM_INCOME (16)
#define FILM_ADMIN (17)
#define FILM_SONG (18)
#define FILM_MIME (19)
#define FILM_CONTACT (20)
#define FILM_MEMORANDUM (21)
#define FILM_ALOHA (22)
#define FILM_SIGNUP (23)
#define FILM_MOVIE (24) /* normal movies */
#define FILM_ROW (40)
typedef struct
{
UTMP uslot[MAXACTIVE]; /* UTMP slots */
usint count; /* number of active session */
usint offset; /* offset for last active UTMP */
double sysload[3];
int avgload;
BMW *mbase; /* sequential pointer for BMW */
BMW mpool[BMW_MAX];
#ifdef HAVE_PIP_FIGHT1
PIPUTMP pip[PIP_MAX];
#endif
} UCACHE;
typedef struct
{
BRD bcache[MAXBOARD];
int number;
time_t uptime;
} BCACHE;
typedef struct
{
BANMAIL fwcache[MAXFIREWALL];
int number;
} FWCACHE;
typedef struct
{
FW fwocache[MAXOFILEWALL];
int mode;
} FWOCACHE;
typedef struct
{
char verb[9]; /* 動詞 */
char chinese[7]; /* 中文翻譯 */
char part1_msg[60]; /* 介詞 */
char part2_msg[60]; /* 動作 */
} ChatAction;
typedef struct
{
ChatAction chat_speak[SPEAK_MAX+1];
ChatAction chat_condition[CONDITION_MAX+1];
ChatAction chat_party[PARTY_MAX+1];
ChatAction chat_party2[PARTY_MAX+1];
ChatAction chat_person[CONDITION_MAX+1];
} MUD;
/* ----------------------------------------------------- */
/* screen.c 中運用的資料結構 */
/* ----------------------------------------------------- */
#define ANSILINELEN (255) /* Maximum Screen width in chars */
/* 假設 160 個就夠用了,最多可以到 255 */
/* Screen Line buffer modes */
#define SL_MODIFIED (1) /* if line has been modifed, screen output */
#define SL_STANDOUT (2) /* if this line contains standout code */
#define SL_ANSICODE (4) /* if this line contains ANSI code */
typedef struct screenline
{
uschar oldlen; /* previous line length */
uschar len; /* current length of line */
uschar width; /* padding length of ANSI codes */
uschar mode; /* status of line, as far as update */
uschar smod; /* start of modified data */
uschar emod; /* end of modified data */
uschar sso; /* start of standout data */
uschar eso; /* end of standout data */
uschar data[ANSILINELEN];
} screenline;
typedef struct LinkList
{
struct LinkList *next;
char data[0];
} LinkList;
/* ----------------------------------------------------- */
/* xover.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct OverView
{
int pos; /* current position */
int top; /* top */
int max; /* max */
int key; /* key */
char *xyz; /* staff */
struct OverView *nxt; /* next */
char dir[0]; /* data path */
} XO;
typedef struct
{
int key;
int (*func) ();
} KeyFunc;
typedef struct
{
XO *xo;
KeyFunc *cb;
int mode;
} XZ;
typedef struct
{
time_t chrono;
int recno;
} TagItem;
#ifdef MODE_STAT
typedef struct
{
time_t logtime;
time_t used_time[30];
} UMODELOG;
typedef struct
{
time_t logtime;
time_t used_time[30];
int count[30];
int usercount;
} MODELOG;
#endif
/* ----------------------------------------------------- */
/* acct.c 中運用的資料結構 */
/* ----------------------------------------------------- */
#define DENY_SEL_TALK 0x00000001
#define DENY_SEL_POST 0x00000002
#define DENY_SEL_MAIL 0x00000004
#define DENY_SEL_AD 0x00000008
#define DENY_SEL_SELL 0x00000010
#define DENY_SEL_OK 0x00000020
#define DENY_SEL (DENY_SEL_TALK|DENY_SEL_POST|DENY_SEL_MAIL|DENY_SEL_AD|DENY_SEL_SELL)
#define DENY_DAYS_1 0x00010000
#define DENY_DAYS_2 0x00020000
#define DENY_DAYS_3 0x00040000
#define DENY_DAYS_4 0x00080000
#define DENY_DAYS_5 0x00100000
#define DENY_DAYS (DENY_DAYS_1|DENY_DAYS_2|DENY_DAYS_3|DENY_DAYS_4|DENY_DAYS_5)
#define DENY_MODE_TALK 0x01000000
#define DENY_MODE_MAIL 0x02000000
#define DENY_MODE_POST 0x04000000
#define DENY_MODE_GUEST 0x08000000
#define DENY_MODE_NICK 0x10000000
#define DENY_MODE_ALL (DENY_MODE_TALK|DENY_MODE_MAIL|DENY_MODE_POST|DENY_MODE_NICK|DENY_MODE_GUEST)
typedef struct
{
char email[60];
int num;
} SAME_EMAIL;
typedef struct
{
char email[56];
int times;
time_t deny;
} EMAIL;
/* ----------------------------------------------------- */
/* classtable.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
int lost;
char name[9];
char teacher[9];
char class[5];
char obj_id[7];
} CLASS;
typedef struct
{
int hour;
int min;
} CLOCK;
typedef struct
{
CLOCK start[13];
CLOCK end[13];
} CLASS_TIME;
typedef struct
{
int mode;
CLASS table[6][13];
CLASS_TIME time;
} CLASS_TABLE;
/* ----------------------------------------------------- */
/* list.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
char userid[IDLEN+1];
char userdesc[51];
} LIST;
typedef struct
{
char title[MAX_LIST][41];
} LIST_TITLE;
/* ----------------------------------------------------- */
/* counter.c 中運用的資料結構 */
/* ----------------------------------------------------- */
typedef struct
{
int hour_max_login;
int day_max_login;
int samehour_max_login;
int max_regist;
int cur_hour_max_login;
int cur_day_max_login;
time_t samehour_max_time;
int max_regist_old;
int samehour_max_login_old;
char ident[90];
} COUNTER;
typedef struct
{
time_t date;
int mode;
char userid[IDLEN + 1];
char username[19];
char buf[3][80];
} notedata;
typedef struct
{
int start;
int end;
} REAPER_TIME;
/* ----------------------------------------------------- */
/* 生日年齡星座統計 中運用的資料結構 */
/* ----------------------------------------------------- */
#ifdef HAVE_PERSON_DATA
#define USER_ATTR_SUPPORT 0x00000001
typedef struct
{
int year;
int month;
int day;
int sex;
int blood;
int mode;
char reserve[232];
} USER_ATTR;
#endif
typedef struct
{
char *grad;
char *server;
} YZU_MAIL;
typedef struct
{
char name[20];
char host[26];
char ip[16];
char port[6];
} BBSNET;
#define TOPLOGINS (0)
#define TOPPOSTS (1)
#define TOPNUM (50)
#define TOPNUM_HALF (TOPNUM/2)
typedef struct
{
char userid[IDLEN + 1];
char username[24];
int num;
} DATA;
#ifdef HAVE_CLASSTABLE
typedef struct
{
char condensation[9];
char name[30];
char teacher[11];
char other[30];
char room[20];
int valid;
int x;
int y;
} CLASS_TABLE2;
#ifdef HAVE_CLASSTABLEALERT
typedef struct
{
char condensation[9];
char room[20];
usint used;
} CLASS_TABLE_ALERT_ITEM;
typedef struct
{
CLASS_TABLE_ALERT_ITEM item[78];
usint userno;
} CLASS_TABLE_ALERT;
#endif
#endif
#ifdef HAVE_OBSERVE_LIST
typedef struct
{
char userid[16];
usint userno;
char title[64];
char reserve[44];
} OBSERVE;
typedef struct
{
usint userno[MAXOBSERVELIST];
int total;
int mode;
} OCACHE;
#endif
typedef struct
{
void *func;
/* int (*func) (); */
usint level;
int umode;
char *desc;
} MENU;
typedef struct PersonalBoard
{
char userid[IDLEN + 1];
char email[60];
char brdname[IDLEN + 1];
char brdtitle[BTLEN + 1];
usint state;
} PB;
#define PB_APPLY 0x01 /* 申請中 */
#define PB_OPEN 0x02 /* 已開版 */
#endif /* _STRUCT_H_ */
利用 javascript 嵌入 flv 影片至網頁
不知道怎麼讓code顯示出來
所以我貼圖好了= =a

裡面的播放畫面會用到 mediaplayer.swf
js檔案會用到 swfobject.js
我通通上傳到 http://www.mediafire.com/?jhzgya3xbs0 方便大家下載回去使用
code很簡單,看不懂的話再問吧
所以我貼圖好了= =a
裡面的播放畫面會用到 mediaplayer.swf
js檔案會用到 swfobject.js
我通通上傳到 http://www.mediafire.com/?jhzgya3xbs0 方便大家下載回去使用
code很簡單,看不懂的話再問吧
標籤:
Javascript
OpenOffice3.0beta,台灣高速下載點
官方連結速度太慢了
來義守大學速度快些,差不多你的網路有多快下載就有多快
http://ftp.isu.edu.tw/pub/OpenOffice/extended/
http://ftp.isu.edu.tw/pub/OpenOffice/extended/3.0.0beta/OOo_3.0.0beta_20080429_Win32Intel_install_wJRE_zh-TW.exe
順便附上3.0beta的連結~~
來義守大學速度快些,差不多你的網路有多快下載就有多快
http://ftp.isu.edu.tw/pub/OpenOffice/extended/
http://ftp.isu.edu.tw/pub/OpenOffice/extended/3.0.0beta/OOo_3.0.0beta_20080429_Win32Intel_install_wJRE_zh-TW.exe
順便附上3.0beta的連結~~
標籤:
OpenOffice
訂閱:
文章 (Atom)
標籤
- 少年聽雨歌樓上 (4)
- BBS (2)
- C語言 (5)
- FreeBSD (19)
- Javascript (1)
- Linux (3)
- OpenOffice (1)
- php (3)
- www (2)