1 <?php 2 /** 3 网络留言板模式 4 主要运用到的函数有 5 fopen fclose flock fwrite fread explode list 6 */ 7 ?> 8 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 9 <?php error_reporting(E_ALL && !E_NOTICE) ?> 10 <html> 11 <head> 12 <title>网络留言板模式</title> 13 </head> 14 <body> 15 <?php 16 //声明变量来保存文件名 17 $filename = "data_text.txt"; 18 19 //判断用户是否提交 若是则写入文件 20 if(isset($_POST["sub"])){ 21 //将三条信息整合成一条,用”||“隔开 用”<|>“结束 22 $message = $_POST["username"]."||".$_POST["title"]."||".$_POST["mess"]."<|>"; 23 writeMessage($filename,$message ); 24 } 25 26 //文件存在则读取数据 27 if(file_exists($filename)) 28 readMessage($filename); 29 30 /** 31 自定义一个向文件中写入数据的函数 32 */ 33 function writeMessage($filename,$message){ 34 $fp = fopen($filename,"a");//以追加模式打开文件 35 if(flock($fp,LOCK_EX)){ 36 fwrite($fp,$message); 37 flock($fp,LOCK_UN); 38 }else{ 39 echo "不能锁定文件"; 40 } 41 fclose($fp); 42 } 43 44 /** 45 自定义一个遍历读取文件的函数 46 */ 47 function readMessage($filename){ 48 $fp = fopen($filename,"r"); 49 flock($fp,LOCK_SH); 50 $buffer = ""; 51 //将文件中的数据读入到$buffer中 52 while(!feof($fp)) 53 $buffer .= fread($fp,1024); 54 //通过”<|>“将每行留言分隔并存入数组中 55 $data = explode("<|>",$buffer); 56 //遍历数组并将每行数据再分隔 57 foreach($data as $line){ 58 list($username,$title,$message) = explode("||",$line); 59 if($username != "" && $title != "" && $message != ""){ 60 echo $username.'说'; 61 echo ' '.$title.','; 62 echo $message."<hr>"; 63 } 64 } 65 flock($fp,LOCK_UN); 66 fclose($fp); 67 } 68 ?> 69 70 71 <!--以下为用户输入表单--> 72 <form action="" method = "post"> 73 用户名:<input type = "text" size = 10 name="username"><br> 74 标 题:<input type = "text" size = 30 name = "title"><br> 75 <textarea name = "mess" rows = 4 cols = 38>请在这里留言</textarea> 76 <input type = "submit" name = "sub" value = "留言"> 77 </form> 78 </body> 79 </html>
如果有用户留言 则将留言内容保存到文件
自定义保存样式 通过explode函数将其分隔
判断保存留言的文件是否存在 若是则输出
输出的留言是将文件里的内容分解出来的 主要用到函数有:list explode