程式
//'6.3'建立暫存檔
$session_name = $session_txt['6.3'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";
$tmp = tempnam (ROOT_PATH."/test","tmpFile");
$fp = @fopen ($tmp,"w");
if (!@fp){
die ("無法開啟 $tmp");
}
fputs ($fp,"Hello World <br>");
fputs ($fp,"Another Line in a Temporary File");
@fclose ($fp);
$fp =@fopen ($tmp, "r");
if(!$fp){
die ("無法開啟 $tmp");
}
while ($line = @fgets ($fp,1024)){
print $line;
}
@fclose ($fp);
@unlink ($tmp)
or die ("無法刪除 $tmp");
$message="
<fieldset><legend><font color=red>TIPS</font></legend>
tempnam(位置,前綴詞)函式會在指定的目錄下產生一個指定<br>
前綴詞唯一檔。檔案建立後,會傳回檔名(本例指定給\$tmp_file_name)<br>
,程式節結束後,記得用unlink()刪除檔案。
<br>
</fieldset>
";
echo $message."<br>";
//'6.4'將檔案存到程式裡
$session_name = $session_txt['6.4'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";
$file_name = ROOT_PATH."/test/3-1.txt";
$fp = @fopen ($file_name,"rb") or
die ("無法開啟{$file_name}");
clearstatcache(); //清除快取
$f_contents = fread ($fp,filesize ($fp)); //方法一
//echo $f_contents;
unset ($f_contents);
$f_contents = show_array(file ($file_name));//方法二
unset ($f_contents);
$f_contents = implode ("",file ($file_name));//方法三
echo $f_contents."<br>";
unset ($f_contents);
while ($line = @fgets ($fp,1024)){ //方法四
$f_contents .=$line;
}
echo $f_contents;
@fclose ($fp);
$message="
<fieldset><legend><font color=red>TIPS</font></legend>
fread()讀取資料,並搭配filesize(),將檔案載入變數中<br>
如果想把檔案一行一行存入陣列,就用file()函式。<br>
另外要使用filesize()時,最好用clearstrstcache()清除快取。
<br>
</fieldset>
";
echo $message."<br>";
//'6.8'鎖定檔案
$session_name = $session_txt['6.8'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";
/*
Lockfile.inc
<?
function lock ($fp,$lock_level=LOCK_EX){
@flock ($fp,$lock_level)
or die ("無法以 $lock_level 鎖定檔案指標");
}
function unlock ($fp){
@flock ($fp,LOCK_UN)
or die ("無法解除鎖定");
}
?>
*/
include ("Lockfile.inc");
unset ($file_name);
$file_name = ROOT_PATH."/test/3-1.txt";
$fp = @fopen ($file_name,"wb")
or die ("無法開啟 $file_name 以供寫入");
//寫入檔案前請務必取得獨佔鎖定(exclusive)
//這相當於 flock($fp,LOCK_EX)
lock ($fp);
fwrite ($fp,"Hello");
//解除檔案鎖定,這相當於 flock($fp,LOCK_UN)
unlock ($fp);
@fclose ($fp);
$message="
<fieldset><legend><font color=red>TIPS</font></legend>
你想確保存檔案期間不會有其他程式存取,使用flock()函式<br>
參數為 LOCK_EX 鎖定、LOCK_UN 解除鎖定
<br>
</fieldset>
";
echo $message."<br>";
//'6.10'顯示文字檔內容
$session_name = $session_txt['6.10'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";
$read_file = ROOT_PATH."/test/6-10.txt";
$fp = @fopen ($read_file,"rb")
or die (" Cannot read the $read_file !");
$twenty_byes = fread ($fp,20);
fpassthru($fp);
echo "<br>";
readfile ($read_file);
echo "<br>";
print implode ("<br>",file ($read_file));
@fclose ($fp);
$message="
<fieldset><legend><font color=red>TIPS</font></legend>
有三個函式可以讀取文字檔內容。fpassthru()、readfile()、<br>
implode(\"區隔符號\",file(檔案位置))
<br>
</fieldset>
";
echo $message."<br>";
//'6.22'隨機排列檔案內容
$session_name = $session_txt['6.22'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";
$fn = ROOT_PATH."/test/6-10.txt";
$reg_array = file($fn);
srand ((double)microtime()*1000000);
shuffle ($reg_array);
$fp = @fopen($fn,"wb") or die ("無法開啟檔案 $fn");
fputs ($fp,implode ("",$reg_array));
echo "<br>以下是亂數排列後的內容:<br>";
readfile ($fn);
echo "<br>";
$fn1 = ROOT_PATH."/test/6-11.txt";
srand ((double)microtime()*1000000);
$fp1 = @fopen($fn1,"rb") or die ("無法開啟檔案 $fn");
foreach (file ($fn1) as $line){
$words = preg_split ("/\s+/",$line);
shuffle ($words);
$data .= implode ("",$words."\n");
}
print "herd".$data; //有問題出不來
@fclose ($fp1) or die ("無法關閉檔案 $fn");
@fclose ($fp) or die ("無法關閉檔案 $fn");
$message="
<fieldset><legend><font color=red>TIPS</font></legend>
首先用file()函式將檔案載入陣列,現在陣列中已經有檔案的每一行<br>
內容,我們就可以將陣列個元素隨機排列。接著我們可以為shuffle()<br>
設定亂數產生器的起點,然後將陣列傳給shuffle()(請注意不需要<br>
shuffle()的傳回值,因為它直接操控陣列本身。
<br>
</fieldset>
";
echo $message."<br>";