ファイルの読み取り PHP でファイルを読み取る正しい方法
方法が何通りあるか数えてみましょう
PHP のような最新のプログラミング言語を使用する楽しみの 1 つは、利用可能なオプションが膨大にあることです。特にファイル処理に関しては、PHP は Perl のモットーである「方法は複数ある」を簡単に勝ち取ります。しかし、非常に多くのオプションが利用可能であるため、その作業に最適なツールはどれでしょうか?もちろん、実際の答えはファイル解析の目的によって異なるため、時間をかけてすべてのオプションを検討する価値があります。
上に戻る
従来の fopen メソッド
fopen メソッドは、元 C および C++ プログラマにとっておそらく最もよく知られているものです。これらの言語を使用したことがある場合、それらは多かれ少なかれ何年も自由に使えるツールだからです。これらの方法のいずれでも、リスト 1 に示すように、ファイルは fopen (データの読み取りに使用される関数) を使用する標準的な方法で開かれ、その後 fclose を使用して閉じられます。リスト 1. fgets でファイルを開いて読み取る
$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle); ;
}
fclose($file_handle);
長年のプログラミング経験を持つほとんどのプログラマーはこれらの関数に精通していると思いますが、詳しく説明します。次の手順を効果的に実行します:
ファイルを開きます。 $file_handle には、ファイル自体への参照が保存されます。
ファイルの最後に到達したかどうかを確認してください。
ファイルの終わりに達するまでファイルの読み取りを続け、読み取られた各行を出力します。
ファイルを閉じます。
これらの手順を念頭に置いて、ここで使用されるすべてのファイル関数を確認していきます。
fopen
fopen 関数はファイルへの接続を作成します。 「接続を作成する」と言ったのは、fopen はファイルを開くだけでなく、次の URL も開くことができるためです。 $fh = fopen("http://127.0.0.1/", "r");
このコード行は、上記のページに接続すると、ローカル ファイルであるかのように読み取りを開始できます。
注: fopen で使用される「r」は、ファイルを読み取り専用で開くように指示します。ファイルへのデータの書き込みはこの記事の範囲外であるため、その他のオプションはすべてリストしません。ただし、クロスプラットフォーム互換性のためにバイナリ ファイルから読み取る場合は、「r」を「rb」に変更する必要があります。この例については後で説明します。
feof
feof コマンドは、ファイルの終わりに到達したかどうかを検出し、True または False を返します。リスト 1 のループは、ファイル「myfile」の終わりに到達するまで続きます。注: URL の読み取り中に、読み取るデータがなくなってソケットがタイムアウトした場合にも、feof は False を返します。
fclose
リスト 1 の最後までスキップすると、fclose は fopen の逆を行い、ファイルまたは URL への接続を閉じます。この関数を実行すると、ファイルまたはソケットから情報を読み取ることができなくなります。
fgets
リスト 1 の数行戻ると、ファイル処理の核心、つまり実際にファイルを読み取ることができます。 fgets 関数は、最初の例で使用する武器です。ファイルからデータ行を抽出し、文字列として返します。その後、データを印刷したり、その他の方法で操作したりできます。リスト 1 の例では、ファイル全体が正常に出力されます。
処理されるデータチャンクのサイズを制限する場合は、fgets にパラメータを追加して行の最大長を制限できます。たとえば、行の長さを 80 文字に制限するには、次のコードを使用します。 $string = fgets($file_handle, 81);
ファイル サイズが 8 KB 以下であると仮定すると、次のコードはファイル全体を文字列に読み取ることができるはずです。 $fh = fopen("myfile", "rb");
$data = fread($fh, filesize("myfile"));
ファイルの長さが次の場合にのみ使用できます。この値をループして残りを読み取ります。
fscanf
文字列処理に戻ると、fscanf も従来の C ファイル ライブラリ関数に従います。慣れていない方のために説明すると、fscanf はフィールド データをファイルから変数に読み取ります。 list ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");
この関数で使用されるフォーマット文字列は多くの場所 (PHP.net など) で説明されているので、ここでは詳細には触れません。文字列の書式設定は非常に柔軟であると言えば十分でしょう。すべてのフィールドが関数の戻り値に配置されることに注意してください。 (C では、これらはすべて引数として渡されます。)
fgetss
fgetss 関数は従来のファイル関数とは異なり、PHP の能力をより深く理解できます。この関数は fgets 関数と同様に機能しますが、見つかった HTML タグまたは PHP タグがすべて削除され、プレーン テキストのみが残ります。以下に示す HTML ファイルを表示します。
リスト 2. サンプル HTML ファイル
「あなたに痛みを与えてくれる人は誰もいません」
つまり、America
それを fgetss 関数でフィルタリングします。リスト 3. fgetss の使用
$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
echo = fgetss($file_handle)
}
fclose($file_handle);
出力は次のとおりです: 私のタイトル
「痛みを与えてくれる人は誰もいないから」
の意味が理解できたら、あなたはアメリカというバンドを聴きすぎています
fpassthru 機能
どのように読んでもfpassthru を使用して、残りのデータを標準出力チャネルにダンプできます。 fpassthru($fh);
また、この関数はデータを出力するため、データを取得するために変数を使用する必要はありません。
非線形ファイル処理: スキップアクセス
もちろん、上記の機能ではファイルのシーケンシャル読み取りのみが可能です。より複雑なファイルの場合は、ファイルの別の部分に行ったり来たりする必要がある場合があります。ここで fseek が役に立ちます。 fseek($fh, 0);
上記の例は、ファイルの先頭に戻ります。正確に返す必要がない場合は、キロバイトを返すように指定できます: fseek($fh, 1024);
PHP V4.0 以降では、他のオプションがいくつかあります。たとえば、現在位置から 100 バイト前にジャンプする必要がある場合は、 fseek($fh, 100, SEEK_CUR) を使用してみてください。 同様に、次のコードを使用して 100 バイト前にジャンプできます。 fseek( $fh , -100, SEEK_CUR);
ファイルの終わりの 100 バイト前に戻る必要がある場合は、SEEK_END を使用する必要があります。 fseek($fh, -100, SEEK_END);
新しい場所に到達したら、fgets、fscanf、またはその他のメソッドを使用してデータを読み取ることができます。
注: fseek は、URL を参照するファイル処理には使用できません。
トップに戻る
ファイル全体を抽出する
ここで、PHP のよりユニークなファイル処理機能のいくつかについて触れます。それは、大きなデータの塊を 1 行または 2 行で処理することです。たとえば、ファイルを抽出してその内容全体を Web ページに表示するにはどうすればよいでしょうか?さて、ループを使用した fget の例を見ました。しかし、どうすればこのプロセスを簡単にできるでしょうか?このプロセスは、ファイル全体を文字列に入れる fgetcontents を使用すると非常に簡単です。 $my_file = file_get_contents("myfilename");
echo $my_file;
これはベスト プラクティスではありませんが、このコマンドは次のように簡潔に記述できます。この記事では主にローカル ファイルの処理方法を紹介します。ただし、これらの関数を使用して他の Web ページを抽出、エコー、解析することもできることに注目してください。 echo file_get_contents("http://127.0.0.1/");
このコマンドは次と同等です: $fh = fopen("http://127.0.0.1/", "r");
このコマンドを見て、「それでも大変すぎる」と思うはずです。PHP 開発者もあなたに同意します。したがって、上記のコマンドは次のように短縮できます: readfile("http://127.0.0.1/");
readfile 関数は、ファイルまたは Web ページの内容全体をデフォルトの出力バッファーにダンプします。デフォルトでは、このコマンドは失敗するとエラー メッセージを出力します。この動作を回避するには (必要に応じて)、 @readfile("http://127.0.0.1/") を試してください。 もちろん、本当にファイルを解析する必要がある場合は、file_get_contents によって返される単一の文字列は少し不快かもしれません。 。最初の直感は、split() 関数を使用して分割することかもしれません。 $array = Split("n", file_get_contents("myfile"));
しかし、それをやってくれる素晴らしい関数がすでにあるのに、なぜこんな苦労をするのでしょうか? PHP の file() 関数はこれを 1 ステップで実行し、行に分割された文字列の配列を返します。 $array = file("myfile");
上記の 2 つの例には若干の違いがあることに注意してください。 Split コマンドでは新しい行が削除されますが、file コマンド (fgets コマンドと同様) を使用すると、配列内の文字列に新しい行が追加されたままになります。
しかし、PHP のパワーはそれをはるかに超えています。 parse_ini_file を使用すると、1 つのコマンドで PHP スタイルの .ini ファイル全体を解析できます。 parse_ini_file コマンドは、リスト 4 に示すようなファイルを受け入れます。
リスト 4. サンプル .ini ファイル
; コメント
[個人情報]
名前 = "アーサー王"
クエスト = 聖杯を求める
好きな色 = 青
[その他の情報]
サミュエル クレメンス = マーク トウェイン
キャリン ジョンソン= Whoopi Goldberg
次のコマンドは、このファイルを配列にダンプし、その配列を出力します: $file_array = parse_ini_file("holy_grail.ini");
以下の出力が結果です。
配列
(
[名前] => アーサー王
[クエスト] => 聖杯を探す
[好きな色] => 青
[サミュエル・クレメンス] => マーク・トウェイン
[キャリン・ジョンソン] = > Whoopi Goldberg
)
もちろん、このコマンドがパーツを結合していることに気づくかもしれません。これはデフォルトの動作ですが、ブール変数である 2 番目の引数を parse_ini_file: process_sections に渡すことで簡単に修正できます。 process_sections を True に設定します。 $file_array = parse_ini_file("holy_grail.ini", true);
print_r $file_array;
リスト 6. 出力
Array
(
[個人情報] => Array
(
[名前 ] => アーサー王
[クエスト] => 聖杯を探す
[好きな色] => 配列
(
[サミュエル・クレメンス] => Twain
[Caryn Johnson] => Whoopi Goldberg
)
)
PHP は、簡単に解析できる多次元配列にデータを入れます。
これは、PHP ファイル処理に関しては氷山の一角にすぎません。 tiny_parse_file や xml_parse などのより複雑な関数は、それぞれ HTML ドキュメントと XML ドキュメントの処理に役立ちます。これらの特別な関数の使用方法の詳細については、「リソース」を参照してください。これらの種類のファイルを扱う場合、これらのリファレンスは一見の価値がありますが、この記事で説明した、遭遇する可能性のあるすべてのファイルの種類について深く考える必要はなく、これまでに説明した一般的なルールの関数を操作するのに適したリファレンスをいくつか紹介します。
トップに戻る
ベスト プラクティス
プログラム内のすべてが計画どおりに実行されるとは決して考えないでください。たとえば、探しているファイルが移動されてしまったらどうなるでしょうか?権限が変更され、その内容を読み取ることができなくなった場合はどうすればよいでしょうか? file_exists と is_readable を使用して、これらの問題を事前に確認できます。
リスト 7. file_exists と is_readable の使用
$filename = "myfile";
if (file_exists($filename) && is_readable ($filename)) {
$fh = fopen($filename, "r"); fclose($fh);
}
ただし、実際には、そのようなコードを使用するのは非常に面倒になる可能性があります。 fopen の戻り値の処理がより簡単かつ正確になります。 if ($fh = fopen($filename, "r")) {
# 処理
fclose($fh);
}
fopen は失敗時に False を返すため、これにより、ファイルが次の場合にのみファイル処理が実行されます。無事に開きました。もちろん、ファイルが存在しないか読み取り不可能な場合は、負の戻り値が予想されます。これにより、発生する可能性のあるすべての問題を検査で確認できるようになります。さらに、開くのに失敗した場合は、プログラムを終了するか、プログラムにエラー メッセージを表示させることができます。
fopen 関数と同様に、file_get_contents、file、readfile 関数はすべて、開くのに失敗した場合、またはファイルの処理に失敗した場合に False を返します。 fgets、fgetss、fread、fscanf、および fclose 関数も、エラー時に False を返します。もちろん、fclose を除くこれらすべての関数の戻り値を処理したことがあるかもしれません。 fclose を使用する場合、ファイル処理が正常に閉じられなくても何も行われないため、通常は fclose の戻り値を確認する必要はありません。
トップに戻る
選択はあなた次第です
PHP には、ファイルを読み取って解析するための効率的な方法がたくさんあります。ほとんどの場合、fread のような典型的な関数が最良の選択かもしれません。あるいは、readfile がそのタスクに最適な場合には、readfile のシンプルさに惹かれるかもしれません。それは実際に何が行われているかによります。
大量のデータを扱う場合は、fscanf がその価値を発揮し、split コマンドや sprintf コマンドで file を使用するよりも効率的です。逆に、わずかな変更だけで大量のテキストをエコーしたい場合は、file、file_get_contents、または readfile を使用する方が適切な場合があります。これは、キャッシュまたは一時的なプロキシ サーバーの作成に PHP を使用する場合に当てはまります。
PHP は、ファイルを処理するためのツールを多数提供します。これらのツールの詳細を確認し、取り組んでいるプロジェクトにどれが最適であるかを確認してください。すでに多くのオプションがあるので、それらを活用して PHP でのファイルの操作を楽しんでください。
以上、PHPでファイルを読み込む正しい方法を、ファイルの読み込み内容も含めて紹介しましたので、PHPチュートリアルに興味のある友人の参考になれば幸いです。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C# で File.ReadAllText 関数を使用してテキスト ファイルの内容を読み取る方法 C# プログラミングでは、多くの場合、テキスト ファイルの内容を読み取る必要があります。 File.ReadAllText は、テキスト ファイルの内容全体をすばやく読み取るのに役立つ非常に便利な関数です。この記事では、File.ReadAllText 関数の使用方法と具体的なコード例を紹介します。まず、File クラスの関連メソッドを使用するために、System.IO 名前空間を導入する必要があります。

PHP を使用したファイル コンテンツの読み取り: データのインポートと解析を実装する手順 ファイル コンテンツのインポートと解析は、Web 開発における非常に一般的な操作の 1 つです。ファイルのインポートと解析は PHP を使用して簡単に実行できます。この記事では、このプロセスを実行する手順を説明し、コード例を示します。ステップ 1: インポートして解析するファイルを選択する PHP では、まずインポートして解析するファイルを選択する必要があります。ファイル選択フォームを使用するか、ファイル パスを手動で指定できます。ファイル選択フォームのサンプル コードは次のとおりです: <formmethod

タイトル: ioutil.ReadFile 関数を使用してファイルの内容を読み取り、バイト スライスを返す 記事の内容: Go 言語の標準ライブラリには、非常に一般的に使用される関数 ioutil.ReadFile() があり、指定されたファイルから読み取るために使用できます。ファイルのコンテンツを取得し、バイトスライスを返します。この関数は、ファイルを読み取り、さらに処理するためにファイルの内容を簡単に処理するための簡単で便利な方法を提供します。以下に、ioutil.R の使用方法を簡単なコード例で示します。

PHP では、ファイルからデータを読み取る必要があることがよくあります。この場合、file_get_contents 関数を使用できます。この関数は、ファイルからすべてを単純に読み取り、それを文字列として返すことができます。これは、構成ファイルの読み取り、ログ ファイルの読み取りなど、多くのシナリオで非常に役立ちます。この記事では、PHPのfile_get_contents関数を使用してファイルの内容を読み取る方法を説明します。ステップ 1: file を使用してファイルを開きます

ファイルはどこにでもあります。どのプログラミング言語を使用しても、ファイルの処理はすべてのプログラマーにとって不可欠です。ファイル処理は、ファイルの作成、データの書き込み、ファイルからのデータの読み取りに使用されるプロセスです。Python には、さまざまな種類のファイルを処理するためのパッケージが豊富にありますこれにより、ファイル処理作業を簡単かつ便利に行うことができます この記事の概要: コンテキスト マネージャーを使用してファイルを開く Python のファイル読み取りモード テキスト ファイルを読み取る CSV ファイルを読み取る JSON ファイルを取得する ファイルを開く アクセスする前にファイルの内容を確認するには、ファイルを開く必要があります。 Python には、さまざまなモードでファイルを開くのに役立つ組み込み関数が用意されています。 open() 関数は 2 つのベースを受け入れます

Python の基盤テクノロジーの分析: ファイルの読み取りと書き込みを実装する方法、具体的なコード例が必要です Python プログラミングでは、ファイル操作は最も一般的で重要な操作の 1 つです。ファイルの読み取りと書き込みには、Python の基礎となる I/O テクノロジが関係します。この記事では、Python を使用してファイルの読み取りおよび書き込み操作を実装する方法を検討し、具体的なコード例を示します。 1. ファイルの読み取り Python では、ファイルの内容を読み取るためのさまざまな方法が提供されていますが、最も一般的な方法には、open() 関数の使用や with ステートメントの使用などがあります。 open()関数を使用する

タイトル: ioutil.ReadFile 関数を使用してファイルの内容を読み取り、文字列を返す Go 言語では、ファイルの内容を読み取り、処理する方法は数多くあります。その 1 つは、ioutil パッケージの ReadFile 関数を使用することです。この記事では、ioutil.ReadFile 関数を使用してファイルを読み取り、その内容を文字列として返す方法を紹介します。 ioutil.ReadFile 関数は、Go 言語の標準ライブラリで提供されているファイルの内容を読み取るための便利なメソッドです。それは受け入れます

PHP プログラミングでは、ファイルの内容を読み取ることが基本的なタスクです。 PHP には、このタスクを実行するための多くの関数が用意されており、最も人気のある関数の 1 つは file_get_contents です。さらに処理するために、ファイル全体を文字列に読み取ります。この記事では、file_get_contents 関数を使用してファイルの内容を読み取る方法を学びます。構文 file_get_contents の構文は次のとおりです。
