1、文件操做函數
1.建立文件:touch('./xxx.php');
bool touch ( string $filename [, int $time = time() [, int $atime ]] )
2.複製文件:copy('./xxx.php','./yyy.php');
3.移動或重命名:rename('./xxx.php','./yyy.php');
4.刪除文件:unlink('./xxx.php');
5.截取文件:ftruncate('./xxx.php',$size);
6.文件內容操做:php
a.file_get_contents('./xxx.php');獲取文件 b.file_put_contents('./xxx.php','aaa');寫入文件 注:能夠遠程讀取文件,如:file_put_contents('./xxx.php',file_get_contents('http://www.baidu.com')); C.讀文件readfile('http://www.baidu.com'); d.$arr=file('./xxx.php'):將文件存爲數組,每一行是一個元素
注:以上涉及讀取文件內容的函數無需先打開文件html
2、文件的打開與關閉
1.$open=fopen('./xxx.php','r');
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
注:附加Mode:b操做二進制文件時加上,t文本文件數組
2.fclose($open);
3.fwrite($open,'aaaa');能夠更改fopen的mode,改變每次寫入是否覆蓋
4.fgetc($open);一次讀取文件一個字符
5.feof($open);指針到文件結尾返回true,可用做if判斷
6.fgets($open);一次讀取文件一行
7.fread($open,1024);一次讀取指定長度(字節數)的字符
注:以上讀取文件內容必須先打開文件函數
while(!feof($open)){ echo fgetc($open); echo fgets($open); echo fread($open,filesize($open)); }
3、移動文件的指針
1.ftell($open);返回指針當前位置,默認爲開始
2.fseek($open,-4,SEEK_END);將指針移動至某位置,如從文件尾前移4個字節,注意結尾可能有換行符。能夠配合fopen的a追加模式更方便的操做post
$whence值能夠是: •SEEK_SET - 設定位置等於 offset 字節。 •SEEK_CUR - 設定位置爲當前位置加上 offset。 •SEEK_END - 設定位置爲文件尾加上 offset。
3.rewind($open);將指針放到開頭
4、文件的鎖定機制
1.flock($open,LOCK_SH):讀取/寫入文件時都須要鎖定(LOCK_SH/LOCK_EX),以防止多人同時操做,解鎖時方法相同(LOCK_UN)
注:$handle必須指向一個打開的文件資源
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )spa
operation 能夠是如下值之一: ◦ LOCK_SH取得共享鎖定(讀取的程序)。 ◦ LOCK_EX 取得獨佔鎖定(寫入的程序。 ◦ LOCK_UN 釋放鎖定(不管共享或獨佔)。
5、實例:留言板指針
<?php $filename='message.txt'; if(isset($_POST['dosubmit'])){ $content="{$_POST['username']}||".time()."||{$_POST['title']}||{$_POST['content']}[n]"; writeMessage($filename,$content); } if(file_exists($filename)){ date_default_timezone_set('PRC'); readMessage($filename); } function writeMessage($filename,$content){ $open=fopen($filename,'a'); if(flock($open,LOCK_EX+LOCK_NB)){//添加寫入鎖及防阻塞 fwrite($open,$content); flock($file,LOCK_UN+LOCK_NB);//釋放寫入鎖及防阻塞 }else{ echo "寫入鎖定失敗!"; } fclose($open); } function readMessage($filename){ //不打開文件讀取,沒法加鎖 //$mess=rtrim(file_get_contents($filename),'[n]'); $mess=''; $file=fopen($filename,'r'); if(flock($file,LOCK_SH+LOCK_NB)){//添加讀取鎖及防阻塞 while(!feof($file)){ $mess.=fread($file,1024); } flock($file,LOCK_UN+LOCK_NB);//釋放讀取鎖及防阻塞 }else{ echo "讀取鎖定失敗!"; } $mess=rtrim($mess,'[n]'); $arr=explode('[n]',$mess); foreach($arr as $value){ list($username,$time,$title,$content)=explode("||",$value); echo "<b>{$username}</b>,".date('y-m-d h:i',$time).":<i>{$title}</i>,<u>{$content}</u><br><hr><br>"; } fclose($file); } ?> <!DOCTYPE > <html> <head> <meta charset="utf-8"> <style> input{ display: block; } textarea{ display: block; } </style> </head> <body> <form action="message.php" method="post"> <label for="uesrname">用戶名:</label><input type="text" value="" name="username" id="username" /> <label for="title">標 題:</label><input type="text" value="" name="title" id="title" /> <label for="content">內 容:</label><textarea cols="40" rows="10" id="content" name="content"></textarea> <button type="submit" name="dosubmit">提 交</button> </form> </body> </html>