PHP でファイルの作成、オープン、読み取り、書き込み、削除、存在の確認を行います。 PHP でファイルを操作する。 ファイルの読み取り、ファイルへの書き込み。 PHPのチュートリアル。 ファイルの削除、chmod の変更、ディレクトリの操作。 C ファイルからの Php データ

前のレッスンでは、PHP を使用してサーバーのファイル システムにアクセスする方法を学びました。 このチュートリアルでは、この情報を使用して単純なテキスト ファイルを読み取ります。

テキスト ファイルは、さまざまな種類のデータを保存するのに最適です。 データベースほど柔軟性はありませんが、通常はそれほど多くのメモリを必要としません。 さらに、テキスト ファイルはほとんどのシステムで読み取り可能な形式です。

テキストファイルを開く

テキスト ファイルを開くには、fopen 関数を使用します。 その構文は次のとおりです。

フォペン( ファイル名、モード)

ファイル名 開くファイルの名前。 モード モードは、「r」(読み取り)、「w」(書き込み)、または「a」(追加)です。 このチュートリアルでは、ファイルからのみ読み取るため、「r」を使用します。 次のレッスンでは、テキストの書き方と添付方法を学習します。

このチュートリアルの例では、unitednations.txt ファイルを使用します。 これは国連のプログラムと基金、およびその領域の簡単なリストです。 このファイルをダウンロードするか、独自のファイルを作成して例で使用することができます。

まず、unitednations.txt を開いてみましょう。

// テキストファイルを開く // テキストファイルを閉じる fclose($f); ?>

例 1: テキスト ファイルから 1 行を読み取る

ファイルには、プログラム名、カンマ、ドメインが体系的に記録されます。 ご想像のとおり、カンマ区切りファイルにはさらに多くの情報を記録できます。

各行から情報を取得するには、配列を使用します。 配列についてはレッスン 8 を参照してください。

