找回密码
 注册
广告投放 虚位以待【阿里云】2核2G云新老同享 99元/年,续费同价做网站就用糖果主机-sugarhosts.comJtti.com-新加坡服务器,美国服务器,香港服务器
查看: 689|回复: 0

PHP教程最基础介绍--文件的操作

[复制链接]
发表于 2010 年 10 月 2 日 18:43:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×

操作文件是在PHP程序经常要做的事,在这简单的介绍一些操作文件的方法,包括文件的储存,读出,插入新记录,删除其中一条记录等:
操作文件经常要用到的函数
  fopen()//打开一个文件
  fclose()//关闭一个文件
  copy()//复制一个文件
  feof()//判断文件指针是否到了最后
  file_exists()//判断文件是否存在
  file()//把整个文件读入一个数组 * 很有用
  flock()//琐定文件
  fread()//读取整个文件
  fwrite()//写入文件,也可用来新建文件
  unlink()//删除文件
  其中我个人觉得fwrite和file是最有用的
  fopen()有很多参数需要注意,可以查手册找到
    mode 说明
    'r' 只读方式打开,将文件指针指向文件头。
    'r+' 读写方式打开,将文件指针指向文件头。
    'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。假设文件不存在则尝试创建之。
    'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。假设文件不存在则尝试创建之。
    'a' 写入方式打开,将文件指针指向文件末尾。假设文件不存在则尝试创建之。
    'a+' 读写方式打开,将文件指针指向文件末尾。假设文件不存在则尝试创建之。
    'x' 创建并以写入方式打开,将文件指针指向文件头。假设文件已存在,则 fopen() 调用失败并返回 FALSE,并生成 一条 E_WARNING 级别的错误信息。假设文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
    'x+' 创建并以读写方式打开,将文件指针指向文件头。假设文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。假设文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
fwrite()是写入文件,在这给个比较好用的函数,是fwrite的增强版,呵呵
function writetofile($file_name,$data,$method="w") {
  $filenum=fopen($file_name,$method);
  flock($filenum,LOCK_EX);
  $file_data=fwrite($filenum,$data);
  fclose($filenum);
  return $file_data;
}
用法很容易吧,应该能看懂,和fwrite一样的用法,但其中包含了fopen,flock,fclose,很实用
file()是把整个文件读入一个数组
例如把一个文件当成数据库来使用,一般都要用到这个函数
它能一行一行的读取文本,这样我们就可以把每条记录存成一行,然后读取,后面给出的例子可以看见它的使用方法
操作文件当然少不了对字符串的操作
其中一般会用到
explode()和implode()两个函数
第一个是用来根据关键字分割字符串的,第二个刚好相反,是用关键字把字符串连成一个整体的
下面是手册上的两个小例子
  • <?php
  • $pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
  • $pieces = explode(" ", $pizza);
  • echo $pieces[0]; // piece1
  • echo $pieces[1]; // piece2
  • ?>

复制代码
  • <?php
  • $array = array('lastname', 'email', 'phone');
  • $comma_separated = implode(",", $array);
  • echo $comma_separated; // lastname,email,phone
  • ?>

