PHP使用Unix的文件系统为模型的,在Unix(Linux)中,我们可以获得完整的七种类型。
在Windows系统中只能获取到“file”、“dir”和“unknown”三种基本文件类型
我们对一个文件的基本操作就是读和写
读取(写入)一个文件,流程如下:
打开文件->读(写)内容->关闭文件
打开文件:fopen()
读取内容:fread(),fgets(),fgetc()
写入文件:fwrite()
关闭文件:fclose()
一、打开文件
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
<?php
$file = fopen("/home/test/test.txt","r"); //第一个"/"是文件的根目录
//fopen更像是一个标示符,告诉计算机,我具体要操作哪个文件;
fclose($file);
?>
$filename 是一个文件的路径,而不只是一个文件名字。
w和a的模式都具有创建文件的功能。
mode | 说明 |
'r' | 只读方式打开,将文件指针指向文件头。 |
'r+' | 读写方式打开,将文件指针指向文件头。实际上是把头部的第一个内容给替换掉,原的位置内容没有了没有了。写入多少就给覆盖掉多少。 |
'w' | 写入方式打开,将文件指针指向文件头并将文件大小截为零(使用的话,会把文件里面内容全部清空掉)。如果文件不存在则尝试创建之。执行fopen的时候,就已经把内容清空了; |
'w+' | 读写方式打开,将文件指针指向文件头并将文件大小截为零(使用的话,会把文件里面内容全部清空掉)。如果文件不存在则尝试创建之。 |
'a' | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。直接写在末尾,不会覆盖。 |
'a+' | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
二、读取文件
string fread ( resource $handle , int $length )
读取若干内容,$length表示要读取多少个字节,默认长度是1024kb
string fgets ( resource $handle [, int $length ] )
若$length为空,则读取一行内容;否则读取$length-1个字节 ,写2个只会读取一个值,写一个不会读取出值。
默认长度是1024kb
两次连续读取的话,也是接着前一次的指针继续往下读,不会从头开始。
string fgetc ( resource $handle )
读取一个字节 ,读取"\n"的时候,"\n"是占用两个字节的。
ceil();向上取整(四舍五不入)
bool feof ( resource $handle )
测试文件指针是否到了文件结束的位置
fread案例:
test.txt |
abcdefg |
<?php
$file = fopen("/home/test/test.txt","r");
$content = '';
while (!feof($file )) {
$content .= fread($file, 1).'<br />';
$content .= fread($file, 1).'<br />';
$content .= fread($file, 1).'<br />';
}
fclose($file);
echo $concent;
?> 输出abc,而不是aaa。指针是继续向下读取,而不是从头开始。
fgetc案例:
test.txt |
abcdefg |
<?php
$file = fopen("/home/test/test.txt","r");
$content = '';
while (!feof($file )) {
$content .= fgetc($file, 1).'<br />';
$content .= fgetc($file, 1).'<br />';
$content .= fgetc($file, 1).'<br />';
}
fclose($file);
echo $concent;
?> 输出abc,而不是aaa。指针是继续向下读取,而不是从头开始。
读取文件操作案例:
<?php
$file = fopen("/home/test/test.txt","r");
$num=10;
$count=ceil($size/$num);
for($i=0;$i<$count;$i++){
$str.=fread($file,$num);
}
fclose($file);
echo $str;
?>
三、写入内容
int fwrite ( resource $handle , string $string [, int $length ] )
返回写入的字符数,出现错误时则返回 FALSE
如果指定了 $length,当写入了 $length 个字节或者写完了 string 以后,写入就会停止
如果要执行写入操作,则不能以 ‘r’方式打开文件
<?php
$file = fopen("/home/test/test.txt","r");
$str='上海爱帮大厦';
fwrite($file,$str);
?>
四、关闭文件
bool fclose ( resource $handle )
关闭一个已打开的文件指针
一般加不加都行,脚本执行完,系统会把全部资源回收,脚本执行速度很快,不加也没影响。
<?php
$file = fopen("/home/test/test.txt","r"); //1ms
$str='上海爱帮大厦';
//打开文件 1ms
//读取文件内容2ms
//处理数据20s
//这种情况是需要关闭文件的,如果处理数据是2ms则没必要关闭。
fwrite($file,$str);
?>
五、快速读取文件
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] ) (推荐使用的函数,快速读取文件里面的内容)
将整个文件读入一个字符串,通常只使用第一个参数 ,和前面三个函数一起使用的功能是一样的。
array file ( string $filename [, int $flags = 0 [, resource $context ]] )
把整个文件读入一个数组中,通常只使用第一个参数
<?php
$file = file_get_contents("/home/test/test.txt");
echo $file;
exit;
$arr=file("/home/test/test.txt");
?>返回的是一个数组,每一行放在一个数组元素里面,有多少行,数组就有多少个元素。
六、快速写入文
int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
将一个字符串写入文件 和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
$flags取值如下:
FILE_APPEND:如果文件 filename 已经存在,追加数据而不是覆盖、默认是w方式打开文件,这个参数相当于a方式打开文件)
LOCK_EX:在写入时获得一个独占锁。
函数:
(1)、检查是定的文件名是否正常
bool is_file(string $filename);
如果文件存在且正常,返回true;
否则返回false
$filename='./test.txt';
$filename1='./test';
is_file($filename) 判断是不是一个文件,并且文件存在返回true
is_file($filename1) false,文件夹不是文件
(2)、
获得文件的路径信息
array pathinfo($file);
$fielname='../../../index.php';
$rs=pathinfo($filename)
返回数组array(
参数 | 描述 |
path | 必需。规定要检查的路径。 |
process_sections | 可选。规定要返回的数组元素。默认是 all。 可能的值: PATHINFO_DIRNAME - 只返回 dirname PATHINFO_BASENAME - 只返回 basename PATHINFO_EXTENSION - 只返回 extension |
)
(01)判断文件/目录是否存在
bool file_exists(string $filename)
<?php
echo file_exists(“./test.txt");
?>
(02)获取文件大小
int filesize(string $filename)
返回值为文件的大小,单位byte 因为 PHP 的整数类型是有符号整型而且很多平台使用 32 位整型,
对 2GB 以上的文件,一些文件系统函数可能返回无法预期的结果 。
(3) 获得文件/目录的类型
string filetype($file); 如果失败返回false;
如果成功,返回下列值中的一种:
file
dir
unknown
fifo
char
block
link
(4)修改文件权限
bool chmod($file, $mode)
$mode 表示文件的权限,由4个数字组成,
第一个数字固定为0
第二个数字规定所有者的权限
第三个数字规定所有者所属的用户组的权限
第四个数字规定其他所有人的权限
<?php
chmod(“./test.txt",0600);
?>
读取权限:4
写入权限:2
执行权限:1
读、写权限:6(4+2)
读、写、执行权限:7(4+2+1)
依此类推。。。。。。
七、其他文件操作
移动和复制文件之后,要给定文件名
复制文件 (会覆盖重名的文件)
bool copy ( string $source , string $dest [, resource $context ] ) $source:源文件,$dest:目标文件
只能作用文件,操作文件夹报错;如果是在复制文件的时候,目标和要复制的文件同名字的话,会把目标文件覆盖掉。
复制文件实例:
<?php
$rs=copy('./1.txt','../../../upload/a.txt');///不可以直接写路径,一定要加上赋值后叫什么名字a.txt'。
var_dump($rs);
?>
移动、重命名文件、目录 (目录和文件都可以操作)
bool rename ( string $oldname , string $newname [, resource $context ] )
<?php
$path='../../../upload/';
$rs=rename('./1.txt' , $path . '1.txt');///移动,不可以直接写路径,一定要加上赋值后叫什么名字a.txt'。
$rs=rename('./1.txt' ,'./A.txt');///重命名,不可以直接写路径,一定要加上赋值后叫什么名字a.txt'。
var_dump($rs);
?>
删除文件 (只能删除文件,不能删除目录)
bool unlink ( string $filename [, resource $context ] )
<?php
$path='../../../upload/';
$rs=unlink('./1.txt');
var_dump($rs);
?>
宠物免费领养小程序,欢迎来踩