PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
本文实例讲述了PHP编程文件处理类SplFileObject和SplFileInfo用法。分享给大家供大家参考,具体如下:
php对于大文件的处理除了用以下方法外还可以直接调用linux命令
文件处理类:
SplFileInfo{
/*方法*/
public__construct(string$file_name)
publicintgetATime(void)//获取文件的最后访问时间
publicstringgetBasename([string$suffix])//获取文件的没有路径信息的基本名称,参数可以为文件后缀,若有参数则返回没有该后缀的文件基本名称。
publicintgetCTime(void)//返回文章最后一次变更的时间戳。
publicstringgetExtension(void)//获取文件扩展名
publicSplFileInfogetFileInfo([string$class_name])//以对象的形式返回文件路径和名称
publicstringgetFilename(void)//获取文件名称,不带路径
publicintgetGroup(void)//获取文件所在组,返回组id
publicintgetInode(void)//获取文件索引节点
publicstringgetLinkTarget(void)//获取文件链接目标
publicintgetMTime(void)//获取最后修改时间
publicintgetOwner(void)//获取文件的所有者
publicstringgetPath(void)//获取文件路径,不带文件名和最后的斜杠
publicSplFileInfogetPathInfo([string$class_name])//返回路径对象
publicstringgetPathname(void)//获取文件路径
publicintgetPerms(void)//获取文件权限
publicstringgetRealPath(void)//获取文件绝对路径,若文件不存在,返回false
publicintgetSize(void)//返回文件大小,单位字节
publicstringgetType(void)//返回文件类型,可能是file,link,dir
publicboolisDir(void)//判断是否是目录,是放回true否则返回false
publicboolisExecutable(void)//判断文件是否可执行,返回true,否则返回false
publicboolisFile(void)//如果文件存在且是一个普通文件(不是链接),返回true,否则返回false
publicboolisLink(void)//判断文件是否是连接,不是返回false
publicboolisReadable(void)//判断文件是否可读,可读返回true
publicboolisWritable(void)//判断文件是否可写,可写返回true
publicSplFileObjectopenFile([string$open_mode="r"[,bool$use_include_path=false[,resource$context=NULL]]])//获取文件对象信息
publicvoidsetFileClass([string$class_name="SplFileObject"])
publicvoidsetInfoClass([string$class_name="SplFileInfo"])
publicvoid__toString(void)//以字符串的形式返回文件路径及名称
}
使用方法:
$info=newSplFileInfo($file_name);
SplFileObject{
/*常量*/
constintegerDROP_NEW_LINE=1;
constintegerREAD_AHEAD=2;
constintegerSKIP_EMPTY=4;
constintegerREAD_CSV=8;
/*方法*/
publicstring|arraycurrent(void)//返回文件当前行内容
publicbooleof(void)//检测文件是否到末尾,如果到末尾返回true,否则返回false
publicboolfflush(void)//将缓冲内容输出到文件,成功时返回TRUE,或者在失败时返回FALSE。
publicstringfgetc(void)//按字符读取文件
publicarrayfgetcsv([string$delimiter=","[,string$enclosure="\""[,string$escape="\\"]]])//读取csv文件
publicstringfgets(void)//按行读取文件
publicstringfgetss([string$allowable_tags])//按行读取文件,并去掉html标记
publicboolflock(int$operation[,int&$wouldblock])//文件锁定或解锁,返回true或false
/*参数:
LOCK_SH共享锁(读).
LOCK_EX独占锁(写).
LOCK_UN释放锁(共享或独占).
LOCK_NB(附加锁定)如果不希望flock()在锁定时堵塞,则应在上述锁定后加上改锁(windows上不支持)
flock(LOCK_EX+LOCK_NB);//独占锁定加上附加锁定
flock(LOCK_UN+LOCK_NB);*/
publicintfpassthru(void)//输出文件指针之后的所有数据和字符数
publicintfputcsv(array$fields)//将一维数组作为一行输入csv文件中,返回写入的字符串长度或false
publicstringfread(int$length)//从文件中读取指定的字节数,返回读取的字符串或false
publicmixedfscanf(string$format[,mixed&$...])//从文件中读取一行并按照指定模式解析
/*例:
$file=newSplFileObject("misc.txt");
while($userinfo=$file->fscanf("%s%s%s")){
list($name,$profession,$countrycode)=$userinfo;
//Dosomethingwith$name$profession$countrycode
}*/
publicintfseek(int$offset[,int$whence=SEEK_SET])//按字节移动文件指针位置,
/*SEEK_SET设置文件指针到指定字节位置(默认为该模式).
SEEK_CUR设置文件指针到当前位置加上指定字节位置.
SEEK_END设置文件指针到文件末尾加上指定字节位置(此时字节经常为负值).
publicarrayfstat(void)//获取文件信息,以数组形式返回*/
/*
数字下标关联键名(自PHP4.0.6)说明
0devdevicenumber-设备名
1inoinodenumber-inode号码
2modeinodeprotectionmode-inode保护模式
3nlinknumberoflinks-被连接数目
4uiduseridofowner-所有者的用户id
5gidgroupidofowner-所有者的组id
6rdevdevicetype,ifinodedevice*-设备类型,如果是inode设备的话
7sizesizeinbytes-文件大小的字节数
8atimetimeoflastaccess(unixtimestamp)-上次访问时间(Unix时间戳)
9mtimetimeoflastmodification(unixtimestamp)-上次修改时间(Unix时间戳)
10ctimetimeoflastchange(unixtimestamp)-上次改变时间(Unix时间戳)
11blksizeblocksizeoffilesystemIO*-文件系统IO的块大小
12blocksnumberofblocksallocated-所占据块的数目*Windows下总是0。
*-仅在支持st_blksize类型的系统下有效。其它系统(如Windows)返回-1。*/
publicintftell(void)//返回当前文件位置,文件指针位置
publicboolftruncate(int$size)//将文件截断到指定的长度,若长度大于文件长度用空补齐(文件打开方法对其有影响)
publicintfwrite(string$str[,int$length])//将$str字符串写入文件,只写$length长度。放回写入字节数或null
publicarraygetCsvControl(void)//GetsthedelimiterandenclosurecharacterusedforparsingCSVfields.
publicintgetFlags(void)//GetstheflagssetforaninstanceofSplFileObjectasaninteger.
publicintgetMaxLineLen(void)//返回一行读取的最大字节数(在已设置的前提下),若未设置,默认为0
publicintkey(void)//获取当前行号。
publicvoidnext(void)//移动到下一行
publicvoidrewind(void)//返回到第一行
publicvoidseek(int$line_pos)//定位到文件指定行
publicvoidsetCsvControl([string$delimiter=","[,string$enclosure="\""[,string$escape="\\"]]])
publicvoidsetFlags(int$flags)
publicvoidsetMaxLineLen(int$max_len)//设置文件读取一行的最大字节数,若文件每行有10个字符,但设置最大读取为
publicboolvalid(void)//检查是否到达文件底部,未到达底部返回TRUE,抵达返回false.
}
用法:
$file=newSplFileObject("misc.txt",'r+');
while(!$file->eof()){
echo$file->current();
$file->next();
}
//关闭文件对象
$file=null;
常用文件处理方法:
/**
*获取文件指定行数范围数据
*@paramunknown$filename文件名称
*@paramnumber$startLine开始行
*@paramnumber$endLine结束行
*@paramstring$method
*@returnmultitype:
*/
functiongetFileLines($filename,$startLine=1,$endLine=20,$method='rb'){
$content=array();
$count=$endLine-$startLine;
$fp=newSplFileObject($filename,$method);
$fp->seek($startLine-1);//转到第N行,seek方法参数从0开始计数
for($i=0;$i<=$count;++$i){
$content[]=$fp->current();//current()获取当前行内容
$fp->next();//下一行
if($fp->eof()){
array_pop($content);
break;
}
}
returnarray_filter($content);//array_filter过滤:false,null,''
}
/**
*获取文章最后一行内容
*@paramstring$res文件路径/名
*/
functionget_last_line($res){
$fp=fopen($res,'r');
if(false==$fp){
return'error';
}
fseek($fp,-1,SEEK_END);
$s='';
while(($c=fgetc($fp))!==false)
{
if($c=="\n"&&$s)break;
$s=$c.$s;
fseek($fp,-2,SEEK_CUR);
}
fclose($fp);
return$s;
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。