.

PHP 文件处理13

文章作者:eKing
发表时间:2016年11月16日 08:35
浏览次数:303

PHP 文件处理

PHP 文件处理

PHP 提供了丰富的文件处理函数。文件处理主要包括:

文件创建/打开

fopen:(创建并)打开一个文件或 URL 地址。

文件写入

fwrite:向文件写入内容,可安全用于二进制文件 。

file_put_contents:向文件写入内容,等同依次调用 fopen,fwrite 以及 fclose 函数。

文件读取

fread:读取文件,可安全用于二进制文件。

fgets:从文件中读取 一行 数据,并将文件指针指向下一行。

fgetc:从文件中 逐字 读取文件数据,直到文件结束。

file_get_contents:把 整个文件 读入一个字符串。

file:把 整个文件 读入一个数组中,数组中的每个单元都是文件中相应的一行。

检查文件是否存在

file_exists:检查文件或目录是否存在。

检查文件是否可读写执行

is_readable:检查文件是否可读。

is_writable:检查文件是否是否可写入。

is_executable:检查文件是否可执行。

文件拷贝

copy:拷贝文件。

文件删除

unlink:删除文件。

取得文件大小、类型、修改时间信息

filesize:取得文件大小。

filetype:取得文件类型。

filemtime:取得文件修改时间。

文件指针函数

fclose:关闭文件指针。

feof:测试文件指针是否到了文件结束的位置。

fseek:在文件指针中定位。

rewind:倒回文件指针的位置。

ftell:返回文件指针读/写的位置。

提示:关于目录的处理请参看《PHP 目录》章节。

is_file()

is_file() 函数用于检查给定文件名是否为一个正常的文件,如果文件存在且为正常的文件则返回 TRUE ,否则返回 FALSE 。

语法:

bool is_file ( string filename )

例子:

<?php

var_dump(is_file('test.txt'));

var_dump(is_file('php'));

?>

运行例子输出:

bool(true)

bool(false)

参考阅读

is_dir 函数:检查给定文件名是否为一个目录。

提示

操作文件及目录时,需要注意文件目录的读、写、删权限。

PHP 文件创建与打开 fopen 函数

fopen() 函数用于打开一个文件或 URL 地址。

fopen() 打开文件

PHP 中没有单独的文件创建函数,创建和打开文件都是用 fopen() 函数。当使用 fopen() 函数打开一个文件时,如果文件不存在,则会尝试创建该文件,并返回一个资源。

如果打开失败,本函数返回 FALSE 。

语法:

resource fopen( string filename, string mode )

参数 filename 为尝试打开/创建的文件名,参数 mode 指定了打开模式,其可能的值如下:

打开模式 说明

r 只读,并将文件指针指向文件开始位置

r+ 读写,将文件指针指向文件开始位置

w 只写,将文件指针指向文件开始位置并将文件内容清空,如果文件不存在则尝试创建之

w+ 读写,将文件指针指向文件开始位置并将文件内容清空,如果文件不存在则尝试创建之

a 追加,将文件指针指向文件末尾来操作,如果文件不存在则尝试创建之

a+ 读写追加,将文件指针指向文件末尾来操作,如果文件不存在则尝试创建之

x 只写,并创建文件,如果文件已存在,则 fopen() 调用失败并返回 FALSE

x+ 读写,并创建文件,如果文件已存在,则 fopen() 调用失败并返回 FALSE

关于文件指针,参见《PHP 文件指针函数》。

创建一个文件的例子:

<?php

if(!file_exists("test.txt")){ //如果文件不存在(默认为当前目录下)

$fh = fopen("test.txt","w");

fclose($fh); //关闭文件

}

?>

提示:上述例子中如果 test.txt 已经存在,则不会创建新文件。

fopen() 打开 URL 地址

fopen() 函数还可用于打开互联网上的 URL 地址:

<?php

$fh = fopen("http://www.baidu.com/", "r");

