PHP操作大文件
$file = new SplFileInfo('foo-bar.txt'); print_r(array( 'getATime' => $file->getATime(), //最后访问时间 'getBasename' => $file->getBasename(), //获取无路径的basename 'getCTime' => $file->getCTime(), //获取inode修改时间 'getExtension' => $file->getExtension(), //文件扩展名 'getFilename' => $file->getFilename(), //获取文件名 'getGroup' => $file->getGroup(), //获取文件组 'getInode' => $file->getInode(), //获取文件inode 'getLinkTarget' => $file->getLinkTarget(), //获取文件链接目标文件 'getMTime' => $file->getMTime(), //获取最后修改时间 'getOwner' => $file->getOwner(), //文件拥有者 'getPath' => $file->getPath(), //不带文件名的文件路径 'getPathInfo' => $file->getPathInfo(), //上级路径的SplFileInfo对象 'getPathname' => $file->getPathname(), //全路径 'getPerms' => $file->getPerms(), //文件权限 'getRealPath' => $file->getRealPath(), //文件绝对路径 'getSize' => $file->getSize(),//文件大小,单位字节 'getType' => $file->getType(),//文件类型 file dir link 'isDir' => $file->isDir(), //是否是目录 'isFile' => $file->isFile(), //是否是文件 'isLink' => $file->isLink(), //是否是快捷链接 'isExecutable' => $file->isExecutable(), //是否可执行 'isReadable' => $file->isReadable(), //是否可读 'isWritable' => $file->isWritable(), //是否可写 ));
遍历:
try { foreach(new SplFileObject('foo-bar.txt') as $line) { echo $line; } } catch (Exception $e) { echo $e->getMessage(); }
读取制定行:
try { $file = new SplFileObject('foo-bar.txt'); $file->seek(2); echo $file->current(); } catch (Exception $e) { echo $e->getMessage(); }
写入CSV文件:
$list = array ( array( 'aaa' , 'bbb' , 'ccc' , 'dddd' ), array( '123' , '456' , '7891' ), array( '"aaa"' , '"bbb"' ) ); $file = new SplFileObject ( 'file.csv' , 'w' ); foreach ( $list as $fields ) { $file -> fputcsv ( $fields ); }
获取CSV的行数 $csv_file = 'path/bigfile.csv'; $spl_object = new SplFileObject($csv_file, 'rb'); $spl_object->seek(filesize($csv_file)); echo $spl_object->key();
CSV大文件快速定位 $csv_file = 'path/bigfile.csv'; $start = 100000; // 从第100000行开始读取 $num = 100; // 读取100行 $data = array(); $spl_object = new SplFileObject($csv_file, 'rb'); $spl_object->seek($start); while ($num-- && !$spl_object->eof()) { $data[] = $spl_object->fgetcsv(); $spl_object->next(); } print_r($data);