PHP数据管理之文件系统

        在PHP 网站开发中,存储数据的方式通常有两种:一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,由于文件的存储方式对于管理数据,存在诸多不便,所以在一般的网站开发中,对于文件存储方式不经常用,但是有的一些功能还是需要用到文件的(比如生成文件报表功能,操作XML文件等,都用到php来操作文件),首先我们看一下php是如何操作文件的:
将数据写入文件的操作主要涉及三个步骤及部分文件操作函数如下:

  1、打开文件(文件操作函数:fopen)

       2、写入文件(文件操作函数:fwrite等)

  3、关闭文件(文件操作函数:fclose)

代码:

<?     $fp = fopen("it.txt","w");     if(!$fp){         exit("文件以只写方式打开失败");     }else {             $fileData = "你是最优秀的程序员";             fwrite($fp,$fileData);             fclose($fp);     } ?> 这段代码的作用就是以写入的方式打开网站根目录的it.txt文件,然后写入“你是最优秀的程序员”,如果没有这个文件会自动创建。 这里需要注意的是:         1.使用fopen函数打开文件,在应用fopen函数准备打开文件时,你首先需要明确:

         打开文件干什么?是读文件中的数据呢,还是将数据写入文件,或者读写文件?

  2.另外你需要考虑如果文件中已经存在相关数据,你是覆盖原有文件中的数据呢,还是仅仅将新数据添加至文件末尾。

fopen 函数的原型是:

 

resource fopen ( string filename, string mode, [ bool use_include_path, [resource zcontext]] )

 

       filename:规定要打开的文件或URL。可以指定文件的绝对路径,Windows一般为C:\,Unix为/,通过URL,你也可以打开远程文件。在这里写入的文件与PHP文件写入代码文件我放在同一个目录。

  mode:规定要求到该文件/流的访问类型。即打开文件的模式。

  include_path:可选项。如果需要在include_path中搜索文件的话,可以将该参数设为1或TRUE。

  fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。   如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了 安全模式 或者 open_basedir 则会应用进一步的限制。
常用的fopen的文件操作模式说明        ”r” - 以只读方式打开文件,从文件头开始读。   ”r+” - 以读写方式打开文件。   ”w” - 以写入方式打开文件,从文件头开始写。如果文件不存在则尝试创建,如果文件存在,则先删除文件中的内容。   ”w+” - 以读写方式打开文件,从文件头开始读写。如果文件不存在则尝试创建,如果文件存在,则先删除文件中的内容。   ”a” - 以写入方式打开,从文件末尾开始追加写。如果文件不存在则尝试创建。   ”a+” - 以读写方式打开,从文件末尾开始追加写写或者读。如果文件不存在则尝试创建。

  注意

       1、在进行文件读写操作时,你一定要确保打开的文件具有相应的读写权限,否则fopen会报错。你可以使用@来抑制产生的错误,然后合理处理错误。

  2、在使用文件操作函数fopen打开文件后,需要通过对变量赋值,然后写到$fp指向的文件指针中去,在上述PHP文件写入操作教程实例中,我使用的是一行一行存储,即换行储存,主要通过\n作为换行分隔符。

 

二、读取文件方式可以分为逐行读取文件和逐字符读取文件,但是注意首先要判断是否独到文件末尾

feof() 函数检测是否已达到文件的末端 (EOF)。

在循环遍历未知长度的数据时,feof() 函数很有用。

在 w 、a 以及 x 模式,无法读取打开的文件!

代码E:

if (feof($file)) echo "End of file";

逐行读取文件:

fgets() 函数用于从文件中逐行读取文件。

在调用该函数之后,文件指针会移动到下一行。

代码E:

<?php$file = fopen("it.txt", "r") or exit("打开失败!");while(!feof($file))  {  echo fgets($file). "<br />";  }fclose($file);?>

逐字符读取文件

fgetc() 函数用于从文件逐字符地读取文件。

在调用该函数之后,文件指针会移动到下一个字符。

<?php$file=fopen("it.txt","r") or exit("打开失败");while (!feof($file))   {   echo fgetc($file);   }fclose($file);?>

在PHP中还可以使用readfile()函数一次读取整个文件。该函数包括了打开文件、读取文件并输出到浏览器中和关闭文件。

接下来是
fwrite()函数: 函数原型是: fwrite(fp,string,length)

    fp 必需。规定要写入的打开文件。
    string 必需。规定要写入文件的字符串。
    length 可选。规定要写入的最大字节数。


在这里你也可以使用文件写入函数fputs,其是fwrite的别名函数,功能与用法与fwrite一样。

  在文件写入函数fwrite中length是可选项,主要用来设定写入文件的最大字符数,如果设定了这个参数,fwrite会按设定的length,在指定文件中写入规定长度的字符。fwrite()返回写入文件的字符数,出现错误时则返回false。

  在文件写入操作完成后,需要关闭文件句柄,否则会占用系统资源等。可以使用fclose($fp)函数来完成这件事。文件关闭成功则返回true,否则返回false。

  至此文件写入操作就完成了。

 

(以下为转载部分)

附录:
1.判断文件或目录是否存在bool file_exists(string filename)
2.取得文件名 basename(filepath)
3.打开文件 fopen(filename,mode)
4.获取文件路径信息 pathinfo(path)
5.写文件 fwrite(resource,string)
6.取绝对路径 realpath(filename)
7.关闭文件 fclose($handle)
8.复制文件 copy(source,dest)
9.读取一行数据 fgets(int handle[,int length])
10.判断是否是目录 is_dir(filename)
11.读取整个文件 readfile(filename)
12. 打开目录 opendir(path)
13.取文件大小 filesize(filename)
14.读取目录 readdir($handle)
15.删除文件 unlink()
16. 关闭目录 closedir($handle)
17.创建目录 mkdir(dirname)  
18.删除目录
unlink()  
19.判断文件或目录是否存在 bool file_exists(string filename)
20.判断文件或目录是否存在,存在则返回真,否则返回假 格式: if(file_exists(“hello.txt”)) {   echo “文件存在”; }