if($fh){

while(!feof($fh)) {

echo fgets($fh);

}

}

?>

运行该例子,页面将显示百度首页。

注意:fopen() 返回的只是一个资源,要想显示打开的页面地址,还需要用 fgets() 函数读取并输出。

PHP fwrite 函数:将字符串写入文件(追加与换行)

PHP fwrite()

fwrite() 函数用于向文件写入字符串,成功返回写入的字符数,否则返回 FALSE 。

语法:

int fwrite( resource handle, string string [, int length] )

fwrite() 把 string 的内容写入文件指针 handle 处。

参数说明: 参数 说明

handle 要写入字符串的文件指针,一般由 fopen() 函数创建

data 要写入的字符串

length 可选,规定要写入的最大字节数

如果指定了可选参数 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止。

例子:

<?php

// 要写入的文件名字

$filename = 'file.txt';

// 写入的字符

$word = "你好!";

$fh = fopen($filename, "w");

echo fwrite($fh, $word); // 输出:6

fclose($fh);

?>

执行该例子程序,在程序同目录下,file.txt 文件内容为:你好!

使用 length 参数

上面的例子中,如果使用了 length 参数,则至多写入 length 个字符串:

echo fwrite($fh, $word, 4); // 输出:4

PHP fwrite 追加写入

对文件的追加写入,实际与 fwrite 函数无关,而与 fopen 函数打开文件的模式有关。当 fopen 打开文件时,mode 参数选择 a ,则表示在文件后面追加写入:

<?php

$filename = 'file.txt';

$word = "你好!";

$fh = fopen($filename, "a");

echo fwrite($fh, $word);

fclose($fh);

?>

PHP fwrite 换行写入

如果要在文件中实现换行写入,只需要在写入内容中需要换行的地方添加换行符 n 即可:

<?php

$filename = 'file.txt';

$word = "你好!n";

$fh = fopen($filename, "a");

echo fwrite($fh, $word);

fclose($fh);

?>

上面的例子在内容结尾添加了 n 换行符。要让 n 在写入文件时表示换行,写入时需使用双引号(如上面例子),如果使用单引号,n 字符不会被解释为换行而是当做 n 字符串,点击查看:PHP 字符串中单引号与双引号的区别。

n 已经是真正意义上的换行,在 windows 操作系统上如果要模拟回车换行(即用写字板打开文件时,不是黑方块而是一行一行的列出),可以在 n 前面加入 r 回车符:

<?php

$word = "你好!rn";

?>

PHP fwrite 写入权限

当打开一个已经存在的文件(通常是追加写入模式下),有必要检测该文件是否具有写入权限,从而避免一个系统错误的发生。使用 is_writable 函数检测文件是否可写。

下面是追加写入模式下一个比较严格检查的例子:

<?php

$filename = 'file.txt';

$word = "你好!n";

// 确定文件存在并且可写

if (is_writable($filename)) {

//打开文件

if (!$fh = fopen($filename, 'a')) {

echo "不能打开文件 $filename";

exit;

}

// 写入内容

if (fwrite($fh, $word) === FALSE) {

echo "不能写入到文件 $filename";

exit;

}

echo "成功地将 $word 写入到文件 $filename";

fclose($fh);

} else {

echo "文件 $filename 不可写";

}

?>

PHP fwrite 函数只是执行向文件写入字符串的动作,实际它的行为结果取决于 fopen 函数更多一些。如果想一次性将字符串写入或追加至文件,file_put_contents 函数可能是更优的选择。

参考阅读

PHP fopen:文件创建与打开。

PHP file_put_contents:一次性向文件写入或追加字符串。

PHP close:关闭一个打开的文件

PHP file_put_contents 函数:将字符串写入或追加到文件

PHP file_put_contents() 函数是一次性向文件写入字符串或追加字符串内容的最合适选择。

file_put_contents()

