ホームページ  >  記事  >  バックエンド開発  >  PHPを使用してファイルを1行ずつ読み取ります

PHPを使用してファイルを1行ずつ読み取ります

PHPz
PHPzオリジナル
2023-09-04 18:53:061788ブラウズ

PHP を使用してファイルを 1 行ずつ読み取る理由は 2 つあります。

  1. 現在取り組んでいるプロジェクトでは、ファイルを一度に 1 行ずつ処理する必要があります。
  2. 非常に大きなファイルを読み取っていますが、メモリ制限を超えずにファイルを読み取る唯一の方法は、一度に 1 行ずつ読み取ることです。

ファイルを読み取るには file() を使用します

PHP の file() 関数を使用すると、ファイル全体を一度に配列に読み取ることができます。配列要素はファイルの個々の行です。したがって、配列を反復処理することで、ファイル内の行を反復処理できます。この関数は 3 つのパラメータを受け入れます:

  • ファイル名: これは読み取りたいファイルです。ファイル名として URL を指定することもできます。
  • flags: これは、次の定数値の 1 つ以上に設定できるオプションのパラメーターです: FILE_USE_INCLUDE_PATHFILE_IGNORE_NEW_LINES、および FILE_SKIP_EMPTY_LINES## #。
  • Context: これは、ストリームの動作を変更するために使用されるオプションのパラメーターでもあります。

FILE_SKIP_EMPTY_LINES フラグを使用して、ファイル内のすべての空行をスキップします。 FILE_IGNORE_NEW_LINES を使用して、個々の行から行末を削除することもできます。

この関数は、成功した場合はファイルの内容を含む配列を返し、失敗した場合は

false を返します。ファイルが存在しない場合は、E_WARNING レベルのエラーも表示されます。この機能の使用例を次に示します。 リーリー

上記のコードの出力は次のとおりです:

リーリー

出力には空の行がいくつかあることがわかります。

FILE_SKIP_EMPTY_LINES フラグを使用してそれらを削除できます。また、明らかではないかもしれませんが、上の行には改行が含まれています。そのため、これらの行をエコーするときに独自の改行を追加する必要はありません。 FILE_IGNORE_NEW_LINES フラグを使用して空行を削除できます。 リーリー

これらのフラグを使用した出力は次のようになります:

リーリー

メモリ使用量を気にしない場合は、

file() 関数を使用すると、PHP でファイルを 1 行ずつ読み取る簡単な方法です。ただし、メモリ使用量が問題になる場合は、file() がファイル全体を一度に配列に読み込むため、より創造的にする必要があります。

ファイルを読み取るには

fgets() を使用します

PHP を使用してファイルを 1 行ずつ読み取るもう 1 つの方法は、

fgets() 関数を使用することです。必須パラメータが 1 つあり、それは有効なファイル ハンドルです。 fopen() 関数を使用してファイル ハンドルにアクセスします。これは実行したいコードです: リーリー

最初の行では、ファイルを読み取り専用モードで開きます。次に、

$file_handle をパラメータとして受け取り、行を返す関数を定義します。 yield ステートメントを使用していることと、関数 get_all_lines() がジェネレーター関数であることに注意してください。これまで PHP でジェネレーター関数を使用したことがない場合は、それについて読んでみるとよいでしょう。

  • PHPを使用してファイルを1行ずつ読み取ります

我们在 get_all_lines() 中使用 feof() 函数来检查文件指针是否到达文件末尾。只要我们不在文件末尾,我们就会屈服。通过运行上面的代码,您应该得到以下输出:

1. The Project Gutenberg eBook of Pride and Prejudice, by Jane Austen
2. 
3. This eBook is for the use of anyone anywhere in the United States and
4. most other parts of the world at no cost and with almost no restrictions
5. whatsoever. You may copy it, give it away or re-use it under the terms
6. of the Project Gutenberg License included with this eBook or online at
7. www.gutenberg.org. If you are not located in the United States, you
8. will have to check the laws of the country where you are located before
9. using this eBook.
10. 
11. Title: Pride and Prejudice
12. 
13. Author: Jane Austen
14. 
15. Release Date: June, 1998 
16. [Most recently updated: August 23, 2021]

输出看起来与我们上一节中的相同。这次唯一的区别是您不再面临内存不足的危险。

我之前提到过 fgets() 将允许您一次读取文件的一行,并且它只需要一个指向您要读取的文件的文件指针的参数。在这种情况下,内存消耗取决于行的长度,并且内存不足的可能性很小。

但是,假设您正在阅读一个包含异常长行的文本文件。然后,您可以将可选的第二个参数传递给 fgets() 函数,该函数指定要读取的字符数。然后,它将在停止之前从文件中读取 length - 1 字节。如果遇到新行或文件末尾,它将提前停止。这使您可以更好地控制代码的内存消耗。

最终想法

我在本教程中讨论了两种使用 PHP 逐行读取文件的方法。还有几种方法可以做到这一点,但这两种方法几乎可以满足您的所有需求。当内存消耗不是问题时,请使用 file() 函数,如果您想节省内存,请使用 fgets() 和生成器函数。

以上がPHPを使用してファイルを1行ずつ読み取りますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。