版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28946307/article/details/70156316
文件模式
- 打开文件为了只读,只写或者读和写。
- 如果要写一个文件,是覆盖已有内容进行重写或者仅仅将新数据追加到文件末尾。如果文件已经存在,则可以终止程序的执行而不是覆盖该文件。
- 如果希望在一个区分了二进制方式和纯文本方式的系统上写一个文件,还必须指定采用的方式。
fopen()函数文件模式总结
- r
- 只读,读模式,打开文件,从文件头开始读
- r+
- 只读,读模式,打开文件,从文件头开始读
- w
- 只写,写模式,打开文件,从文件头开始写。如果该文件已经存在,将删除文件所有内容。如果文件不存在,函数将创建这个文件。
- w+
- 只写,写模式,打开文件,从文件头开始写。如果文件已经存在,将删除文件所有的内容。如果文件不存在,函数将创建这个文件。
- x
- 谨慎写,写模式打开一个文件,从文件头开始写。如果文件已经存在,该文件将不会被打开,fopen()函数将返回false。而且php将产生一个警告。
- x+
- 谨慎写,读/写模式打开文件,从文件头开始写。如果文件已经存在,该文件将不会被打开,fopen()函数将返回false。而且php将产生一个警告。
- a
- 追加,打开文件,如果该文件已有内容,将从文件末尾开始追加(写),如果文件不存在,函数将创建这个文件
- a+
- 追加,打开文件,如果该文件已有内容,将从文件末尾开始追加(写),如果文件不存在,函数将创建这个文件
- b
- 二进制模式,用于与其他模式进行连接,如果文件系统能够区分二进制文件和文本文件,你可能会使用他,windows系统可以区分,而unix则不能区分,推荐一直使用这个选项,以便获得最大程度的可移植性。二进制是默认的模式。
- t
- 文本,用于与其他模式的结合。这个模式只是windows系统下一个选项,他不是推荐选项,除非你曾经在代码中使用了b选项。
fopen()函数
$DOCUMENT=$_SERVER['DOCUMENT_ROOT'];
$fp=fopen("$DOCUMENT/order.txt","rb");
fclose($fp); //读写完毕之后,记得关闭文件指针。
- 第一个参数是要打开的文件
- 第二个参数指定读写模式
- 第三个参数,可选参数,如果要在include_path中搜索一个文件,就可以使用他。如果希望进行如此操作,可以将这个参数设置为1。如果希望php搜索include_path,就不需要提供目录名称或者路径了。
@$fp=fopen("order.txt","rb","true");
- 第四个参数,可选参数,fopen()函数允许文件名称以协议名称开始(例如,http://),并且在一个远程的位置打开文件。对于这个额外的参数,他还支持一些其他的协议。我们将在本章的下一届详细介绍该函数的使用。
- 如果fopen()函数成功的打开一个文件,该函数将返回一个指向这个文件的文件指针。文件指针保存在$fp中。可以通过这个变量来访问文件。
通过ftp或http打开文件
- 如果使用的文件名是以ftp://开始的,fopen()函数将建立一个链接到指定服务器的被动模式,并返回一个指向文件开始的指针。
- 如果使用的文件名是以http://开始的,fopen()函数将建立一个到指定服务器的http链接,并返回一个指向http响应的指针。
- URL中的域名不区分大小写,但是路径和文件名可能会区分大小写
打开文件可能遇到的问题
$DOCUMENT=$_SERVER['DOCUMENT_ROOT'];
@$fp=fopen("$DOCUMENT/order.txt","rb");
我们可以通过@来抑制文件打开中php自动抛出的一场错误信息,并且通过对$fp的布尔值,来进行判断是否成功的打开了文件,并作出相应的逻辑处理。
写文件
fwrite($fp,$outputString,int length);
- 该函数指定将
outputString中的字符串写入到 fp指定的文件中。 - 第三个参数,可选参数,指定要写入的数据的长度。使用这个函数写入的时候,一直写到字符串末尾或者写入了length字节之后,满足其中之一就会停止写入。
strlen($outputString);
- php内置获取字符串长度的函数
关闭文件
fclose($fp);
- 如果该文件被成功的关闭,函数将返回一个true。反之false。一般不会出错。
读文件
feof($fp);
- 如果该文件指针指向了文件末尾,它将返回true。
- feof == file end of file
每次读取一行数据
fgets($fp,999);
- 这个函数可以从文件中每次读取一行数据,这样,它将不断的读入数据。直至读到一个换行字符(\n),或者文件结束符EOF,或者是从文件中都去了998B。可以读取的最大长度为指定的长度减去1B。
fgetss($fp,999,string allowtags);
- 上一个函数的变体,它可以过滤掉字符串中包含的PHP和HTML标记。如果要过滤任何特殊标记,可以将它们包含在allowtags字符串中。可以避免读入的字符串中包含恶意的html等代码,破化你的网页样式。
fgetcsv($fp,999,string [,string delimiter [, string enclosure]]);
- 必须向这个函数传递一个用于分割表单域的定界符。
$order=fgetcsv($fp,100,string ,"\t");
- 以上代码将从文件中读取一行,并且在有制表符(\t)的地方将文件内容分行。该函数结果将返回一个数组。
- 参数length应该比要读的文件中最长的数据行的字符数要大。
- enclosure参数用来指定每行中封闭每一个域的字符。如果没有制定任何字符,在默认情况下,这个字符就是”“双引号。
相关函数
readfile(“文件路径”); //打开文件,并且将文件内容输出到标准输出(浏览器)中,然后在关闭这个文件。
$DOCUMENT=$_SERVER['DOCUMENT_ROOT'];
@$fp=fopen("$DOCUMENT/order.txt","rb");
fpssthru($fp);
//把文件中的内容发送到标准输出
$filearray=file(“文件路径”);
//把结果发送到一个数组中
file_get_contents();
//与readfile()函数相同,该函数以字符串形式返回文件内容。而不是将文件内容显示到浏览器中。
fgetc($fp);
//从文件中读取一个字符
fread(resource fp,int length);
//读取任意长度,读取到length的长度或者读取到文件尾结束。
file_exists(文件路径);
//文件是否存在,布尔值
filesize(文件路径);
//查看文件大小,
nl2br(string);
//将字符串中的\n替换为<br />
unlink(文件路径);
//删除一个文件,若无法删除或者删除出错,返回false
rewind($fp);
//将文件的指针复位到文件的开始位置处。
ftell($fp);
//以字节为单位报告文件指针当前在文件中的位置
fseek(resource fp,int offset [, int where]);
//可以将文件指针fp从where位置移动offset个字节。默认where为文件开始处
文件锁定
- 为了避免多个进程同时访问一个文件造成的数据处理的出错的情况。在访问一个文件的时候我们最好对这个文件进行锁定。
LOCK_SH
读操作锁定,意味着文件可以共享,其他人可以读该文件。
LOCK_EX
写操作锁定,这是互斥的。该文件不能被共享
LOCK_UN
释放已有的锁定
LOCK_NB
防止在请求加锁时发生阻塞
flock(resource fp, int operation [, int & wouldblock]);
- 如果文件锁定成功,返回true,反之false。