复制代码
实例一个简单的文件读写)
  • <?php
  • function writetofile($file_name,$data,$method="w") {
  •         $filenum=fopen($file_name,$method);
  •         flock($filenum,LOCK_EX);
  •         $file_data=fwrite($filenum,$data);
  •         fclose($filenum);
  •         return $file_data;
  • }
  • function readfromfile($file_name) {
  •         menu_idif (file_exists($file_name)) {
  •         menu_idmenu_id$file_data=file_get_contents($file_name);
  •         menu_idmenu_idreturn $file_data;
  •         menu_id}
  • }
  • $filename="phzzy.txt";
  • //下面数据后的\n为换行符,为了用file函数做准备,字符|为分割符,为explode函数做准备
  • $filedata_1="phzzy|http://www.flashforweb.com|copyright2005!\n";
  • $filedata_2="a-fei|http://www.flashforweb.com/a-fei|copyright 2004-2005\n";
  • $filedata_3="xxxx|http://www.somesite.com|no copyright!\n";
  • $filedata_4="yyyy|http://www.nosite.com|No copyright!\n";
  • writetofile($filename,$filedata_1);//把$filedata_1写入$filename中,假设$filename不存在它会自动生成这个文件,假设存在则将文件里的内容全部删除然后在写入$filedata_1
  • //此时phzzy.txt文件中会出现,并且里面的数据为$filedata_1
  • $content_1=readfromfile($filename);
  • echo $content_1;
  • echo "<hr>";
  • //下面是向文件末尾插入一行记录
  • $temp=readfromfile($filename);//先读取全部记录
  • writetofile($filename,$filedata_2 . $temp);//写入记录
  • $content_2=readfromfile($filename);
  • echo $content_2;
  • echo "<hr>";
  • //下面是向文件最开始插入一条记录
  • $temp=readfromfile($filename);//先读取全部记录
  • writetofile($filename,$temp . $filedata_3);//写入记录
  • $content_3=readfromfile($filename);
  • echo $content_3;
  • echo "<hr>";
  • //下面是向文件第三行插入一条记录
  • $all=file($filename);
  • $allcount=count($all);
  • for($i=0;$i<$allcount;$i++){
  •         menu_id$wdata.=$all[$i];
  •         menu_idif($i==1) $wdata.=$filedata_4;
  • }
  • writetofile($filename,$wdata);
  • $content_4=readfromfile($filename);
  • echo $content_4;
  • echo "<hr>";
  • //最后介绍explode和implode的用法
  • //先用explode按格式循环输出所有数据,现在文本中总共有4条数据
  • $all=file($filename);
  • $allcount=count($all);
  • for($i=0;$i<$allcount;$i++){
  •         menu_id$show_array=@explode("|", $all[$i]);//用|做为分割符号,然后分别用数组$show_array储存,每次分割的是第$i行的数据
  •         menu_idecho "Name: ".$show_array[0]."<br>";
  •         menu_idecho "Website: "."<a href=".$show_array[1].">".$show_array[1]."</a><br>";
  •         menu_idecho "Copyright: ".$show_array[2]."<br><br><br>";
  • }
  • //implode和explode的用法刚好相反,一般是接收到用户传过来的分散的值把它组合成一个整体的值,然后在文本中存成一行,具体大家自己弄弄拉,可以看implode那个小例子
  • ?>

复制代码
补充::
一些比较基本的文件储存方法:
1..假设想用文本象数据库一样储存数据..为了以后的方便...一般是把每条数据储存为一行..以后用file函数把他分开..然后每行应该都有分割符...例如 | ..用来分割各个字段..把用file函数分开后的数据再用explode根据分割符进行分割...使他可以应用到程序中...就好象直接从数据库中取出某条记录的某字段一样...
2..看BO-BLOG学到的一点经验.....由于文件大了以后很难操作嘛..因此要尽量减上文件的大小...例如做新闻管理或BLOG的时候...每篇文章都应该单独生成一个文件储存....但假设是注册用户的信息呢??由于注册用户可能很多..我们不可能分开储存..那得多少个文件啊....这样我们可以先取得注册用户名的首字母..例如phzzy就是p...汉字用户名就是han_..这样分组储存在不同的文件中..在用户登陆判断密码时也不用一次打开一个庞大的文件..而是可以先取得首字母分析要打开那个文件然后在取得用户信息
3..要操作文件中的某一行..例如修改或删除什么的..一般是用file分割整个文件...听说也有人用指针做的..不过好象特别麻烦..那样好象必须确定文本中每行甚至每个"字段"(就是用|分割开来的东西)的字符数...比较麻烦...建议还是一次打开整个文件吧....打开整个文件并file后..生成一个数组..然后用循环找到要修改或删除的那一行并进行相关操作...然后在用implode合并数组并储存进文件中
4..木有了...想到再写


Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|金光论坛

GMT+8, 2025 年 2 月 3 日 12:57 , Processed in 0.034038 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表