
完整程式檔案請參考 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
沒有留言:
張貼留言