file_put_contents() 函数用于把字符串写入文件,成功返回写入到文件内数据的字节数,失败则返回 FALSE。

语法:

int file_put_contents ( string filename, string data [, int flags [, resource context]] )

参数说明: 参数 说明

filename 要写入数据的文件名

data 要写入的数据。类型可以是 string,array(但不能为多维数组),或者是 stream 资源

flags 可选,规定如何打开/写入文件。可能的值:

FILE_USE_INCLUDE_PATH:检查 filename 副本的内置路径

FILE_APPEND:在文件末尾以追加的方式写入数据

LOCK_EX:对文件上锁

context 可选,Context是一组选项,可以通过它修改文本属性

例子:

<?php

echo file_put_contents("test.txt", "This is something.");

?>

运行该例子,浏览器输出:

18

而 test.txt 文件(与程序同目录下)内容则为:This is something.。

提示

如果文件不存在,则创建文件,相当于fopen()函数行为。

如果文件存在,默认将清空文件内的内容,可设置 flags 参数值为 FILE_APPEND 以避免(见下)。

本函数可安全用于二进制对象。

以追加形式写入内容

当设置 flags 参数值为 FILE_APPEND 时,表示在已有文件内容后面追加内容的方式写入新数据:

<?php

file_put_contents("test.txt", "This is another something.", FILE_APPEND);

?>

执行程序后,test.txt 文件内容变为:This is something.This is another something.

file_put_contents() 的行为实际上等于依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

参考阅读

PHP fopen:文件创建与打开。

PHP fwrite:向文件写入字符串。

PHP close:关闭一个打开的文件。

PHP file_get_contents:把整个文件内容读入一个字符串。

PHP 文件读取 fread、fgets、fgetc、file_get_contents 与 file 函数

fread()、fgets()、fgetc()、file_get_contents() 与 file() 函数用于从文件中读取内容。

fread()

fread() 函数用于读取文件(可安全用于二进制文件)。

语法:

string fread( int handle, int length )

fread() 从文件指针 handle 读取最多 length 个字节。当遇到下列任何一种情况时,会停止读取文件:

在读取完最多 length 个字节数时

达到文件末尾的时候(EOF)

(对于网络流)当一个包可用时

或(在打开用户空间流之后)已读取了 8192 个字节时

从文件中读取 10 个字节(包括空格):

<?php

$filename = "test.txt";

$fh = fopen($filename, "r");

echo fread($fh, "10");

fclose($fh);

?>

提示

如果只是想将一个文件的内容读入到一个字符串中,应该用性能更好的 file_get_contents() 。

fgets()

fgets() 函数用于从文件中读取 一行 数据,并将文件指针指向下一行。

提示:如果想在读取的时候去掉文件中的 HTML 标记,请使用 fgetss() 函数。

语法:

string fgets( int handle [, int length] )

fgets() 从 handle 指向的文件中读取一行并返回长度最多为 length-1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length-1 字节后停止。如果没有指定 length ,则默认为 1K ,或者说 1024 字节。

例子:

<?php

$fh = @fopen("test.txt","r") or die("打开 test.txt 文件出错!");

// if条件避免无效指针

if($fh){

while(!feof($fh)) {

echo fgets($fh), '<br />';

}

}

fclose($fh);

?>

补充说明

feof() 函数测试文件指针是否到了文件结束的位置,该文件指针必须有效,如果是无效的资源,则会陷入无限循环中。参见《PHP 文件指针函数》

fgetc()

fgetc() 函数用于 逐字 读取文件数据,直到文件结束。

语法:

string fgetc( resource handle )

例子:

<?php

$fh = @fopen("test.txt","r") or die("打开 test.txt 文件出错!");

if($fh){

while(!feof($fh)) {

echo fgetc($fh);

}

}

fclose($fh);

?>

file_get_contents()

file_get_contents() 函数用于把 整个文件 读入一个字符串,成功返回一个字符串,失败则返回 FALSE。

