PHP 4.0 講義 PHP介紹 1 2 3 4 5 6 7 8 9 A B C D
指令敘述 5.1 : 變數名稱 = fopen ( "檔名","屬性" );
指令說明:將檔案打開, 以便後續的讀出或寫入資料的動作
用法:
變數名稱 = fopen ( "檔名","屬性" );
變數名稱是來記錄檔案代號用的,檔名為要打開的檔案名稱,屬性有以下幾種常用的用法
- r - Open for reading only
- r+ - Open for reading and writing
- w - Open for writing only; If the file does not exist, attempt to create it.
- w+ - Open for reading and writing; If the file does not exist, attempt to create it.
- a - Open for writing only; If the file does not exist, attempt to create it.
- a+ - Open for reading and writing;If the file does not exist, attempt to create it.
例:
$fp1 = fopen("ping.txt","r"); // 打開 ping.txt 檔案, $fp1 是檔案代號 , r參數代表唯讀
$fp2 = fopen("counter1.txt","w"); // 打開 counter1.txt 檔案, $fp2 是檔案代號 , w參數代表寫入
指令敘述 5.2 : fclose( 變數名稱 );
指令說明:將檔案關閉
用法:
fclose( 變數名稱 );
例:
fclose($fp1); // 關閉檔案
fclose($fp2); // 關閉檔案
指令敘述 5.3 : 變數名稱1 = fgetc ( 變數名稱2 );
指令說明:從檔案中一次讀取一個字
用法:
變數名稱1 = fgetc ( 變數名稱2 );
變數名稱1是用來存放讀出來的字, 變數名稱2是檔案的代號
例:
$a=fgetc($fp1);
$buffer=fgetc($fp2);
完整的例子5-1:
先在 counter1.txt 文字檔中寫下 231
<?php
$fp1 = fopen("counter1.txt","r"); // 打開檔案 counter1.txt , $fp1 是檔案代號 , r參數代表唯讀
$a=fgetc($fp1); // 讀出一個字存到 $a (從$fp1 代表的檔案去讀)
$b=fgetc($fp1); // 讀出下一個字存到 $b (從$fp1 代表的檔案去讀)
echo "第一個字為 $a, 第二個字為 $b" ;
fclose($fp1); // 關閉檔案
?>
指令敘述 5.4 : 變數名稱1 = fgets ( 變數名稱2, 數字1, );
指令說明:從檔案中一次讀取特定的字數 (當檔案中的一行文字 不足特定字數時, 即以一行為單位)
用法1:
變數名稱1 = fgets ( 變數名稱2, 數字1, );
變數名稱1是用來存放讀出來的字串, 變數名稱2是檔案的代號, 數字1是讀取的字數
例:
$a = fgets($fp1,10);
$s = fgets($fp1,1000); // 當檔案中的一行文字 不足特定字數時, 即以一行為單位
完整的例子5-2:
先在 counter1.txt 文字檔中寫下以下4行文字
This is a book.
Nice to see you.
Good night.
How old are you?程式如下:
<?php
$fp1 = fopen("message.txt","r"); // 打開檔案 counter1.txt , $fp1 是檔案代號 , r參數代表唯讀
$s = fgets($fp1,1000); // 讀出一行字存到 $a (從$fp1 代表的檔案去讀)
echo "訊息: $s <br>";
fclose($fp1); // 關閉檔案
?>
用法2:搭配 for 迴圈可以讀取多行
完整的例子5-3:
先在 counter1.txt 文字檔中寫下以下4行文字
This is a book.
Nice to see you.
Good night.
How old are you?程式如下:
<?php
$fp1 = fopen("message.txt","r"); // 打開檔案 counter1.txt , $fp1 是檔案代號 , r參數代表唯讀
for($i=1;$i<=3;$i++) // 重覆3次
{
$s = fgets($fp1,1000); // 讀出一行字存到 $a (從$fp1 代表的檔案去讀)
echo "訊息: $s <br>";
}
fclose($fp1); // 關閉檔案
?>
指令敘述 5.5 : feof(變數名稱1);
指令說明:檢查是否巳到檔案的尾部
用法:
feof(變數名稱1);
若這個函數為真, 則代表巳經到了檔案的尾部
若這個函數為假, 則代表還未到檔案的尾部
變數名稱1是檔案的代號
用法:搭配 for 迴圈 及 feof 迴圈 可以讀取全部的行
完整的例子5-3:
先在 counter1.txt 文字檔中寫下以下4行文字
This is a book.
Nice to see you.
Good night.
How old are you?程式如下:
<?php
$fp1 = fopen("message.txt","r"); // 打開檔案 counter1.txt , $fp1 是檔案代號 , r參數代表唯讀
while(!feof($fp1)) // feof 是 end of file 的縮寫, 指的是讀到檔案的最後
{
$s = fgets($fp1,1000); // 讀出一行字存到 $a (從$fp1 代表的檔案去讀)
echo "訊息: $s <br>";
}
fclose($fp1); // 關閉檔案
?>
練習5-1: 本週血型運勢
先在 messageA.txt 文字檔中寫下文字
花錢投資的重要階段,有可能朋友邀請你一起合夥?入股。
關於感情,需要花時間跟對方溝通,如果本周彼此無法見面,這段感情就有危機了。先在 messageB.txt 文字檔中寫下文字
在工作忙碌,發現有人故意扯你後腿,很容易讓你遇到衝動生氣的事情。
關於感情,沒有安全感,需要對方處處都聽你的,或是讓著你。先在 messageO.txt 文字檔中寫下文字
持續好運在生活周遭出現,讓你更有信心去實現夢想。
關於愛情,可以談婚論嫁和穩定生活的物件已經出現了。先在 messageAB.txt 文字檔中寫下文字
運勢進入一個新的轉折期,沒有方向渾渾噩噩的狀態。
最近有機會遇到職場桃花,或是你的主管與客戶對你特別的照顧,這種被關心?被照顧的感覺,小心讓你陷入情網。程式寫作提示: 以兩頁為架構, 第一頁以選項鈕問使用者的血型, 第二頁讀取不同的檔案來呈現其本週血型運勢
指令敘述 5.6 : fputs(變數名稱1,變數名稱2);
指令說明:從檔案中寫入一行
用法:
fputs(變數名稱1,變數名稱2);
變數名稱1是檔案的代號, 變數名稱2是用來寫入的資料
如果一行中要寫入多筆料, 建議採用 字串串接的方法 (字串串接符號為 . )
變數名稱2 = 變數名稱3 . " " . 變數名稱4 . " " . 變數名稱5 . " " . 變數名稱6
fputs(變數名稱1,變數名稱2);
例:
<?php
$fp1 = fopen("check.txt","a");
$str = $education . " " . $q1 . " " . $q2 . "\n";
fputs($fp1,$str);fclose($fp1);
?>上述的例子將 education, q1 , q2 串在一起 , 放入 str 中, 再把 str 寫入檔案
變數間的空格是為了分開變數用的, 否則會全部接在一起, 結尾的 "\n" 是換行符號,
用以避免全部的結果接成同一行
完整的例子5-4:寫入 使用者留下的訊息(覆蓋型), 以兩頁為架構, 第一頁以文字方塊讓使用者留言, 第二頁則寫入檔案
第一頁以文字方塊讓使用者留言 <form
action="??????.php"
method="post"> |
第二頁則寫入檔案 <?php |
完整的例子5-5:寫入 使用者留下的訊息(附加型)
只要把上述 第二頁中 紅色的w 改成 a 即可
完整的例子5-6(實例應用3):網路問卷調查程式
<h1> 問卷調查 </h1> <form action="??????.php" method="post"> 請輸入您的教育程度 : <select name="education"> <option selected>1.專科(含)以下 <option>2.學士 <option>3.碩士(含)以上 </select><br> <br> 您的性別: <input type ="radio" name="q1" value="女" checked>女 <input type ="radio" name="q1" value="男">男 <br> 贊不贊成這門課不當人: <input type ="radio" name="q2" value="是" checked>贊成 <input type ="radio" name="q2" value="不">不贊成 <br> <input type ="submit" value="完成"> </form> |
<h2> 謝謝您的意見 </h2> |
練習5-2: 改寫自己的作業1, 能把問卷結果寫入檔案
綜合應用1 : 結合指令5.4 ~ 指令5.6 寫出 簡易留言板
第一頁以讀取檔案中的留言,
再以文字方塊讓使用者留言 留言板:<p> |
第二頁則寫入檔案 <?php |
綜合應用2 : 結合指令5.4 ~ 指令5.6 寫出 訪客計數器
<?php
$fp1 = fopen("counter1.txt","r"); //
打開檔案, $fp1 是檔案代號 , r參數代表唯讀
fscanf($fp1,"%s",$a); // 讀出一個變數(從$fp1
這個檔案去讀)
fclose($fp1); // 關閉檔案
$a++;
$fp1 = fopen("counter1.txt","w"); //
打開檔案, $fp1 是檔案代號 , w參數代表寫入
fputs($fp1,$a); // 寫入一個變數(從$fp1 這個檔案去寫)
fclose($fp1); // 關閉檔案
echo " 歡迎, 您是第 $a 位訪客 <br>" ;
?>
指令敘述 5.7 : fscanf(變數名稱1,"%s",變數名稱2);
指令說明:從檔案中依特定格式讀取資料放入變數中
用法:
fscanf(變數名稱1,"%s",變數名稱2);
變數名稱1是檔案的代號, 變數名稱2是用來存放讀出來的第1筆資料
fscanf(變數名稱1,"%s %s ......",變數名稱2,變數名稱3...);
變數名稱1是檔案的代號, 變數名稱2是用來存放讀出來的第1筆資料, 變數名稱3是用來存放讀出來的第2筆資料
例:
若檔案中的資料如下:
3.碩士(含)以上 男 是
3.碩士(含)以上 女 不
1.專科(含)以下 男 是fscanf($fp1,"%s %s %s",$a,$b,$c);
echo " $a,$b,$c <br>";則會在網頁上呈現以下結果:
3.碩士(含)以上,男,是
完整的例子5-7( 來自完整的例子5-6問卷檔的讀取) :
<?php
$fp1 = fopen("check.txt","r");
echo " 目前的已填問卷的結果: <br>";
while(!feof($fp1))
{
fscanf($fp1,"%s %s %s",$a,$b,$c);
echo " $a,$b,$c <br>";
};
fclose($fp1);
?>
練習5-3: 上述程式結果有點問題, 如何改良?
完整的例子5-8(實例應用2): 請讓使用者可以線上查詢自己的薪資 (要求使用者輸入身份証字號, 網頁回答他的薪資), 薪資的文字檔如下 : (不考慮密碼確認的問題)
身份証字號 薪資
a100100101 54000
a100100102 44000
a100100103 32000
a100100104 34000
a100100105 24000
檔名為 money11.php
<form action="money12.php" method="post">
你的身份証字號 :
<input type ="text" name="id" value="a100100101">
<input type ="submit" value="查詢">
</form>
檔名為 money12.php <?php
$id = $_POST['id'];
$fp1 = fopen("money.txt","r"); // 打開檔案, $fp1 是檔案代號 , r參數代表唯讀
while(!feof($fp1))
{
fscanf($fp1,"%s %s",$id2,$money);
if($id==$id2) echo "薪資為:",$money,"<br>";
};
fclose($fp1); // 關閉檔案
?>
練習5-4(實例應用2改良版): 請讓使用者可以線上查詢自己的薪資 (要求使用者輸入身份証字號, 密碼, 網頁回答他的薪資), 薪資的文字檔如下 :
身份証字號 密碼 薪資
a100100101 aaaa 54000
a100100102 bbbb 44000
a100100103 cccc 32000
a100100104 dddd 34000
a100100105 eeee 24000
練習5-5(實例應用2改良版): 請讓使用者可以線上查詢自己的薪資 (要求使用者輸入身份証字號, 密碼, 網頁回答他的薪資), 將一個薪資檔案拆開成 兩個檔案 (密碼檔 和 薪資檔)
密碼檔
身份証字號 密碼
a100100101 aaa
a100100102 bbb
a100100103 ccc
a100100104 ddd
a100100105 eee
薪資檔
身份証字號 薪資
a100100101 54000
a100100102 44000
a100100103 32000
a100100104 34000
a100100105 24000
綜合應用3 : 民宿訂房系統,假設該民宿有4間房,房間號碼分別為101~104, 請寫出網頁訂房程式, 訂房者需留下姓名、手機號碼、訂房日期、訂房房號 (注意: 系統必需檢查訂房日期與訂房房號有空, 才能接受訂房, 否則告知已被訂走)