php实现文件留言,PHP文件操作及实例:留言板

一、文件操作函数

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.文件内容操作:

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'):将文件存为数组,每一行是一个元素

注:以上涉及读取文件内容的函数无需先打开文件

二、文件的打开与关闭

1.$open=fopen('./xxx.php','r');

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

注:附加Mode:b操作二进制文件时加上,t文本文件

0818b9ca8b590ca3270a3433284dd417.png

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));

}

三、移动文件的指针

1.ftell($open);返回指针当前位置,默认为开始

2.fseek($open,-4,SEEK_END);将指针移动至某位置,如从文件尾前移4个字节,注意结尾可能有换行符。可以配合fopen的a追加模式更方便的操作

$whence值可以是:

•SEEK_SET - 设定位置等于 offset 字节。

•SEEK_CUR - 设定位置为当前位置加上 offset。

•SEEK_END - 设定位置为文件尾加上 offset。

3.rewind($open);将指针放到开头

四、文件的锁定机制

1.flock($open,LOCK_SH):读取/写入文件时都需要锁定(LOCK_SH/LOCK_EX),以防止多人同时操作,解锁时方法相同(LOCK_UN)

注:$handle必须指向一个打开的文件资源

bool flock ( resource $handle , int $operation [, int &$wouldblock ] )

operation 可以是以下值之一:

◦ LOCK_SH取得共享锁定(读取的程序)。

◦ LOCK_EX 取得独占锁定(写入的程序。

◦ LOCK_UN 释放锁定(无论共享或独占)。

五、实例:留言板

$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 "{$username},".date('y-m-d h:i',$time).":{$title}{$content}



";

}

fclose($file);

}

?>

input{

display: block;

}

textarea{

display: block;

}

用户名:

标   题:

内   容:

提 交

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF-11 路由事件之一