语法:

string file_get_contents( string filename [, int offset [, int maxlen]] )

参数说明: 参数 说明

filename 要读取的文件名称

offset 可选,指定读取开始的位置,默认为文件开始位置

maxlen 可选,指定读取文件的长度,单位字节

例子:

<?php

// 读取时同事将换行符转换成 <br />

echo nl2br(file_get_contents('test.txt'));

?>

file()

file() 函数用于把 整个文件 读入一个数组中,数组中的每个单元都是文件中相应的一行,包括换行符在内。成功返回一个数组,失败则返回 FALSE。

语法:

array file( string filename )

例子:

<?php

$lines = file('test.txt');

// 在数组中循环并加上行号

foreach ($lines as $line_num => $line) {

echo "Line #{$line_num} : ",$line,'<br />';

}

?>

test.txt 文件内容:

你好!

这是第二行文字。

浏览器显示:

Line #0 : 你好!

Line #1 : 这是第二行文字。

PHP 检查文件是否存在 file_exists 函数

file_exists() 函数用于检查一个文件或目录是否存在。

file_exists()

file_exists() 函数检查文件或目录是否存在,成功返回 TRUE,否则返回 FALSE 。

语法:

bool file_exists( string filename )

例子:

<?php

$filename = 'test.txt';

if (file_exists($filename)) {

echo "文件 $filename 存在";

} else {

echo "文件 $filename 不存在";

}

?>

PHP 检查文件能否读写执行 is_readable、is_writable 与 is_executable 函数

is_readable() 函数用于检查文件是否可读,is_writable() 函数用于检查文件是否可写入,is_executable() 函数用于检查文件是否可执行。

is_readable()

is_readable() 函数用于检查文件是否可读,指定的文件或目录存在并且可读则返回 TRUE,否则返回 FALSE。

语法:

bool is_readable( string filename )

例子:

<?php

$filename = "test.text";

if (is_readable($filename)) {

echo "文件 $filename 可读";

} else {

echo "文件 $filename 不可读";

}

?>

is_writable()

is_writable() 函数用于检查文件是否可写入,如果文件存在并且可写则返回 TRUE,否则返回 FALSE。

语法:

bool is_writable( string filename )

filename 参数可以是一个允许进行是否可写检查的目录名。

例子:

<?php

$filename = "test.text";

if (is_writable($filename)) {

echo "文件 $filename 可写";

} else {

echo "文件 $filename 不可写";

}

?>

is_executable()

is_executable() 函数用于检查文件是否可执行,如果文件存在且可执行则返回 TRUE,否则返回 FALSE。用法请参考 is_writable() 。

PHP 文件拷贝 copy 函数

copy() 函数用于拷贝一个文件。

copy()

copy() 函数用于拷贝文件,如果成功则返回 TRUE,失败则返回 FALSE。

语法:

bool copy( string file, string newfile )

例子:

<?php

if (copy('test.txt', 'test.txt.bak')) {

echo "文件拷贝成功";

} else {

echo "文件拷贝失败";

}

?>

PHP 文件删除 unlink 函数

unlink() 函数用于删除文件。

unlink()

unlink() 函数用于删除一个文件,如果成功则返回 TRUE,失败则返回 FALSE。

语法:

bool unlink( string filename )

例子:

<?php

unlink("test.txt");

?>

参考阅读

rmdir():删除目录。

PHP 取得文件大小、类型、修改时间等信息

目录

filesize():取得文件大小

filetype():取得文件类型

filemtime():取得文件修改时间

filesize()

filesize() 函数用于取得文件大小,成功返回文件大小的字节数,否则返回 FALSE 。

语法:

int filesize( string filename )

例子:

<?php

$filename = 'test.txt';

echo $filename.'文件大小为: '.filesize($filename).' bytes';

?>

提示

filesize() 函数在碰到大于 2GB 的文件时可能会返回非预期的结果。对于 2GB 到 4GB 之间的文件通常可以使用 sprintf("%u", filesize($file)) 来克服此问题。

