php 文件操作
文件操作
1.打开文件
fopen — 打开文件或者 URL
resource fopen( string $filename, string $mode[, bool $use_include_path = false[, resource $context]] )
fopen() 将 filename 指定的名字资源绑定到一个流上。
$filenamee 打开文件路径
$mode 参数指定了所要求到该流的访问类型(读写)
参数 | 注解 |
---|---|
'r' | 只读方式打开,将文件指针指向文件头 |
'r+' | 读写方式打开,将文件指针指向文件头 |
'w' | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之 |
'w+' | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之 |
'a' | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之 |
'a+' | 读写方式打开,将文件指针指向文件头 |
Note:
为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 'b' 标记
例如:fopen ($file , "ab");
2.string fread( resource $handle, int $length)
fread — 读取文件(可安全用于二进制文件)
$handle 文件系统指针,是典型地由 fopen() 创建的 resource(资源)。
$length 最多读取 length 个字节
3.string fgets( resource $handle[, int $length] )
从文件指针中读取一行。
handle 文件指针必须是有效的,必须指向由 fopen() 或 fsockopen() 成功打开的文件(并还未由 fclose() 关闭)。
length
从 handle 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
4.string fgetc( resource $handle)
从文件句柄中获取一个字符。
<?php
$fp = fopen('somefile.txt', 'r');
if (!$fp) {
echo '文件打开失败';
exit;
}
while (false !== ($char = fgetc($fp))) {
echo "$char\n";
}
fclose($handle);
?>
5.文件写入数据
fwrite ($handle,$str,[$length])
$str 写入的字符串
$lenght 写入多少个字节
6.其他文件方法
fclose() 关闭文件
file_get_contents() 获取文件内容
file_put_contents() 将一个字符串写入文件
is_file() 判断给定文件是否为一个正常的文件
filsesize() 取得文件大小
filetype() 文件类型
file_exists() 检查文件或目录是否存在
unlink() 删除文件函数
file() 把整个文件读入一个数组中
fileatime($file_path) 获取文件上次访问时间
filemtime($file_path) 获取文件上次内容被修改的时间
is_readable() 判断给定文件名是否可读
is_writable() 判断给定的文件名是否可写
7.例子
<?php
/*
文件路径可以是
1.相对路径 $file = "./test.txt"
2.绝对路径 $file = "D:/wamp/www/php/file/test.txt"
3.url远程文件 "http://localhost/php/file/test.txt"
当远程文件打开,不能以写入的方式打开
必须是远程存在的文件
操作文件分为以下三步
1.打开文件
2.操作文件 (读 ,写等)
3.关闭文件
*/
$filename = './test.txt';
$file=fopen($filename,'ab');
if(!$file){
echo "打开文件失败";
exit;
}
//写入文件
$str="hello world!";
if(fwrite($file,$str)){
echo "写入文件成功";
}
//读取文件 fopen的打开方式应该是r或r+
$file=fopen($filename,'rb');
echo fread($file,filesize($filename));//hello world!
//关闭文件
fclose($file);
?>
目录操作
1 常用方法
is_dir() 判断是不是一个目录
mkdir() 新建目录(创建之前需要检测目录是否已经存在)
opendir() 打开目录,返回一个目录句柄
readdir() 从目录句柄中读取条目
scandir() 列出指定路径中的文件和目录(以数组形式返回)
getdir() 取得当前工作目录(当前脚本目录)
chdir() 改变目录
realpath() 转换为更直观的目录(以当前绝地路径显示出来)
closedir() 关闭目录句柄
2.例子
<?php
/**
* 创建目录
*/
$dir="./a";
if(file_exists($dir)){
echo "目录已存在";
exit;
}
/**
* bool mkdir( string $pathname[, int $mode = 0777[, bool $recursive = false[, resource $context]]] )
* pathname 目录的路径
* 默认的 mode 是 0777,意味着最大可能的访问权
* recursive 当创建包含子目录时必须为true
*/
if(mkdir($dir)){
echo "创建成功!";
};
// 打开文件
$opDir = opendir($dir);
// 输出目录
while (($fileName = readdir($opDir)) !== false) {
echo $fileName."<br />";
}
// 关闭目录
closedir($opDir);
?>
例子:获取给定目录下所有.php文件
<?php
//获取给定下的所有.php文件
function getDir($path){
//判断是否是目录
if(is_dir($path)){
// 列出指定路径中的文件和目录(以数组形式返回)
$dir = scandir($path);
foreach($dir as $val){
$sub_path=$path .'/'.$val;
if($val==="."|| $val===".."){
continue;
} else if(is_dir($sub_path)){
echo '目录名:'.$val .'<br/>';
getDir($sub_path);
}else {
//.$path 可以省略,直接输出文件名
if(preg_match("/\.php$/i",$val)){
echo ' 文件:'.$path.'/'.$val.' <hr/>';
}
}
}
}
}
$path="../file";
getDir($path);