+===================================================================+ + 專題 + +===================================================================+ 台北市立師範學院 指導老師: 賴阿福 老師 學生:周凡淇 班級:數三 A 學號:863007 E-mail: nora@math.tmtc.edu.tw ms863007@mail2.tmtc.edu.tw 一、前言 【 本網頁建構於 FreeBSD 3.4 + Apache 1.3.11 + mysql-3.22.27 】 1. 本系的首頁最下方寫著這幾個不起眼的字。 先從FreeBSD說起,簡單的說,FreeBSD就是一個作業系統,正如其名 "Free",它是不用錢的,but...,它好像和我們的日常生活沒有關係 。其實很多時候大家都用過它,我們的市師 BBS 官方站 "松梅戀曲 就建構於 FreeBSD 上,還有學校的 Name Server ( DNS )當然,數 理系的網站、資料庫、 BBS(阿基米德)都建構在 FreeBSD 上。 為什麼要建構於 FreeBSD 而不選擇強大的 Windows 2000 Server版 ? 在數理系簡單的配備( 感謝立德的主機版、硬碟還有長峻的 cpu)下 FreeBSD 能比 Windows 2000 發揮出強很多的效能,除此之外還有授 權費,十人版(最多十人同時上線)的 Windows 2000 Server好像要 十多萬元,與其拿十多萬去買授權不如用這些錢來增加硬體。 結論:一個強大的 OS 。 2. Apache,中文翻作阿帕契,小學六年級時波灣戰爭時常聽到的直昇機名字。 就是拿來建置WWW網站的一個軟體啦~,跟 FreeBSD 一樣,是不用錢的 ,哪裡有裝呢?學校的 mail2 就有啦~~,在自己的目錄下建一個 pub_html ,把網頁放進去,在 IE 或 NS 上打 http://mail2.tmtc.edu.tw/~msxxxxxx 就可看到自己做的網頁, 這就是 Apache 的功用。 目前世界上的占有率大概是 60%,世界第一。 3. mysql--->唸作 my ess q l ,這是極正確的唸法,但是我認識的人中 只有我會這樣子唸,其它人都是唸 my si qual,無妨。 Mysql,一個資料庫的名稱,如同微軟的 Access 一樣,是一個資料庫。 只要不是在商業用途上都不需付費,它是所有資料庫中最陽春的一種資料 庫,也很容易學,要做出如數理系那樣子的學生搜尋引擎用的函數大概是 五個左右,再用程式去美化一下,要做出如接近奇摩站那般的搜尋引擎是 不難的。 4. PHP是一種伺服端(server-side),跨平台(cross-platform),簡單易學的 HTML嵌入式非編譯性語言(HTML embedded scripting language)。它通過 模組(module)的形式和Apache伺服器結合,提供多種連結資料庫的介面, 如MySQL,mSQL,PostgreSQL,Sybase ,Informix,InterBase等。 以四行上摘自 http://mark.ee.nctu.edu.tw:8888/php3/doc/ 伺服端:也就是說它會在 Server 端執行完畢再把結果送給 client 端 無疑的,這會加重 Server 的負載 (loading),以前的電腦網 路課應該有學過,把一些不必要的計算送給 client 端去計算 可以避免 Server 端過重的負載,進而加快速度。 跨平台:就是說在很多種 OS 上都可以用, Win 98 也可以,只是我沒 試過。 模組:這個……,不太清楚,在我的概念裡就像是一個模子,有需要用到 的時候就灌一個出來用…??在 FreeBSD 下的說法:模組,要用的 時候再掛上去~~??例如我現在要聽音樂,那麼我就把模組掛上, 這樣子才能聽,不用的時候就拿掉,才不會佔系統的資源,我不知 道有沒有一樣~~,一個頭兩個大。 二、安裝:假設你已經灌完 FreeBSD 1. 先找到套件,數理系 FTP 上有 位址: ftp://163.21.240.83/sourcecode/ 裡面有 apache_1.3.12.tar.gz mysql-3.22.32.tar.gz php-3.0.15.tar.gz 以 root 的權限來做。 先把以上套件抓到 /tmp 下面。 然後解壓縮 tar zxvf apache_1.3.12.tar.gz------------>解壓縮 tar zxvf mysql-3.22.32.tar.gz------------>解壓縮 tar zxvf php-3.0.15.tar.gz--------------->解壓縮 以上解壓縮完之後應該會出現三個目錄 apache_1.3.12 mysql-3.22.32 php-3.0.15 2. 先裝 mysql cd mysql-3.22.32,到 mysql 的目錄下 執行 ./configure --help ,會有簡單的英文解說,把你要用到的記錄下來。 執行 ./configure --prefix=/usr/local --localstatedir=/usr/local/var --with-named-thread-libs=-lc_r --with-charset=big5 以上兩行在輸入時請打成一行(就是不要管,一直打下去,直到打完) 執行完畢後 鍵入 make -------->編譯。 執行完畢後 鍵入 make install -------->把檔案裝到該裝的目錄,如我們用 --prefix=/usr/local 來指定安裝的目錄 make install 就會把檔案裝到這裡。 然後,在原始碼的目錄下 cd scripts 執行 mysql_install_db OK 3. 再來安裝 apache + php3 到 apache_1.3.12 的目錄下。 執行 ./configure --prefix=/home/apache 指定安裝的目錄。 cd .. 到上一層 cd php-3.0.15--------->到php3 的原始碼目錄下 ./configure --with-mysql=/usr/local --with-apache=../apache_1.3.12 然後鍵入 make 再鍵入 make install cd .. 到上一層 cd apache_1.3.12 到apache 的目錄下 ./configure --prefix=/home/apache --activate-module=src/modules/php3 /libphp3.a 執行 make 執行 make install 然後修改 Apache 的設定檔在 /home/apache/conf 裡面的 httpd.conf 找到 DirectoryIndex index.html ,在後面加上 index.php3 再找到 AddType application/x-httpd-php3 .php3 改完儲存。 然後到你解開 php3 原始碼的目錄下 執行 cp php3.ini-dist /usr/local/lib/php3.ini 這樣子就行 由於我們只做資料庫和 php 的結和,如果要做到和數理系一樣的 WebMail 那就不只是這麼簡單,有一大段路要走~~,那真的是非常非常的麻煩! 所以,略過不說。 三、Mysql 照之前安裝的步驟,mysql 在 /usr/local/share/mysql 的地方。 mysql 的指令就不要說太多,說幾個就好,剩下的我們就自己寫一個 php3 的程式來幫我們做,不然的話,以數理系的學生名單存入為例,每加入一個 學生我們都要打一次: INSERT INTO studentDB (id, name, no) VALUES ('', '周凡淇', '863007') 這樣子啟不是會昏倒,當初我打了一百八十份的資料,雖然說複製貼上很方便 ,但是,如果照這樣子去做真的會死掉。而且這個只有三個欄位 id name no, 等會再說如何用 php3 來自己寫一個方便的小程式來存入資料。 1、開始執行 mysql 到 /usr/loca/share/mysql 中 執行 chmod +x mysql.server 把 mysql.server 加入可執行的屬性 然後執行 ./mysql.server start 這樣子就可以開始使用了。 要進入資料庫的話就執行 mysql 就會進入 mysql> 這樣子就可以開始用啦! 要離開的話就按 exit 再按 Enter 即可。 註: chmod +x 是用來加入"可執行"的屬性。 2、設定密碼 SET PASSWORD FOR root=PASSWD('密碼'); 要記得設定密碼,不然任何人都可以透過 php3 存取你的資料庫 ; --->用來結束命令用的,在 mysql> 裡面 Enter 只是用來斷行 讓你容易看而已,並不是用來執行命令,一定要在最後加上一個分號 再按 Enter 才會去執行。 註: PASSWD('密碼'),是一個函數,用來加密的。 3、開一個資料庫 mysql>CREATE DATABASE 資料庫名稱 ; 如 mysql>create database Students; 除了資料庫名稱外,其它大小寫沒差。 4、在資料庫中開一個資料表。 mysql> use 資料庫名稱; mysql> CREATE TABLE 資料表名稱(欄位的定義) 欄位的定義很多,以數理學生資料庫為例,只用到了三種。 mysql>CREATE TABLE studentsDB (id INT (6) not null AUTO_INCREMENT, name VARCHAR (20) not null, no INT (7) not null , PRIMARY KEY (id) ) ; 這一行所代表的意思是說,開了一個叫做 studentsDB 的 table ,而裡面 有 id, name , no 等三個欄位, 而欄位名稱後面的是代表欄位的屬性。 如下: a.id INT (6) not null AUTO_INCREMENT就是說,它被定義為 int 即整 數,佔了 6 個位元組, not null 就是不允許資料為空資料,也就是 說,插入資料時一定要有數據。 b.name VARCHAR (20) not null varchar (20),每個欄位所佔的位元組是 20 ,但是如果長度不滿 20 設其長度為 n ,則實際佔的空間是 n+1 ,最後一個位元組用來 記錄其長度。 c.id:設為 PRIMARY KEY即主鍵,具有唯一性,可用來做為連外鍵。 它是設計用來減少資料的重覆性的,即可以做為連外鍵。 我再印我的筆出來給你們看好了,用打的實在說的不清楚。 四、 資料庫的結構 +-----+----------+--------+ | id | name | no | +-----+----------+--------+ | 1 | 許\\育瑋 | 883001 | | 2 | 郭士豪 | 883002 | | 3 | 柯政宏 | 883003 | | 4 | 陳皇印 | 883004 | | 5 | 許\振一 | 883005 | +-----+----------+--------+ 這樣子就是一個小小的資料庫中的資料表。 這是放在 Students 的 資料庫(Database) 中的一個 資料表(table)。 最頂端的 id name no 就是代表三個名為 id , name,no 的欄位。 Students____________studentDB |_______86studentDB |_______87studentDB Students 就是一個資料庫,裡面包含了 studentDB 、 86studentDB、87studentDB 等資料表。 介紹一下選取資料的語法。 選取資料的語法相當的英文。真的很英文,就連我這個英文比彥宏爛的人都 看得懂。 以上面的資料庫為例,我想要找出學號為 883003 的姓名只要下 mysql> use students; ------>先用 Students 這個資料庫 mysql> select name from studentDB where no='883003'; ----->再從 studentDB 來找 no 為 883003 的 name。 這樣子就會得到下面的結果 +--------+ | name | +--------+ | 柯政宏 | +--------+ 1 row in set (0.01 sec) 想要找出學號為883004這個人的 id 、 name 還有 no 只要下 mysql> select id,name,no from studentDB where no='883004'; 就會得到下面的結果 +----+--------+--------+ | id | name | no | +----+--------+--------+ | 4 | 陳皇印 | 883004 | +----+--------+--------+ 1 row in set (0.00 sec) 夠英文吧! 要找出所有名字裡面有"陳"這個字的呢? 就下 mysql> select id,name,no from studentDB where name like "%陳%"; % 為"任何"長度的萬用字元。 得到的結果如下 +-----+--------+--------+ | id | name | no | +-----+--------+--------+ | 4 | 陳皇印 | 883004 | | 7 | 陳正一 | 883009 | | 37 | 陳慶峰 | 883044 | | 56 | 陳永祥 | 883061 | | 57 | 陳信文 | 883062 | | 67 | 陳崇文 | 883073 | | 76 | 陳彥竹 | 883082 | | 80 | 陳建良 | 883086 | | 99 | 陳智凱 | 883108 | | 114 | 陳科良 | 873004 | | 121 | 陳盈帆 | 873011 | | 125 | 陳邵瑜 | 873016 | | 137 | 陳文迪 | 873029 | | 147 | 陳雪玉 | 873083 | | 154 | 陳建良 | 873047 | | 156 | 陳佳興 | 873049 | | 171 | 陳威駿 | 873064 | | 187 | 陳怡文 | 873082 | +-----+--------+--------+ 18 rows in set (0.00 sec) 如何?夠英文吧~~。(好冷……) 後記: 只可惜我的筆記實在是太難看了,除了我之外,這個世界上大概很難找到 第二個看得懂的,不然我就直接把筆記印出來,可以說資料庫的精華都在 裡面了(我還沒有看完,不過快了,只是春假央圖沒開,不然我這個春假就 可以結束了)。 資料庫的重要關念就是【存入資料】和【讀出資料】,存入資料有許多要 考慮的地方,考慮資料的重覆性,重覆性太高就用關聯性資料庫,但是使 用關聯性資料庫又會在速度上打折扣 (其實不用考慮這麼多,這些是在資 料量非常龐大的時候才需要用到,如企業用途……) 五、實做 #############################資料庫匯入############################# 以下是數理系的資料庫存入的程式~~ 我寫的~~嘿嘿,不過寫的很爛~,當初 VB 沒學好~~。
這裡只說一個東西,那就是