完整程式檔案請參考 encryptor_function.php 。
我們在 encryptor_function.php 中,先 include encryptor.php ,這樣才能使用 Encrypt 類別 (class)
include "encryptor.php";
然後建立一個 Encrypt 物件與檔案路徑 "code.txt"
$e = new Encrypt(); $data = "code.txt";
由於這兩個變數 (variable) 在之後很多函數 (function) 都會用到,因此先建立起來,等一下當全域變數 (global variable) 使用。檔案路徑也就是我們存檔的檔名。
我們替 New 設計的 new_button() 如下
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() 如下
public function setcArray($s) { for ($i = 0; $i < 26; $i++) { $this->cArray[$i] = $s[$i]; } }
完整 Encrypt 類別請參考 encryptor.php 。
setcArray() 的設計也很簡單,就是將字串中逐一元素各自儲存到 cArray 裡就行了。
我們另外有設計 Clean 按鈕,用來清除 Encrypt 物件,概念很簡單,就把檔案內容改成空字串就行了
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 之中
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 修改如下
<?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); /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名: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
沒有留言:
張貼留言