什么是路由事件?我们从两个维度来理解路由事件:功能的角度来看,路由事件是一种事件类型,不仅仅可以在事件源上处理事件响应,还可以在元素树的多个侦听器上处理事件响应(事件侦听器是附加和调用事件处理程序的元素。事件…

个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能...

近三年,其实都是在做一个项目,项目是一个大型的多节点部署的项目,做了好几个版本,中间用到了很多技术和框架, 也用了一些管理工具和敏捷实践。我这里不是来说项目的,因为最近看了一些招聘信息,结…

Android 进程常驻(5)----开机广播的简单守护以及总结

这是一个轻量级的库,配置几行代码。就能够实如今android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下。clean master获取root权限下都无法杀死进程 支持系统2.3到6.0 支持大部分设备,包含三星。华为。oppo&#xff0…

[k8s]metricbeat的kubernetes模块kube-metric模块

正确姿势启动metricbeat metricbeat.modules: - module: systemmetricsets:- cpu- filesystem- memory- network- processenabled: trueperiod: 10sprocesses: [.*]cpu_ticks: falseoutput.elasticsearch:hosts: ["http://192.168.x.x:9200"]setup.template.name: &q…

如何为 Task 添加超时功能

前言假设有如下代码,功能是首先从缓存获取数据,如果没有命中缓存,则直接从数据库获取:var data await GetFromCache(); if (data is null) {data await GetFromDB(); }对于获取缓存数据,我们需要限制一下GetFromCach…

php 随机指定位数,php生成一个可选位数的随机码

echo coding(6);function coding($num){$str_arr array(‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘,‘i‘,‘j‘,‘k‘,‘l‘,‘m‘,‘n‘,‘o‘,‘p‘,‘q‘,‘r‘,‘s‘,‘t‘,‘u‘,‘v‘,‘w‘,‘x‘,‘y‘,‘z‘,‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘…

Animate与transform的使用

Animate是用css给前端加载动画的效果&#xff1a; 网址&#xff1a;https://daneden.github.io/animate.css/ <!DOCTYPE html> <html lang"en"> <head><link rel"stylesheet" href"static/css/Animate.css"><meta ch…

angular中的cookies与cookieStore区别

设置cookie用put()方法: $cookies.put(key, value[, options]); $cookieStore.put(key, value); 例如设置一个cookie&#xff0c;名为“userName”&#xff0c;值为“yangmin”&#xff1a; //使用$cookies设置cookie $cookies.put(userName, yangmin); //使用$cookieStore设置…

ASP.NET Core 6框架揭秘实例演示[29]:搭建文件服务器

通过HTTP请求获取的Web资源很多都来源于存储在服务器磁盘上的静态文件。对于ASP.NET应用来说&#xff0c;如果将静态文件存储到约定的目录下&#xff0c;绝大部分文件类型都是可以通过Web的形式对外发布的。“Microsoft.AspNetCore.StaticFiles” 这个NuGet包中提供了三个用来处…

js 栈(进制转换)

<!DOCTYPE html>Documentposted 2017-12-07 19:33 mysure 阅读(...) 评论(...) 编辑 收藏 刷新评论刷新页面返回顶部转载于:https://www.cnblogs.com/ar13/p/8000718.html

流程展示 php,js实现动态的流程进度展示条

这次给大家带来js实现动态的流程进度展示条&#xff0c;js实现动态流程进度展示条的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。一、设计思路分为以下几步(仅供参考)【竖线线】这个采用ul的list标签制作&#xff0c;保证了可随时添加&#xff0c;以…

【我们一起写框架】C#的AOP框架

原文:【我们一起写框架】C#的AOP框架前言 AOP&#xff0c;大家都是听过的&#xff0c;它是一种面向切面的设计模式。 不过AOP虽然是被称为设计模式&#xff0c;但我们应该很少能看到AOP设计的框架。为什么呢&#xff1f; 因为&#xff0c;AOP单独设计的框架几乎是无法使用的。普…

新浪微博授权认证过程

为什么80%的码农都做不了架构师&#xff1f;>>> 一、授权认证 1、请求用户授权Token URL&#xff1a; https://api.weibo.com/oauth2/authorize HTTP请求方式:GET/POST 请求参数 必选 类型及范围 说明 client_id true string 申请应用时分配的AppKey。 redire…

VisualStudio 使用 FastTunnel 辅助搭建远程调试环境

有时候需要远程调试一些用户问题&#xff0c;期望能使用本机的 Visual Studio 开发环境&#xff0c;调试远程的用户的设备上的应用。这时会遇到的一个问题是如何让本机的 Visual Studio 可以连接上远程的用户的设备&#xff0c;从而进行调试。本文将告诉大家如何采用 FastTunne…

深入理解null的原理

--null的原理 --oracle一直将null和空字符串’’<长度为0>同等对待<如’’ is null是true,’’null为false,如果声明a varchar2:’’,那么a is null为true,a’’为false>--1.null的运算 --算术表达式和null 运算总为null,实际上所有的操作符除了||连接操作符外&…

阻止中文输入法输入拼音的时候触发input事件

阻止中文输入法输入拼音的时候触发input事件 前言 最近看element-ui源码的时候看到el-input发现的。这个少见的事件。 compositionstart、compositionend事件&#xff08;MDN解释) compositionstart事件触发于一段文字的输入之前&#xff08;类似于 keydown 事件&#xff0c;但…

Python1

python介绍python是一种解释型的&#xff0c;面对对象的。带有动态语义的高级程序设计语言python简史1989年,Guido(龟叔)为ABC 语言写的一个插件。因Monty Python的喜剧团体的原因,故给这个语言起名为python。linux也是1989年诞生的,1991年正式发布linux1.0内核;1990年, 发布py…

ncut算法matlab实现,ncut_multiscale_1_6 经典的图像分割算法 的Matlab代码。 238万源代码下载- www.pudn.com...

文件名称: ncut_multiscale_1_6下载收藏√ [5 4 3 2 1 ]开发工具: matlab文件大小: 587 KB上传时间: 2015-04-17下载次数: 4提 供 者: HH详细说明&#xff1a;经典的图像分割算法NCut的Matlab代码。-Matlab code of classic image segmentation algorithm NCut .文件列表(…

使用.NET从零实现基于用户角色的访问权限控制

使用.NET从零实现基于用户角色的访问权限控制本文将介绍如何实现一个基于.NET RBAC 权限管理系统&#xff0c;如果您不想了解原理&#xff0c;可查看推送的另一篇文章关于Sang.AspNetCore.RoleBasedAuthorization[1] 库是使用介绍&#xff0c;直接使用该库即可。背景在设计系统…

数据归一化

数据归一化 数据的标准化是将数据按比例缩放&#xff0c;使之落入一个小的特定区间&#xff0c;一般为0到1之间。在某些比较和评价的指标处理中经常会用到&#xff0c;去除数据的单位限制&#xff0c;将其转化为无量纲的纯数值&#xff0c;便于不同单位或量级的指标能够进行比较…