PHPで大きなファイルを読み取るためのクラスSplFileObjectの使用法の詳細な説明

WBOY
リリース: 2016-07-25 08:53:36
オリジナル
2207 人が閲覧しました
  1. /**行戻り文字列からファイルの内容を返します
  2. */
  3. function getFileLines($filename, $startLine = 1, $endLine=50, $method='rb') {
  4. $content = array() ;
  5. $count = $endLine - $startLine;
  6. // PHP のバージョンを決定します (SplFileObject を使用するため、PHP>=5.1.0)
  7. if(version_compare(PHP_VERSION, '5.1.0', '>=') ){
  8. $fp = new SplFileObject($filename, $method);
  9. $fp->seek($startLine-1);//N 行目に進み、seek メソッドのパラメータは 0 から数え始めます
  10. for($i = 0; $i $content[]=$fp->current();// current() は現在の行の内容を取得します
  11. $fp->next( ) ;//次の行
  12. }
  13. }else{//PHP $fp = fopen($filename, $method);
  14. if(!$fp) return 'エラー: ファイルを読み取れません';
  15. for ( $ i=1;$i<$startLine;++$i) {// 前の $startLine 行をスキップします
  16. fgets($fp);
  17. }
  18. for($i;$i<=$endLine;++$ i ){
  19. $content[]=fgets($fp);// ファイル行の内容を読み取ります
  20. }
  21. fclose($fp);
  22. }
  23. return array_filter($content) // array_filter フィルター: false,null,' '
  24. }
  25. コードをコピー
手順: 上記には、!$fp->eof() または !feof($fp) の「最後まで読むかどうかの判断」は含まれていません。また、この判断は、多くの実行時間をテストすることでわかります。非常に多くの行があり、ここに追加する必要はまったくありません。 上記の関数から、特にファイル行数が非常に多く、次のコンテンツをフェッチする必要がある場合、SplFileObject を使用する方が以下の fgets よりもはるかに高速であることがわかります。 fgets には 2 つのループが必要で、$endLine 回ループする必要があります。 この方法には多大な労力がかかり、最も効率的な方法を見つけるために多くの中国語の書き方をテストしました。改善すべき点があると思われる方がいらっしゃいましたら、ぜひお知らせください。 使用して、行 35270 ~ 35280 の内容を返します。 コード:

echo '
';<ol>var_dump(getFileLines('test.php',35270,35280));<li>echo '
';
  • コピーコード
  • ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!