打开文件 格式: fopen(filename,mode) 说明:按指定的格式打开指定的文件 filename:要打开的文件名 mode : 打开模式 fopen(“hello.txt”,”w”); 表示以写的方式打开hello.txt文件 写文件 格式:   fwrite(resource,string); 说明:在打开的文件中添加指定的内容 resource:打开的文件 string:要写入的内容 例: $handle = fopen(“hello.txt”,”w”) //若a ,则可追加数据 fwrite($handle,”1\r\n”) 关闭文件 格式:    fclose($handle) 说明:关闭打开的文件 例: $handle = fopen(“hello.txt”,”w”); fclose($handle); 读取一行数据 格式: fgets(int handle[,int length]) 说明:读取length-1个字符。若没有指定length,则默认字节为1KB, 若遇到换行、EOF或则已经读取了length-1个字符,则程序终止, 出错时候返回false; 例: $handle = fopen(“hello.txt”,”r”); $buffer = fgets($handle,1024); echo $handle; //输出一行信息 读取整个文件 格式:   readfile(filename) 说明:读取整个文件,并输出到浏览器 例: <? readfile(“hello.txt”); ?> 取文件大小 格式: filesize(filename) 说明:获取指定文件大小,出错返回false 例: filesize(“a.rar”) 删除文件 格式: unlink() 说明:删除一个文件,成功则返回true,否则返回false 例: unlink(“b.txt”) 创建目录 格式: mkdir(dirname) 说明:创建一个目录 例:mkdir(“newfolder”); //当前目录下创建新文件夹 删除目录 格式: rmdir(dirname) 说明:删除一个目录 例:rmdir(“newfolder”); 取得文件名 格式: basename(filepath) 说明:从指定的路径中返回文件名 例: basename(“c:\mytools\a.txt”) //返回a.txt 获取文件路径信息 pathinfo(path) 说明:返回文件路径信息,结果保存在数组中,数组下标为 dirname(路径) , basename(文件名) , extension(扩展名) 例:pathinfo(“c:\mytools\a.txt”) 取绝对路径 格式: realpath(filename) 说明:取指定文件的绝对路径,失败则返回false 例:realpath(“h.txt”)  //F:\apache\example\h.txt 复制文件 格式: copy(source,dest) 说明:将source文件复制到dest处 例:copy(“h.txt”,”newfloder\a.txt”) 判断是否是目录 格式:   is_dir(filename)    说明:判断给定文件名是否是一个目录。如果filename存在并且 为目录,则返回true,否则返回false. 例: if(is_dir(“newfolder”)) { echo “是文件目录”; } 打开目录 格式:opendir(path) 说明:打开一个指定文件目录,返回一个资源标示符 例: $hand = opendir(“.”) //打开根目录 读取目录 格式: readdir($handle) 说明:读取一个打开的文件目录流 readdir($hand); 关闭目录 格式:   closedir($handle) 说明:关闭一个打开的目录流 例:closedir($hand);

 

 

数据库存储文件的好处:

            1. 存档海量信息,历史数据随时可查。例如十年前的数据,如果没有数据库,想要找到是不容易的,可能存档的纸质资料或者电脑资料早就丢失了。            2. 提高记录和检索信息的效率。试想,如果是在一堆存档了几年的纸张合同里找到一张合同是很麻烦的事,尤其是如果你仅仅知道某产品的名称而不记得是某年某月某客户的合同的时候;即便是在众多Excel文档中检索,效率也是比较低的,而在数据库中检索,可能只需要几秒钟。            3. 减少重复工作。数据库里所需要录入的资料通常只需要录入一次即可,所有数据信息都可以根据需要归纳、整理、调用。比如:如果您使用Word或者Excel来开具订单,月底统计时,还需要再一次整理并一行一行录入到Excel里形成统计报表。而是用数据库,您只需要开单的时候录入一次即可,所有的统计信息都可以根据需要来定制自动完成统计报表。            4. 管理方便。数据库中可以加入流程管理,将审批流程纳入进去。例如:平常使用的合同或订单审批,需要一个或多个人签字盖章完成,还可能需要拿着单据走过多个部门,效率低下。而数据库中可以加入数字签名和数字签章,实现在线审批,并可以自定义审批流程,即先给甲签字,再给乙签字,再给丙盖章。并使得远程审批得以实现。即审批人或者总经理不需要在办公室,只要在能上网的地方就可以审批,甚至可以使用手机来审批。            5. 有效地集合企业资源,并合理分配使用。            6. 高效跟踪业务。            7. 数据库加密管理,可减少人员流动带来的资料或者技术损失。            8. 流程规范化,可减少对某些岗位人员的依赖,减少人员流动导致的岗位缺失带来的损失。            9. 可实现业务与财务同步,即时发生的成本可以快速反应到财务报表上。以上仅是部分好处,已经足以说明数据库管理信息的优势。数据库管理涉及到的需要配合的东西也很多,包括硬件、软件、电源环境、备份系统、操作人员、数据库开发与维护人员等等,是需要一点功夫的。需要根据自己企业的实际情况出发,选择合适的配置计划。

---------->DIYer(Memory‘_Min工)

posted on 2012-07-09 13:50  奋斗奔三  阅读(429)  评论(0)    收藏  举报

导航