
完整程式檔案請參考 encryptor_function.php 。
我們在 encryptor_function.php 中,先 include encryptor.php ,這樣才能使用 Encrypt 類別 (class)
2 | include "encryptor.php" ; |
然後建立一個 Encrypt 物件與檔案路徑 "code.txt"
4 5 | $e = new Encrypt(); $data = "code.txt" ; |
由於這兩個變數 (variable) 在之後很多函數 (function) 都會用到,因此先建立起來,等一下當全域變數 (global variable) 使用。檔案路徑也就是我們存檔的檔名。
我們替 New 設計的 new_button() 如下
47 48 49 50 51 52 53 54 55 | function new_button() { global $e , $data ; $f = fopen ( $data , "w+" ); $s = join ( $e ->cArray, "" ); fwrite ( $f , $s ); fclose ( $f ); return "new: " . $s ; } |
global 用在函數中,使後面接的變數對應到函數以外相同 PHP 檔案的變數名稱,也就是讓剛才建立的 $e 、 $data 能在 new_button() 中使用。
儲存檔案使用三個內建函數 fopen() 、 fwrite() 與 fclose() 。 fopen() 用以開啟檔案串流,第一個參數為檔案路徑,第二個參數則是開啟模式,此處為 "w+" ,也就是寫入並新增。
我們這裡只需要將 cArray 利用 join() 合成一個字串儲存就可以了。 fwrite() 用以寫入內容到檔案,第一個參數為檔案串流變數,也就是剛剛用 fopen() 建立的 $f ,第二個參數則是要寫入的字串。
檔案處理結束,要用 fclose() 關閉檔案串流。最後 new_button() 回傳訊息字串,這裡是用 "new: " 加上密碼表字串。
由於儲存的是密碼表的字串,載入時自然也是密碼表的字串,因此 Encrypt 類別需要增加一個 setcArray() 方法 (method) ,使其可以直接用密碼表字串設定 cArray 。 setcArray() 如下
10 11 12 13 14 | public function setcArray( $s ) { for ( $i = 0; $i < 26; $i ++) { $this ->cArray[ $i ] = $s [ $i ]; } } |
完整 Encrypt 類別請參考 encryptor.php 。
setcArray() 的設計也很簡單,就是將字串中逐一元素各自儲存到 cArray 裡就行了。
我們另外有設計 Clean 按鈕,用來清除 Encrypt 物件,概念很簡單,就把檔案內容改成空字串就行了
119 120 121 122 123 124 125 126 | function clean_button() { global $e , $data ; $f = fopen ( $data , "w+" ); fwrite ( $f , "" ); fclose ( $f ); return "Encrypt object is clean out." ; } |
這樣 Load 按鈕的 load_button() 就需要比較複雜一點,如果檔案是空字串,也就是內建函數 filesize() 回傳值為 0 ,那麼就不允許載入,相反地檔案不是空字串,表示有密碼就用 fread() 讀取密碼表,然後設定到 $e 之中
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | function load_button() { global $e , $data ; $f = fopen ( $data , "r" ); if ( filesize ( $data ) == 0) { fclose ( $f ); return "load denied" ; } else { $s = fread ( $f , filesize ( $data )); $e ->setcArray( $s ); fclose ( $f ); return "load: " . $s ; } } |
其實 Load 的目的只有檢查是否有密碼表而已,這裡設定到 $e 之中有點是多餘的動作。
encryptor03.php 修改如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <?php // include include "encryptor_function.php" ; // switch switch ( $_REQUEST [ "op" ]) { case "New" : $main = input_form(); $display = new_button(); break ; case "Load" : $main = input_form(); $display = load_button(); break ; case "Encode" : $main = input_form(); $display = "There is <b>Encode</b> button. Your input is '{$_POST['input']}'." ; break ; case "Decode" : $main = input_form(); $display = "There is <b>Decode</b> button. Your input is '{$_POST['input']}'." ; break ; case "Clean" : $main = input_form(); $display = clean_button(); break ; case "record" : $main = "This is record page.." ; $display = "This is record page.." ; break ; case "about" : $main = "This is about page.." ; $display = "This is about page.." ; break ; default : $main = input_form(); $display = "something happened" ; } // make page echo make_page( $main , $display ); /* 《程式語言教學誌》的範例程式 檔名:encryptor04.php 功能:示範 PHP 程式 作者:張凱慶 時間:西元 2012 年 11 月 */ ?> |
結果如下

好了,接下來我們要整合編碼、解碼功能囉!
中英文術語對照 | |
---|---|
物件 | object |
類別 | class |
函數 | function |
全域變數 | global variable |
方法 | method |
您可以繼續參考
網站篇
相關目錄
回 PHP 入門指南
回 PHP 教材
回首頁
參考資料
http://www.php.net/manual/en/tutorial.firstpage.php
http://www.php.net/manual/en/tutorial.useful.php
http://www.php.net/manual/en/functions.user-defined.php
http://www.php.net/manual/en/functions.arguments.php
http://www.php.net/manual/en/functions.returning-values.php
沒有留言:
張貼留言