テキストファイルからの読み取り $f = fopen("unitednations.txt", "r"); // ファイルの終わりまで 1 行ずつ読み取ります while (!feof($f)) ( // カンマ区切りの配列を作成します $arrM =explode(",",fgets($f)); // リンクを書き込みます (配列からデータを取得します) エコー "

  • " . $arrM。"
  • "; ) fclose($f); ?>

    とても便利ですね。 原則として、このファイルを数百のリンクで拡張したり、ディレクトリを拡張してアドレスも含めることができます。

    次のレッスンでは、テキスト ファイルに書き込む方法を見ていきます。

    PHP では、ファイルの作成に対処する必要があることがよくあります。それは非常に簡単です。ディスク上にファイルが存在せず、コードが実行されてファイルが表示されたら、このファイルを別の変数や、ページ上の任意のページに読み込むことができます。インターネットに接続して、そこに何かを書き込みます...しかし、そのためには特別な関数を知る必要があります...それについては、この記事で詳しく説明します...

    PHP で実行可能スクリプト内にファイルを作成するには、いくつかの関数を指定するだけです。

    例を見てみましょう:

    $text = "ファイルに書き込む何らかのテキスト";
    $fp = fopen("file.txt", "w");
    fwrite($fp, $text);
    fclose($fp);
    ?>

    ここで知っておくべきこと:

    fopen()- この関数は、読み取りまたは書き込みおよび説明のためにファイルを開きます。

    この明確化 (fopen 関数の mode パラメーター) は非常に重要です。

    • "r" - php でファイルを開きます 読書専用。 カーソルは先頭に置かれます。
    • "r+" - php でファイルを開きます 読み書き用。 カーソルは先頭に置かれます。 !!! - これら 2 つのモード r および r+ では、ファイルがすでに作成されている必要があります (そうしないとエラーが表示されます) 警告: fopen(file.txt) : ストリームを開けませんでした: そのようなファイルまたはディレクトリはありません ...)、読むだけか、追加する機会があります。
    • "w" - ファイルは書き込み目的でのみ開かれます。ファイルは長さ 0 に切り詰められます。つまり、上書きされます。必要なものが書き込まれ、カーソルが先頭に配置されます。
    • "w+" - 書き込みと読み取りのためにファイルを開きます! 残りは "w" モードと同じです。 !!! - これら 2 つのモードでは - ファイルが作成されていない場合、ファイルの作成が試行されます。
    • "ある" - 書き込み目的でのみファイルを開きます。 "w" とは異なり、このオプションはファイルの内容を上書きしませんが、カーソルを行の末尾に置き、追加したい内容を末尾に追加します。
    • "α+" - 書き込みと読み取りのためにファイルを開きます。

    fwrite($fp, $text) - PHP でファイルに書き込むための関数。つまり、$text 変数の内容が $fp 変数のファイルに書き込まれます。

    f閉じる($fp) - $fp 変数に書き込んだファイルを閉じる関数。

    これで、php でファイルを簡単に正しく作成し、読み取りや編集のために開くことができるようになりました。

    開いているファイルを操作するための便利な PHP の追加機能と関数:

    while(!feof($fp))(
    $mytext = fgets($fp, 99);
    $mytext をエコーし​​ます。」
    ";
    }

    ここでは条件が満たされています - 「ファイルの終わりに達するまでこれを行う」 while(!feof($fp))

    1.機能 fgets($fp, 99) - すべてのコンテンツを 99 バイトのセクションに分割できます。さらに、これをより明確に確認するためにタグを配置します。

    この文字列関数は fgets(リソース ハンドル [, int length]) は、デフォルトで長さパラメータとして 1024 バイト (1 キロバイト) を受け入れます。指定されていない場合は、そのようになります。 このパラメータは、PHP 4.2.0 ではオプションです (エラーの場合は FALSE を返します)。

    ファイルを開いたり、書き込んだり、作成したりするための追加機能

    関数 - int 読み取りファイル(string filename [, bool use_include_path [, resource context]]) - ファイル全体を読み取ります。

    ファイルを読み取り、その内容を出力バッファに書き込みます。 そして出力されたバイト数を返します。 エラーが発生した場合は、犬が使用されていない場合に返されます - @readfile。

    次のようなことが起こります。

    単語の最後にタグが付いています
    .

    b. 関数 - 配列 ファイル(string filename [, int use_include_path [, resource context]]) は、ファイルの内容を配列に追加する点を除いて、readfile 関数と同じことを行います。

    このようにして、インターネット上の任意のページを読むことができます。 $lines = file("http://site/"); そして foreach 関数を使用して配列を反復処理します。

    3a. 文字列関数 ファイル取得_コンテンツ(string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] - 内容を単一の文字列として取得できます。

    これはファイルを読み取るためのより汎用的な PHP 関数で、file 関数に似ています。内容のみが配列ではなく文字列として返され、条件 (どのバイトで開始するか) を設定できます。 オフセットそしてどこで終わるのか - マックスレン。 失敗すると FALSE が返されます。

    重要!!!- この場合、関数は fopen()、fread()、fclose() の 3 つを一度に置き換え、マークを削除します。

    3b. int関数 file_put_contents(string filename,mixed data [, int flags [, resource context]]) - 関数 fopen()、fwrite()、および fclose() への連続呼び出しと同じ - 書き込まれたバイト数を返します。

    一般に、PHP でのファイルの操作は、ファイルを開いて必要なアクションを実行し、ファイルを閉じることになります。 ファイルを開くときに、そのファイルをさらに処理するモードが決定されます。 これは、データの読み取り、書き込み、追加のために開くことができます。 読み取りと書き込みの両方を組み合わせたファイルを開くモードもあります。

    ファイルからの読み取りにはさまざまな方法があり、行ごとの読み取り、文字列の配列の取得など、さまざまな形式でデータを取得できます。

    ファイルの作成と書き込み

    ファイルを作成するには、ファイルを書き込みモードで開く必要があります。 ファイルを開くには、fopen 関数を使用します。 この関数の最初のパラメータは、ファイルへのパスを指定します。 2 番目のパラメータは、ファイルを開くモードを示します。 ファイルを作成するには、ファイル記録モード「w」を指定する必要があります。

    $f = fopen( "myfile.txt" 、 "w" );

    同じ名前のファイルがすでに存在する場合、記録モードでは、既存のファイルの代わりに新しい空のファイルを作成し、そのデータをすべて削除できます。

    ※パラメータもあります 「w+」、読み取りと書き込みのために同時に開くことができます。 このとき、同名のファイルがすでに存在していた場合は、その中のデータは消去されます。

    オープン操作を実行すると、この関数はファイル記述子の値、つまり特別なファイル変数を返します。この値は、後続の関数にどのファイルでアクションを実行するかを示します。

    書き込みモードで開かれたファイルに新しいデータを追加するには、関数 fwrite を使用します。 最初のパラメータはファイル記述子です。 次に、ファイルに書き込む必要がある行。 必要に応じて、3 番目のパラメータを使用して、書き込まれる文字数を制限できます。

    fwrite($f, 「ファイルに書き込む私のテキスト。」);

    すべての行を記録したら、閉じなければなりません。 これには fclose 関数が使用されます。 このパラメータの唯一のパラメータはファイル記述子です。

    fclose($f);

    その結果、ファイルを作成して保存するコードは次のようになります。

    $f = fopen( "myfile.txt" 、 "w" );
    fwrite($f, "最初の行です。\r\n");
    ...
    fwrite($f, 「最後の行です。\r\n」);
    fclose($f);

    * 記号 「\r\n」行末文字を示します。 追加しない場合、記録されたファイル内のすべての行が 1 行に結合されます。

    既存のファイルにデータを追加する

    作成済みのファイルに情報を追加するには、既存の情報を保持したまま書き込みモードでファイルを開く必要があります。 それらの。 ファイルも書き込み用に開かれますが、そのようなファイルに書き込む場合、それらはファイルの末尾に追加されます。

    $f = fopen( "myfile.txt" 、 "a" ); "//パラメータ "a" は追加モードで開くことを指定します"
    fwrite($f, "改行\r\n" );
    fclose($f);

    指定した名前のファイルが存在しない場合は、ファイルが作成され、すべてのデータがそのファイルに書き込まれます。

    ※モードもあります 「a+」、ファイルの最後まで読み書き用にファイルを開きます。

    ファイルからの読み取り

    ファイルから読み取る場合、fopen 関数には「r」パラメータが割り当てられます。これは、ファイルが読み取り専用で開かれることを意味します。 fgets 関数はファイルから読み取ります。 最初のパラメータはファイル記述子です。 2 番目のオプションのパラメータは、読み取られる文字列のサイズを決定します。 2 番目のパラメータが指定されていない場合は、現在の行が行末文字まで読み取られます。

    $f = fopen( "myfile.txt" 、 "r" ); // "r" パラメータは読み取りモードで開くことを指定します
    $s = fgets($f);
    $s をエコーし​​ます。
    fclose($f);

    * モード 「r+」ファイルを読み書き用に開きます。

    ファイルからすべての行を読み取るには、ファイルの終わりまで一度に 1 行ずつ読み取るループを使用できます。

    $f = fopen( "myfile.txt" 、 "r" );
    while (!feof($f))(
    $s = fgets($f);
    $s をエコーし​​ます。
    }
    fclose($f);

    feof 関数は、ファイルの終わりを判断し、読み取りサイクルを終了するためにループ条件で使用されます。

    ここで説明したファイルからデータを取得する方法に加えて、PHP にはさまざまな関数があります。 場合によっては、ファイルの内容全体をすぐに取得したり (readfile 関数)、すべての行を配列にロードして (file 関数) 操作したりする方が簡単な場合があります。 このような目的では、読み取りのためにファイルを開いて閉じる必要はありません。 これらのアクションはすべて、関数自体によって実行されます。

    読み取りファイル( "myfile.txt" );

    $mas = file("myfile.txt" );

    foreach ($mas として $m)
    エコー$m;

    fgetc 関数を使用すると、ファイルの内容を 1 文字ずつ読み取ることができます。

    $f = fopen( "myfile.txt" 、 "r" );
    while (!feof($f))(
    $s = fgetc($f);
    $s をエコーし​​ます。
    }
    fclose($f);

    ファイルの削除

    ファイルの削除は、unlink 関数を使用して行われます。 パラメータには、削除するファイルへのパスを指定します。

    リンクを解除( "myfile.txt" );

    ファイルが存在するかどうかを確認する

    場合によっては、ファイルに対してアクションを実行する前に、ファイルが存在するかどうかを確認する必要があります。 これには file_exists 関数が使用されます。 パラメータはファイルへのパスを指定します。

    if (file_exists("myfile.txt" ))
    エコー 「こんなファイルがあったんですね。」;
    それ以外
    エコー 「その名前のファイルはありません。」;

    fopen、fclose、feof、fgets、fgetss、fscanf 関数の使用について

    あらゆる可能性を列挙してみましょう

    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); echo $line; ) fclose($file_handle);

    これらの関数はほとんどの経験豊富なプログラマには馴染みのあるものですが、それらがどのように動作するかを分析してみましょう。 実際には、次の手順に従います。

    1. ファイルを開きます。 $file_handle には、ファイル自体へのリンクが保存されます。
    2. ファイルの最後に到達したかどうかを確認してください。
    3. 最後に到達するまでファイルを読み続け、読み取った各行を出力します。
    4. ファイルを閉じます。

    それを念頭に置いて、ここで使用される各ファイル関数を見ていきます。

    fopen関数

    fopen 関数は、ファイルへの接続を確立します。 「接続を確立する」と言ったのは、fopen はファイルを開くだけでなく、URL も開くことができるからです。

    $fh = fopen("http://127.0.0.1/", "r");

    プログラムのこの行は、上記のページへのリンクを作成し、ローカル ファイルとして読み取りを開始できるようにします。

    注記: fopen で使用される「r」オプションは、ファイルが読み取り専用で開かれていることを示します。 ファイルへの書き込みはこの記事で説明する問題の範囲に含まれていないため、パラメーターのすべての可能な値をリストすることはしません。 ただし、クロスプラットフォーム互換性のためにバイナリから読み取る場合は、「r」を「rb」に変更する必要があります。 以下はこのタイプの例です。

    feof関数

    feof コマンドは、読み取りがファイルの終わりに達したかどうかを判断し、True または False を返します。 に示すループは、ファイル「myfile」の終わりまで続きます。 URL の読み取り中に、読み取るデータがなくなって接続がタイムアウトした場合にも、feof は False を返すことに注意してください。

    関数 fclose

    リスト 1 の途中をスキップして、最後まで進みましょう。 fclose は fopen の逆の動作を行い、ファイルまたは URL への接続を閉じます。 この関数を実行すると、ファイルまたはソケットから読み取ることができなくなります。

    fget関数

    リスト 1 の数行戻ると、ファイル処理プロセスの核心、つまり実際にファイルを読み取る作業がわかります。 fgets 関数は、最初の例で使用する武器です。 ファイルからデータ行を取得し、それを文字列として返します。 そこから、データを表示したり、処理したりできます。 リスト 1 の例では、ファイル全体を印刷します。

    操作するデータ チャンクのサイズを制限する場合は、 fgets 引数を追加して、キャプチャされるデータ文字列の最大長を制限できます。 たとえば、行の長さを 80 文字に制限するには、次のコードを使用します。

    $string = fgets($file_handle, 81);

    C の行末標識「\0」を考えて、実際に必要な長さよりも 1 文字長い長さに設定してください。 ご覧のとおり、上の例では 81 文字が使用されていますが、必要な文字数は 80 文字です。 特定の関数に行の長さ制限を設定する必要がある場合は、必ず余分な文字を追加することを習慣にしてください。

    フレッド関数

    fgets 関数は、ファイルの読み取りに使用できる多くの関数のうちの 1 つにすぎません。 ほとんどの場合、ファイルを 1 行ずつ処理することが最も合理的であるため、これは最も一般的に使用される関数の 1 つです。 実際、他のいくつかの機能も同様の機能を提供します。 いずれにせよ、行ごとの分析が常に必要なわけではありません。

    そしてここで fread にアクセスします。 fread 関数の目的は fgets とは少し異なります。つまり、バイナリ ファイル (つまり、最初は人間が読めるテキストで構成されていないファイル) から読み取ることを目的としています。 「行」の概念はバイナリ ファイルには関係ないため (通常、論理データ構造は行に分割されません)、読み取るバイト数を指定する必要があります。

    $fh = fopen("myfile", "rb"); $data = fread($file_handle, 4096);

    上の例では、4096 バイト (4 KB) のデータを読み取ります。 指定した値に関係なく、fread は最大 8192 バイト (8 KB) を読み取ることに注意してください。

    ファイルが 8 KB 以下であると仮定すると、以下のプログラム スニペットは 1 行でファイル全体を読み取る必要があります。

    $fh = fopen("myfile", "rb"); $data = fread($fh, filesize("myfile")); fclose($fh);

    ファイル サイズが大きい場合は、ループを使用して残りを読み取る必要があります。

    fscanf関数

    文字列処理の話に戻りますが、fscanf は従来の C ファイル ライブラリ関数の後継でもあります。詳しくない方のために説明すると、fscanf はデータ フィールドをファイルから変数に読み取ります。

    list ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

    この関数で使用されるフォーマット文字列は、PHP.net などの多くのソースで説明されているため、ここでは繰り返しません。 文字列の書式設定は非常に柔軟であると言えば十分でしょう。 すべてのフィールドは関数によって返される変数に配置されることにも注意してください。 (C では、これらは引数として渡されます。)

    fgets関数

    fgetss 関数は従来のファイル操作関数とは異なり、PHP の機能をより深く理解できます。 fgets と同様に機能しますが、検出した HTML タグや PHP タグは破棄され、裸のテキストのみが残ります。 以下の HTML ファイルを見てみましょう。

    リスト 2. HTML ファイルの例
    私のタイトル

    「Cause there ain"t no one for to give you no pain」の意味が理解できたら、あなたはアメリカというバンドを聞きすぎています。

    これを fgetss 関数に渡してみましょう。

    リスト 3. fgetss の使用
    $file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

    これは出力として得られるものです:

    私のタイトル 「痛みを与えてくれる人は誰もいないから」の意味が理解できたら、あなたはアメリカというバンドを聴きすぎています

    fパススルー関数

    ファイルからデータを読み取る方法に関係なく、関数 fpassthru を使用すると、標準出力チャネルを使用して残りのデータを印刷できます。

    fパススルー($fh);

    この関数はデータを出力するため、データを変数に入れる必要はありません。

    非線形ファイル処理: ファイル内の移動

    もちろん、上記の関数ではファイルからの順次読み取りのみが可能です。 より複雑なファイルの場合は、ファイルの先頭または末尾でファイルの別の部分に移動する必要がある場合があります。 これを行うには、fseek 関数が必要です。

    fseek($fh, 0);

    上の例は、ファイルの先頭に戻ります。 ファイルの先頭に移動したくない場合、たとえば 1 キロバイトで十分な場合は、単に次のように記述します。

    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、または別の関数を使用してデータを読み取ることができます。

    注記: URL を参照するファイル記述子に対して fseek を使用することはできません。

    ファイル全体をキャプチャする

    次に、PHP の独自のファイル処理機能、つまり大きなデータ ブロックを 1 行または 2 行で処理する機能について見ていきます。 たとえば、ファイルを取得してその内容全体を Web ページに表示するにはどうすればよいでしょうか? fget でループを使用する例を見てきました。 しかし、どうすれば簡単にできるでしょうか? このプロセスは、ファイル全体を 1 行に配置する fgetcontents を使用すると、驚くほど簡単になります。

    $my_file = file_get_contents("myfilename"); $my_file をエコーし​​ます。

    これは最良のオプションではありませんが、このコマンドをさらに短く書くこともできます。

    echo file_get_contents("myfilename");

    この記事では主にローカル ファイルの処理に焦点を当てていますが、説明されている関数を使用して他の Web ページをキャプチャ、表示、解析することもできることに注意してください。

    echo file_get_contents("http://127.0.0.1/");

    このコマンドは実際には次と同じです。

    $fh = fopen("http://127.0.0.1/", "r"); fパススルー($fh);

    これらの例を見て、「大変な作業だ」と思われるかもしれません。 PHP 開発者もあなたに同意します。 したがって、上記のコマンドを次のように短縮できます。

    readfile("http://127.0.0.1/");

    readfile 関数は、ファイルまたは Web ページの内容全体をデフォルトの出力バッファに出力します。 デフォルトでは、このコマンドは失敗するとエラー メッセージを表示します。 この動作を回避するには (必要に応じて)、次のコマンドを試してください。

    @readfile("http://127.0.0.1/");

    もちろん、ファイルの内容を処理する必要がある場合、file_get_contents によって返される 1 行ではおそらく多すぎるでしょう。 最初に、split() 関数を使用して部分に分割するとよいでしょう。

    $array = split("\n", file_get_contents("myfile"));

    しかし、その仕事を行ってくれる完全に適切な関数があるのに、なぜこれほど複雑な作業が必要なのでしょうか? PHP file() 関数は、このタスクを 1 ステップで実行します。この関数は、ファイルの行を要素とする文字列配列を返します。

    $array = file("myfile");

    上記 2 つの例の間にはわずかな違いがあることに注意してください。 split コマンドは改行を削除しますが、file コマンドは配列行を改行で終了します (fgets と同様)。

    ただし、PHP の機能は上記の機能をはるかに超えています。 1 つの parse_ini_file コマンドだけで、.ini ファイル全体を PHP スタイルで解析できます。 parse_ini_file コマンドは、リスト 4 に示すようなファイルに適用されます。

    リスト 4. .ini ファイルの例
    ; コメント名=「キング・アーサー」 クエスト=聖杯を求めて 好きな色=ブルー サミュエル・クレメンス=マーク・トウェイン キャリン・ジョンソン=ウーピー・ゴールドバーグ

    次のコマンドは、ファイルを配列として表し、その配列を出力します。

    $file_array = parse_ini_file("holy_grail.ini"); print_r $file_array;

    結果は次の出力になります。

    リスト 5. 出力
    配列 ( => アーサー王 => 聖杯を求めて => ブルー => マーク・トウェイン => ウーピー・ゴールドバーグ)

    もちろん、このコマンドによりセクションがマージされたことに気づくかもしれません。 これはデフォルトのアクションですが、parse_ini_file の 2 番目の引数、ブール変数である process_sections を使用して簡単にカスタマイズできます。 process_sections を True に設定します。

    $file_array = parse_ini_file("holy_grail.ini", true); print_r $file_array;

    出力は次のようになります。

    リスト 6. 出力
    配列 ( => 配列 ( => アーサー王 => 聖杯を求めて => ブルー) => 配列 ( => マーク・トウェイン => ウーピー・ゴールドバーグ))

    PHP は、データを簡単に解析できる多次元配列に入れます。

    しかし、これは PHP でのファイル処理の氷山の一角にすぎません。 tiny_parse_file や xml_parse などのより複雑な関数は、それぞれ HTML ドキュメントと XML ドキュメントの解析に役立ちます。 これらの機能がどのように機能するかについての詳細は、このセクションを参照してください。 これらのファイル タイプを扱う場合は、これらの両方を考慮する価値がありますが、考えられるすべてのファイル タイプを検討する代わりに、この記事の内容を詳しく見てみるとよいでしょう。これまで説明してきた関数を操作します。

    優れたプログラミングスタイル

    プログラム内のすべてが意図したとおりに動作するとは決して考えないでください。 たとえば、探しているファイルが移動されていた場合はどうなるでしょうか? 権限の変更によりファイルの内容を読み取れなくなったらどうすればよいでしょうか? file_exists メソッドと is_readable メソッドを使用すると、ファイルの存在とその読み取り権限を事前に確認できます。

    リスト 7. file_exists と is_readable の使用
    $filename = "私のファイル"; 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 のシンプルさに惹かれるかもしれません。 選択は実際に何を達成しようとしているかによって異なります。

    大量のデータを処理する場合は、file をその後の split および sprintf コマンドと組み合わせて使用​​するよりも、fscanf の方が便利で効率的であることがわかります。 ただし、大量のテキストを小さな変更を加えて表示するだけの場合は、 file 関数、 file_get_contents 関数、または readfile 関数を使用する方が合理的です。 PHP をキャッシュに使用したり、一時的なプロキシ サーバーを作成したりする場合には、この解決策がおそらく正しいでしょう。

    PHP には、ファイルを操作するためのツールが多数用意されています。 それぞれのツールについて詳しく知り、取り組んでいるプロジェクトに最適なツールを見つけてください。 幅広いソフトウェア ツールが提供されており、それらを最も効果的に使用して、PHP を使用してファイルを楽しく処理してください。

    fgets(リソースハンドル[, int長])

    handle が指すファイル記述子から読み取った長さ 1 バイトの文字列を返します。 読み取りは、読み取られたバイト数が length - 1 に達したとき、行の終わりに達したとき (戻り値に含まれる)、またはファイルの終わりに達したとき (いずれか先に到達したとき) に終了します。 長さが指定されていない場合、デフォルトは 1 キロバイトまたは 1024 バイトになります。

    エラーが発生した場合、関数は戻ります 間違い .

    最もよくある間違い:

    「C」関数のセマンティクスに慣れているプログラマ fgets()、ファイルの終わり (EOF) フラグが返される方法の違いを考慮する必要があります。

    ファイル ポインタは有効であり、関数によって正常に開かれたファイルを指している必要があります。 fopen()または fsockopen() .

    以下に簡単な例を示します。


    例 1. ファイルを 1 行ずつ読み取る

    $handle = fopen("/tmp/inputfile.txt" , "r" );
    while (! feof ($handle )) (
    $buffer = fgets($handle, 4096);
    エコー $buffer ;
    }
    fclose($handle);
    ?>

    コメント: PHP バージョン 4.2.0 以降、長さパラメータはオプションになりました。 このパラメータを省略した場合、文字列の長さは 1024 であると想定されます。PHP 4.3 以降では、長さパラメータを省略すると、ストリームは文字列の終わりまで読み取られます。 ファイル内のほとんどの行が 8 キロバイトを超える場合、スクリプトで使用されるリソースに関する最も効率的な決定は、最大行長を指定することです。

    コメント:この関数は、PHP 4.3 以降のバイナリ データを正しく処理できるようになりました。 以前のバージョンにはこの機能はありませんでした。