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程序设计有所帮助。