1.打开文件
定义和用法
fopen() 函数打开文件或者 URL。
如果打开失败,本函数返回 FALSE。
语法
fopen(filename,mode,include_path,context)
参数描述
filename必需。规定要打开的文件或 URL。
mode必需。规定要求到该文件/流的访问类型。可能的值见下表。
include_path可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。
mode 参数的可能的值
mode说明
"r"只读方式打开,将文件指针指向文件头。
"r "读写方式打开,将文件指针指向文件头。
"w"写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w "读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
2.访问文件
1)fread()
定义和用法
fread() 函数读取文件(可安全用于二进制文件)。
语法
fread(file,length)
参数描述
file必需。规定要读取打开文件。
length必需。规定要读取的最大字节数。
说明
fread() 从文件指针 file 读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。
返回所读取的字符串,如果出错返回 false。
例:fread.php
<?php
$filename = "file.txt"; //文件名称
$handle = fopen($filename, "r");//只读打开文件句柄指针
$str1 = fread($handle,filesize($filename));//读取文件,按照文件自身大小读取
echo '$str1 = '.$str1.'<br><br>';//读取文件内容
fclose($handle);//关闭只读
$handle = fopen($filename, "r");//再次打开只读文件
$str2 = fread($handle,7);//读取文件,按照7个字节读取 换行占两个字节
echo '$str2 = '.$str2;//读取文件内容
fclose($handle);//关闭只读
?>
结果:
注:读取文件3个步骤
调用fopen函数打开文件句柄
调用fread等文件读取函数
调用fclose函数关闭文件句柄
2)fgets()
定义和用法
fgets() 函数从文件指针中读取一行。
语法
fgets(file,length)
参数描述
file必需。规定要读取的文件。
length可选。规定要读取的字节数。默认是 1024 字节。
说明
从 file 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(要看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
若失败,则返回 false。
例:fgets.php
<?php
$handle = @fopen("file.txt", "r");//打开只读句柄
$i = 0;//定义变量存储行数
while (!feof($handle)) { //函数检测是否已到达文件末尾 (eof) 是或者错误返回true
$buffer = fgets($handle, 4096); //句柄处读取行内容 字节大小为4096-1的内容
$i = $i 1;//计数
echo "第 $i 行".$buffer.'<br>';//打印读取几行内容
}
fclose($handle);//关闭句柄
?>
结果:
注:
定义和用法
feof() 函数检测是否已到达文件末尾 (eof)。
如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。
语法
feof(file)
参数描述
file必需。规定要检查的打开文件。
说明
file 参数是一个文件指针。这个文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件。
3)fgetc()
定义和用法
fgetc() 函数从文件指针中读取一个字符。
语法
fgetc(file)
参数描述
file必需。规定要检查的文件。
说明
返回一个包含有一个字符的字符串,该字符从 file 指向的文件中得到。碰到 EOF 则返回 false。
文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件。
例:fgetc.php
<?php
$fp = @fopen('file.txt', 'r');//打开只读句柄
$i = 0;//定义变量存储字符次数
while (false !== ($char = fgetc($fp))) { //读取句柄中每一个字符直到EOF 返回false
$i = $i 1;//计数
echo "第 $i 字符:$char<br>";//打印读取第几个字符
}
?>
结果:
4)file()
定义和用法
file() 函数把整个文件读入一个数组中。
与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。
如果失败,则返回 false。
语法
file(path,include_path,context)
参数描述
path必需。规定要读取的文件。
include_path可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context
可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
说明
对 context 的支持是 PHP 5.0.0 添加的。
返回的数组中每一行都包括了行结束符,因此如果不需要行结束符时还需要使用 rtrim() 函数。
例:file.php
<?php
$lines = file('file.txt');// 把文件内容存储到$lines 数组里,数组中每个单元都是文件中的一行,包括换行符在内
foreach ($lines as $num => $line) { //foreach方式遍历打印数组内容
echo "第{$num}行: ".$line."<br>";
}
?>
结果:
5)fgetss()
定义和用法
fgetss() 函数从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记。
与 fgets() 相同,不同的是 fgetss 尝试从读取的文本中去掉任何 HTML 和 PHP 标记。
语法
fgetss(file,length,tags)
参数描述
file必需。规定要读取的文件。
length可选。规定要读取的字节数。默认是 1024 字节。该参数在 PHP 5 之前是必需的。
tags可选。规定不会被删除的标签。
说明
可以用可选的第三个参数 tags 指定哪些标记不被去掉。
若失败,则返回 false。
例:fgetss.php
<?php
$handle = @fopen("file.html", "r");//打开只读句柄
$i = 0;//定义变量存储行数
while (!feof($handle)) {//函数检测是否已到达文件末尾 (eof) 是或者错误返回true
$lines = fgetss($handle);//从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记。
$i = $i 1;//计数
echo "第{$i}行: ".$lines."<br>";//打印读取几行内容
}
?>
file.html
<html>
<head>title
</head>
<body>
<pre>This is a file.
<table>
<tr>
<td>abcd</td>
<td>xyz</td>
</tr>
</table>
</body>
</html>
结果:
3.写入文件
1)fwrite
定义和用法
fwrite() 函数写入文件(可安全用于二进制文件)。
语法
fwrite(file,string,length)
参数描述
file必需。规定要写入的打开文件。
string必需。规定要写入文件的字符串。
length可选。规定要写入的最大字节数。
说明
fwrite() 把 string 的内容写入文件指针 file 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
fwrite() 返回写入的字符数,出现错误时则返回 false。
例:fwrite.php
<?php
$filename = 'file.txt'; //文件名称
$content = "abcd\nxyz";//文件内容
$handle = fopen($filename,'a ');//读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
if(fwrite($handle,$content) === false) //返回写入的字符数,出现错误时则返回 false。
{
echo "写入{$filename}文件失败";//写入{$filename}文件失败
exit;
}
echo "写入{$filename}文件成功";//写入{$filename}文件成功
fclose($handle);//关闭句柄
?>
结果:
2)file_put_contents
定义和用法
file_put_contents() 函数把一个字符串写入文件中。
与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
语法
file_put_contents(file,data,mode,context)
参数描述
file必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
data可选。规定要写入文件的数据。可以是字符串、数组或数据流。
mode
可选。规定如何打开/写入文件。可能的值:
FILE_USE_INCLUDE_PATH
FILE_APPEND
LOCK_EX
context
可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
说明
参数 data 可以是数组(但不能是多维数组)。
自 PHP 5.1.0 起,data 参数也可以被指定为 stream 资源,stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。
对 context 参数的支持是 PHP 5.0.0 添加的。
返回值
该函数将返回写入到文件内数据的字节数。
提示和注释
提示:使用 FILE_APPEND 可避免删除文件中已有的内容。
例:file_put_contents.php
<?php
$content = 'file_put_contents';//写入内容
$file = 'file.txt';//写入文件
if(file_put_contents($file ,$content) === false)//返回写入的字符数,出现错误时则返回 false。
{
echo "写入{$file}文件失败";//写入{$file}文件失败
exit;
}
echo "写入{$file}文件成功";//写入{$file}文件成功
?>
结果:
4.复制文件
定义和用法
copy() 函数拷贝文件。
语法
copy(source,destination)
参数描述
source必需。规定要复制的文件。
destination必需。规定复制文件的目的地。
说明
将文件从 source 拷贝到 destination。如果成功则返回 TRUE,否则返回 FALSE。
提示和注释
提示:如果要移动文件的话,请使用 rename() 函数。
例:copy.php
<?php
$file = 'filebak.txt'; //被复制原文件
$newfile = 'file.txt';//复制后文件
if (!copy($file, $newfile)) {//如果成功则返回 TRUE,否则返回 FALSE。
echo "文件复制失败:{$file} copy to {$newfile}";
}
else {
echo "文件复制成功:{$file} copy to {$newfile}";
}
?>
结果:
原文件不存在报错
5.删除文件
定义和用法
unlink() 函数删除文件。
若成功,则返回 true,失败则返回 false。
语法
unlink(filename,context)
参数描述
filename必需。规定要删除的文件。
context可选。规定文件句柄的环境。Context 是可修改流的行为的一套选项。
例:unlink.php
<?php
$filename = 'file.txt'; //要被删除文件
fopen($filename,'a ');//读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
if(!unlink($filename))//若成功,则返回 true,失败则返回 false。
{
echo "文件{$filename}删除失败";
}
else
{
echo "文件{$filename}删除成功";
}
?>
结果:
6.重命名文件
定义和用法
rename() 函数重命名文件或目录。
若成功,则该函数返回 true。若失败,则返回 false。
语法
rename(oldname,newname,context)
参数描述
oldname必需。规定要重命名的文件或目录。
newname必需。规定文件或目录的新名称。
context可选。规定文件句柄的环境。context 是可修改流的行为的一套选项。
例:rename.php
<?php
$filename = 'file.txt';//被重命名原文件
$newname = 'newfile.txt';//重命名文件
fun_rename($filename,$newname);//调用fun_rename函数
function fun_rename($filename,$newname)//创建函数 形参$filename和$newname
{
if(!rename($filename,$newname))//若成功,则该函数返回 true。若失败,则返回 false。
{
echo "文件{$filename}重命名为{$newname}失败<br>";
}
else
{
echo "文件{$filename}重命名为{$newname}成功<br>";
}
}
?>
结果: