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);
数据库存储文件的好处:
浙公网安备 33010602011771号