filetype()

filetype() 函数用于取得文件类型,成功返回返回文件的类型,可能的值有 fifo,char,dir,block,link,file 和 unknown 。错误则返回 FALSE 。

语法:

string filetype( string filename )

例子:

<?php

$filename = 'test.txt';

echo filetype($filename); //输出 file

?>

filemtime()

filemtime() 函数用于检查文件修改时间,成功返回文件上次被修改的时间戳,否则返回 FALSE。

语法:

int filemtime( string filename )

例子:

<?php

$filename = "test.txt";

echo "$filename 修改日期为:",date("Y-m-d H:i:s",filemtime($filename));

?>

运行例子输出:

test.txt 修改日期为:2010-12-31 23:30:22

参考阅读:

《PHP 时间戳 timestamp》

《PHP date 函数格式化时间》

PHP 文件指针函数

PHP 文件指针

文件指针通俗的理解就像是平常操作文档时鼠标指针的位置。PHP 提供了丰富的文件指针函数供使用:

fclose():关闭文件指针。

feof():测试文件指针是否到了文件结束的位置。

fseek():在文件指针中定位。

rewind():倒回文件指针的位置。

ftell():返回文件指针读/写的位置。

fclose()

fclose() 函数用于关闭一个已打开的文件指针(将 handle 指向的文件关闭),如果成功则返回 TRUE,失败则返回 FALSE 。

语法:

bool fclose( resource handle )

例子:

<?php

$fh = fopen("test.txt","r");

fclose($fh);

}

?>

文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。

feof()

EOF(End Of File,文件结束位置)是文件处理中非常重要的概念,在 PHP 中提供了 feof() 函数来检测是否达到了 EOF。关于 EOF 更多介绍参看百度百科:http://baike.baidu.com/view/56074.htm

如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。

语法:

bool feof( resource handle )

例子:

<?php

$fh = @fopen("test.txt","r") or die("打开 test.txt 文件出错!");

// if条件避免无效指针

if($fh){

while(!feof($fh)) {

echo fgets($fh), '<br />';

}

}

fclose($fh);

?>

重要提示

如果传递的文件指针无效可能会陷入无限循环中,因为 EOF 不会返回 TRUE。所以在使用 feof() 函数之前对文件指针的有效性进行检测是十分必要的。

fseek()

fseek() 函数用于在文件指针中定位,成功则返回 0 ,否则返回 -1 。

语法:

int fseek( resource handle, int offset [, int whence] )

参数说明: 参数 说明

handle 文件指针

offset 定位字节数

whence 可选,定位辅助说明,可能的值如下:

SEEK_SET:定位置等于 offset 字节

SEEK_CUR:设定位置为当前位置加上 offset

SEEK_END设定位置为文件尾加上 offset。(要移动到文件尾之前的位置,需要给 offset 传递一个负值。)

如果没有指定 whence,默认为 SEEK_SET。

例子:

<?php

$fh = fopen('test.txt', 'r');

fseek($fh, 5);

echo ftell($fh); //输出:5

?>

提示:该函数可能不能用于在 fopen() 中以 "http://" 或 "ftp://" 格式打开所返回的文件指针。

rewind()

rewind() 函数用于倒回文件指针的位置到开头,如果成功则返回 TRUE,失败则返回 FALSE 。

语法:

bool rewind( resource handle )

例子:

<?php

$fh = fopen("test.txt","r");

rewind($fh);

echo ftell($fh); //输出:0

?>

ftell()

ftell() 函数用于返回文件指针读/写的位置,成功返回 0 ,出错返回 FALSE。

语法:

int ftell ( resource handle )

文件指针必须是有效的,且必须指向一个通过 fopen() 或 popen() 成功打开的文件,使用例子见上。

上一篇:PHP 表单12
下一篇:PHP 文件上传14