コンピューター ウィンドウズ インターネット

PHPはファイルから1行を読み取ります。 PHPでのファイルの操作:開く、書き込む、読み取る。 ファイル:オペレーティングモード

PHP

file_exists( "test.txt")//ファイルは存在しますか? filesize( "test.txt"); //ファイルサイズを確認する//タイムスタンプを返す:fileatime( "test.txt"); //ファイルへの最後のアクセス日//日付( "d MY"、 $ atime); filemtime( "test.txt"); //ファイル変更の日付//日付( "d M Y"、$ mtime); filectime( "test.txt"); //ファイルが作成された日付(Windows)// date( "d M Y"、$ ctime);

ファイル:オペレーティングモード

PHP

resource fopen(string filename、string mode)// resource-成功した場合はファイルポインタを返し、エラーの場合はFALSEを返します
労働時間 説明
NS 読み取り専用のファイルを開きます。
r + 読み取りと書き込みのためにファイルを開きます。
w 書き込み専用のファイルを開きます。 存在する場合は、ファイルの現在の内容が破棄されます。 現在の位置は先頭に設定されます。
w + 読み取りと書き込みのためにファイルを開きます。 存在する場合は、ファイルの現在の内容が破棄されます。 現在の位置は先頭に設定されます。
NS 書き込み用にファイルを開きます。 現在の位置はファイルの終わりに設定されます。
+ 読み取りと書き込みのためにファイルを開きます。 現在の位置はファイルの終わりに設定されます。
NS バイナリファイルを処理します。 このフラグは、Windowsでバイナリを操作するときに必要です。

PHPでファイルを開いたり閉じたりする

PHP

$ fi = fopen( "test.html"、 "w +")またはdie( "エラー"); //例$ fi = fopen( "http://www.you/test.html"、 "r"); $ fi = fopen( "http://ftp.you/test.html"、 "r"); // fclose($ fi)を閉じます

PHPでファイルを読む

PHP

//ファイルを読み取りますfread(int fi、int length)$ str = fread($ fi、5); //最初の5文字を​​読み取りますecho $ str; //カーソルが移動したので$ str = fread($ fi、12); //次の12文字を読み取りますecho $ str; fgets(int fi [、int length])//ファイルから行を読み取るfgetss(int fi、int length [、string許容])//ファイルから行を読み取り、HTMLタグを破棄する//文字列許容-タグ残しておく必要がありますfgetc(int fi)//ファイルから文字を読み取ります

最初に、既存のデータがある場合はそれを上書きすることにより、ファイルの先頭に書き込みが行われます。 したがって、ファイルの最後に何かを書き込む必要がある場合は、対応するを設定する必要があります 読書モードたとえば、+。

PHPファイルでのカーソル操作

PHP

int fseek(int fi、int offset [、int whence])//カーソルの設定// intfi-ファイルへのポインタ// offset-移動する文字数。 // whence:// SEEK_SET-移動はファイルの先頭から始まります。 // SEEK_CUR-移動は現在の位置から始まります。 // SEEK_END-移動はファイルの終わりから始まります。 fseek($ fi、-10、SEEK_END); //最後の10文字を読み取ります$ s = fread($ fi、10); $ pos = ftell($ fi); //現在の位置を確認します巻き戻し($ f)//カーソルをリセットしますbool feof($ f)//ファイルの終わり

PHPで直接ファイル(データ)を操作する

PHP

array file(string filename)//ファイルの内容を配列として取得します//データを直接操作するための別のオプションfile_get_contents(string filename)//読み取り(ファイル全体を1行で取得します)//ファイルへの書き込み(最初は上書きされます)file_put_contents(文字列ファイル名、混合データ[、intフラグ]); // FILE_APPEND //ファイルの最後に書き込む:file_put_contents( "test.txt"、 "data"、FILE_APPEND); //配列を作成する場合、$ array = array( "I"、 "live"); file_put_contents( "test.txt"、$配列); //次に「Ilive」を取得します

PHPファイル管理

PHP

コピー(文字列ソース、文字列宛先); //ファイルの名前をコピーします(str oldname、str newname); //ファイルの名前をunlink(string filename);に変更します。 // ファイルを削除する

PHPサーバーへのファイルのアップロード

// PHP.ini設定file_uploads(on | off)//有効にします。ファイルのアップロードを無効にしますupload_tmp_dir //アップロードされたファイルの一時フォルダー。 デフォルトの一時フォルダupload_max_filesize(デフォルト= 2 Mb)//最大。 アップロードされたファイルのサイズpost_max_size //送信されたフォームの合計サイズ(upload_max_filesizeより大きくなければなりません)//単純なアップロード

HTML

サーバー上のファイルを処理します

PHP

//データを受信します$ tmp = $ _FILES ["userfile"] ["tmp_name"]; $ name = $ _FILES ["userfile"] ["name"]; //ファイルを移動しますmove_uploaded_file($ tmp、name); move_uploaded_file($ tmp、 "upload/"。name); //ファイルをアップロードフォルダにリダイレクトします//現在のファイルを基準にします// $ _ FILES配列の内容$ _FILES ["userfile"] ["name"] //ファイル名(例:test.html $ _FILES [ "userfile"] ["tmp_name"] //一時ファイル名(パス)$ _FILES ["userfile"] ["size"] //ファイルサイズ$ _FILES ["userfile"] ["type"] //ファイルタイプ$ _FILES ["userfile"] ["error"] // 0-エラーなし、番号-はい

このトピックを検討するときは、一部のPHP関数がファイル記述子を使用してファイルにアクセスする一方で、他の関数はファイルパスを使用することに注意してください。

ファイルからの読み取り

fread()関数を使用して、ファイルから指定された量のデータを取得できます。

fread(ファイル、長さ)

オプション:

ファイル-ファイル記述子

長さ-バイト単位のデータのサイズ

関数が指定されたデータサイズを読み取る前にファイルの終わりに達すると、より小さい文字列が返されます。 この機能バイナリファイルの読み取りに役立ちます。

文字列の長さを指定するとき、およびポインタを移動するときは、ロシア語の文字のサイズが1バイトではなく、それ以上であることを考慮する必要があります。 詳細については、「文字列の操作」を参照してください。 また、UTF-8でエンコードされたファイルの先頭に数バイトがあることを忘れないでください。 BOMを使用しないUTF-8エンコーディングでは、これらのバイトが欠落しています。

myfile.txtファイルから最初の10バイトを読みましょう。 「r +」モードで開きましょう。 ポインタは先頭になります。

$ file = fopen( "myfile.txt"、 "r +"); $ take = fread($ file、10); エコー$テイク;

ファイルにロシア語の文字が含まれている場合、最後の文字が正しく表示されない可能性があります。 これは、文字のサイズが1バイトを超えており、一方の部分が読み取られ、もう一方の部分が読み取られていないためです。

fgets()関数は、ポインタから文字列の終わりまで、1つの文字列を返します。

fgets(ファイル、長さ)

オプション:

ファイル-ファイル記述子

length-文字列のサイズをバイト単位で指定できます。 さらに、行の終わりに達すると、行が指定された長さより短くても、次の行は関数の結果に含まれません。 オプションのパラメータ。

長さが指定されていない場合、古いバージョンのPHPでは、返される文字列の最大長が制限されていました。 新しいバージョンにはこの制限はありません。

関数をループで実行すると、ファイルを1行ずつ読み取ることができます。

myfile.txtファイルから1行を読みましょう。 ポインタはすでに移動されているため、行全体が読み取られるのではなく、ポインタから読み取られます。

$ take = fgets($ file); エコー "
"。$取る;

fgetss()関数も1つの文字列を返しますが、HTMLタグを削除します。 PHPスクリプトがコードに存在する場合、それも削除されます。

fgetss(ファイル、長さ、必要なタグ)

オプション:

ファイル-ファイル記述子

length-文字列のサイズ(バイト単位)。 オプションのパラメータ。

必須タグ-削除されないタグを指定できます。

ファイルから1文字を返すfgetc()関数があります。

file()関数は、ファイル全体を読み取り、データを配列に入れます。 各行は、配列の要素に配置されます。 この機能を使用するためにファイルを開く必要はありません。 ポインタの位置は無視されます。

ファイル(ファイルパス、フラグ、コンテキスト)

オプション:

ファイルパス-絶対または相対ファイルパス

flags-関数がどのように機能するかを決定するフラグ。 オプションのパラメータ。

コンテキスト-コンテキストリソースを指定できます

次のフラグを指定できます。

FILE_USE_INCLUDE_PATH-インクルードパスフォルダー内のファイルを検索できます。

FILE_IGNORE_NEW_LINES-行末文字を削除します。 このフラグが設定されていない場合、各行に行末文字が表示されます。

FILE_SKIP_EMPTY_LINES-配列に空の行を追加しません。

複数のフラグが指定されている場合、それらは「|」演算子で区切られます。

myfile.txtファイルをページに表示してみましょう。

$ ar = file( "myfile.txt"、FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); エコー "
"; print_r($ ar);

ファイルに書き込む

fwrite()関数は、データをファイルに書き込みます。

fwrite(ファイル、データ、長さ)

オプション:

ファイル-ファイル記述子

data-書き込まれているデータ

length-書き込まれるデータの最大サイズ(バイト単位)。 行全体を書き込むことはできませんが、指定されたバイト数のみを書き込むことができます。 オプションのパラメータ。

ポインタがファイルの先頭または途中にある場合、関数はファイル内の文字を新しい文字に置き換えます。 つまり、5文字が書き込まれると、ファイルから5文字が削除され、代わりに新しい文字が追加されます。

ロシア語の文字を書くときは、スクリプトのエンコーディングがファイルのエンコーディングと一致している必要があります。

「スクリプトからのテキスト」という行をファイルに書き込みましょう。 この例では、記述子はファイルの途中にあり、行はそこに書き込まれます。 ファイルの最後にデータを追加する必要がある場合は、「a」モードで開くことができます。 また、ファイルを上書きする必要がある場合は、「w」モードで開きます。 ポインタを移動するのではなく、データをその場所に書き込みます。

$ text = "スクリプトからのテキスト"; fwrite($ファイル、$テキスト);

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は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への接続を閉じます。 この関数を実行すると、ファイルまたはソケットから読み取ることができなくなります。

Fgets関数

リスト1の数行に戻ると、ファイル処理プロセスの中心にいます。ファイルを直接読み取ることです。 fgets関数は、最初の例で選択する「武器」です。 ファイルからデータの行を取得し、それを文字列として返します。 そこから、データを出力したり、その他の方法で処理したりできます。 リスト1の例では、ファイル全体が印刷されます。

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

$ string = fgets($ file_handle、81);

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

フレッド機能

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

そして、これは私たちが恐怖に目を向けるところです。 fread関数は、fgetsとは少し異なる目的で使用されます。つまり、バイナリ(つまり、元々人間が読めるテキストではないファイル)から読み取ることを目的としています。 「文字列」の概念はバイナリファイルには関係がないため(論理データ構造は通常行に分割されません)、読み取るバイト数を指定する必要があります。

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

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

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

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

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

Fscanf関数

行処理に戻ると、fscanfは従来のファイルベースのCライブラリ関数の後継でもあることに注意してください。慣れていない場合、fscanfはデータフィールドをファイルから変数に読み込みます。

リスト($ field1、$ field2、$ field3)= fscanf($ fh、 "%s%s%s");

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

Fgetss関数

fgetss関数は、従来のファイル関数とは異なり、PHPで何ができるかをよりよく理解できます。 fgetsのように機能しますが、検出したHTMLまたはPHPタグをすべて取り除き、「裸の」テキストのみを残します。 以下のHTMLファイルを見てみましょう。

リスト2.サンプルHTMLファイル
私のタイトル

「原因はそこにある」とは誰もあなたに苦痛を与えないという意味を理解しているなら、あなたはアメリカのバンドをあまりにも多く聴いています

fgetss関数で実行してみましょう。

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

出力として得られるものは次のとおりです。

私のタイトル「Causethereain」とは誰もあなたに苦痛を与えないという意味を理解しているなら、あなたはアメリカのバンドをあまりにも多く聴いています

Fpassthru関数

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

fpassthru($ 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ページに表示するにはどうすればよいでしょうか。 さて、あなたはfgetsでループを使用する例を見てきました。 しかし、どうすればそれを簡単にすることができますか? このプロセスは、ファイル全体を文字列に配置する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"); fpassthru($ 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を使用して、PHPスタイルの.iniファイル全体を解析できます。 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でのファイル処理に関しては、これは氷山の一角にすぎません。 tidy_parse_fileやxml_parseなどのより複雑な関数は、それぞれHTMLドキュメントとXMLドキュメントの解析に役立ちます。 これらの関数の動作の詳細については、セクションを参照してください。 これらのタイプのファイルを操作する場合は、どちらも検討する価値がありますが、考えられるすべてのファイルタイプを調べる代わりに、この記事の内容を注意深く読むことができます。ここには、私が説明した関数を操作するための一般的なルールがいくつかあります。これまでのところ。

良いプログラミングスタイル

プログラムのすべてが意図したとおりに機能すると思い込まないでください。 例:探しているファイルが移動された場合はどうなりますか? 権限の変更の結果、ファイルの内容を読み取ることができない場合はどうなりますか? file_existsメソッドとis_読み取り可能メソッドを使用して、ファイルの存在とその読み取り権限を事前に確認できます。

リスト7.file_existsとis_読み取り可能の使用
$ filename = "myfile"; if(file_exists($ filename)&& is_読み取り可能($ 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の単純さにもっと惹かれる可能性があります。 選択は本当にあなたが達成しようとしていることに依存します。

大量のデータを処理している場合、fscanfは、たとえば、後続のsplitおよびsprintfコマンドと組み合わせてファイルを使用するよりも便利で効率的である可能性があります。 または、小さな変更を加えた大きなテキストを表示するだけの場合は、file、file_get_contents、またはreadfile関数の方が適切な場合があります。 このソリューションは、キャッシュにPHPを使用する場合、または一時プロキシを作成する場合でも正しい可能性があります。

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

PHPでは、多くの場合、ファイルの作成に対処する必要があります...すべてが非常に単純で、ディスク上にファイルがなく、コードが実行され、ファイルが表示されます。次に、このファイルを別の変数または任意のページに読み込むことができます。インターネット上で何かを書いてください...しかし、これには特別な機能を知る必要があります...この記事でこれについてもっと詳しく...

実行可能スクリプトでphpファイルを作成するには、いくつかの関数を指定する必要があります。

すぐに例を考えてみましょう。

$ text = "ファイルに書き込むためのいくつかのテキスト";
$ fp = fopen( "file.txt"、 "w");
fwrite($ fp、$ text);
fclose($ fp);
?>

ここであなたは知っておくべきです:

fopen()-この関数は、読み取りまたは書き込みと改良のためにファイルを開きます。

これらの改良点(fopen関数のモードパラメーター)は非常に重要です。

  • "NS"-phpでファイルを開く 読書専用..。 カーソルが先頭に置かれます。
  • "r +"-phpでファイルを開く 読み取りと書き込み用..。 カーソルが先頭に置かれます。 !!! -これらの2つのモードrおよびr +では、ファイルはすでに作成されている必要があります(そうでない場合、エラーが発生します 警告:fopen(file.txt):ストリームを開くことができませんでした:そのようなファイルまたはディレクトリは...にありません)、そして私たちは読むか、追加する機会があるだけです。
  • "w"-ファイルは書き込み専用に開かれます。ファイルは長さがゼロに切り捨てられます-つまり、上書きされます。必要なものが書き込まれ、カーソルが先頭に配置されます。
  • "w +"-ファイルは書き込みと読み取りのために開かれます!残りは" w "モードと同じです。 !!! -これらの2つのモードで-ファイルが作成されていない場合-作成してみてください!
  • "NS"-書き込み専用でファイルを開きます。" w "とは異なり、このパラメータはファイルの内容を上書きしませんが、行の終わりにカーソルを置き、最後に追加したい内容を追加します。
  • "+"-書き込みと読み取りのためにファイルを開きます。

fwrite($ fp、$ text)-phpでファイルに書き込む関数-つまり、変数$ textにあるものは、変数$ fpにあるファイルに書き込まれます。

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

これで、phpでファイルを安全に正しく作成し、それらを開いて読み取りおよび編集することができます。

開いているファイルを操作するための便利なPHPアドオンと関数:

while(!feof($ fp))(
$ mytext = fgets($ fp、99);
エコー$ mytext。 "
";
}

ここで条件が満たされます-「ファイルの終わりに達するまで、それからそれをしなさい」 while(!feof($ fp))

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

この文字列関数 fgets(resource handle [、int length])は、デフォルトで1024バイト(1キロバイト)の長さを受け入れますが、指定されていない場合は受け入れます。 PHP 4.2.0以降、このパラメーターはオプションです(エラー時にFALSEを返します)

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

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

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

このようなことが判明します:

単語の終わりに、タグは
.

NS。 関数-配列 ファイル(string filename [、int use_include_path [、resource context]])は、readfile関数と同じことを行いますが、1つの例外を除いて、ファイルの内容を配列に追加します。

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

3a。 文字列関数 file_get_contents(string filename [、bool use_include_path [、resource context [、int offset [、int maxlen]]]])-コンテンツを1行で取得できます。

それはより用途が広い PHP関数ファイルを読み取るには、file関数と同様に、コンテンツのみが文字列に返され、配列は返されません。条件を指定できます-どのバイトで開始するか- オフセットそしてどちらで終わるか- maxlen..。 失敗するとFALSEを返します。

重要!!!-この場合、関数は3つを一度に置き換えます:fopen()、fread()、fclose()、したがってスタンプを取り除きます。

3b。 Int関数 file_put_contents(文字列ファイル名、混合データ[、intフラグ[、リソースコンテキスト]])-fopen()、fwrite()、およびfclose()関数の順次呼び出しと同じです-書き込まれたバイト数を返します。

すべてのプログラマーは、ファイルを正しく操作できる必要があります。 この記事は初心者のPHPプログラマーを対象としていますが、「レシピ集」は上級ユーザーにも役立ちます。

ファイルの操作は、次の3つの段階に分かれています。

  1. ファイルを開く。
  2. データ操作。
  3. ファイルを閉じます。

. ファイルを開く

PHP環境でファイルを開くには、関数を使用します fopen()..。 この関数に必要なパラメーターは、ファイル名とファイルモードです。

$ fp = fopen( "counter.txt"、 "r");

PHPのドキュメントによると、次のタイプのファイルモードが区別されます。

  1. r-ファイルを読み取り専用で開きます。
  2. r +-読み取りと書き込みのためにファイルを同時に開きます。
  3. w-新しい空のファイルを作成します。 呼び出し時にそのようなファイルがすでに存在する場合、それは破棄されます。
  4. w +-はr +に似ていますが、呼び出し時にそのようなファイルが存在する場合にのみ、その内容が削除されます。
  5. a-ポインタがファイルの最後のバイト(ファイルの終わり)にシフトされている間、既存のファイルを書き込みモードで開きます。
  6. a +-ポインタがファイルの最後のバイト(ファイルの終わり)にシフトされている間、読み取りおよび書き込みモードでファイルを開きます。 ファイルの内容は削除されません。

注:任意の行の最後に、bまたはtというオプションのパラメーターをもう1つ含めることができます。 bが指定されている場合、ファイルはバイナリ読み取り/書き込みモードで開かれます。 tの場合、ファイルに改行変換モードが設定されます。 それはテキストとして認識されます。

デモンストレーションについては、次のシナリオを検討してください。

//ファイルをさまざまなモードで開きます
$ fp = fopen( "counter.txt"、 "r"); //バイナリモード
$ fp = fopen( "counter.txt"、 "rt"); //テキストモード
$ fp = fopen( "http://www.yandex.ru"、 "r"); //読み取り用のHTTP接続を開きます
$ fp = fopen( "ftp://ユーザー: [メール保護]"、" w "); //ログインとパスワードでFTP接続を開く
?>

II..。 ファイルデータの操作

次の場合にデータをファイルに書き込む PHPヘルプあなたは機能を使うことができます fwrite()..。 この関数は、2つの必須パラメーターと1つのオプションを取ります。 必要なパラメーターは、ファイル記述子とファイルモードです。

$ fp = fopen( "counter.txt"、 "a"); //ファイルを書き込みモードで開きます
$ mytext = "この行を書く必要があります\ r \ n"; //ソース文字列
$ test = fwrite($ fp、$ mytext); //ファイルに書き込む
if($ test)echo "データはファイルに正常に入力されました。";
else echo "ファイルへの書き込みエラー。";
fclose($ fp); //ファイルを閉じます
?>

ファイルを1行ずつ読み取るには、関数を使用します fgets()..。 この関数は、2つの必須パラメーターを取ります。


if($ fp)
{
while(!feof($ fp))
{
$ mytext = fgets($ fp、999);
エコー$ mytext。 "
";
}
}

fclose($ fp);
?>

注:B この例値999は、ポインターがファイルの終わり(EOF)に到達するまで読み取られる文字数を決定します。

ファイル全体を読み取るには、関数を使用する必要があります readfile()これは1つの必須パラメーターを取ります。 この関数は、ファイルを開き、その内容をブラウザーウィンドウに表示してから、ファイルを閉じます。

echoreadfile( "counter.txt");
?>

1つの必須パラメーターを受け取るfpassthru()関数を使用することもできます。 この機能を使用する前に、ファイルを読み取りモードで開く必要があります。 ファイルの読み取りが終了すると、関数は自動的にファイルを閉じます(そしてファイル記述子は無効になります)。

$ fp = fopen( "counter.txt"、 "r"); //ファイルを読み取りモードで開きます
if($ fp)echo fpassthru($ fp);
elseecho "ファイルを開くときにエラーが発生しました";
?>

多くの場合、サイトのコンテンツを配列に読み込む必要がある場合があります。 この機能は、機能を使用して提供されます ファイル ()..。 この関数が呼び出されると、ファイルの各行が指定された配列の個別の要素に保存されます。

注:この機能は使用しないでください ファイル ()バイナリファイル(バイナリセーフ)へ バイナリファイルの読み取りに関しては安全ではありません。同時に、どこかにファイルの終わり(EOF)文字がある場合、バイナリファイル全体を読み取ることを保証するものではありません。

$ file_array = file( "counter.txt"); //ファイルを$ file_arrayに読み込みます
//配列データを操作する
?>

注:アレイの操作について詳しく説明しています。作成者:Mukhametshin D.F.、Simdyanov I.V.

記事の最後に、Webプログラマーが日常的に遭遇する多くの問題の解決策を提供する配列の優れた「レシピブック」があります。

ファイルを1文字ずつ読み取る必要がある状況を想像してみましょう。 このために、関数を使用できます fgetc()..。 この関数は単一のパラメーターを取ります。 この関数は、任意の文字または同一の文字の数を検索する必要がある場合に役立ちます。

$ fp = fopen( "counter.txt"、 "r"); //ファイルを読み取りモードで開きます
if($ fp)
{
while(!feof($ fp))
{
$ char = fgetc($ fp);
if($ char == "c")$ i = $ i + 1; //文字 "c"を検索します
}
echo "ファイル内の文字数" c ":"。 $ i;
}
else echo "ファイルを開くときにエラーが発生しました";
?>

III..。 ファイルを閉じる

関数を使用してファイルを閉じる fclose()これは1つの必須パラメーターを取ります。

$ fp = fopen( "counter.txt"、 "r");
if($ fp)
{
echo "ファイルを開く";
fclose($ fp); //ファイルを閉じます
}
?>

レシピ集

1)このファイルまたはそのファイルが存在するかどうかを確認する必要があります。 これを行うには、関数を使用します ファイルが存在しています ().

myfile( "counter.txt"); // myfile関数を使用して、ファイル名を引数として渡します

function myfile($ name)//ファイルが存在するかどうかをチェックする関数を作成します
{
if(file_exists($ name))echo "ファイルが存在します";

}
?>

注:機能 ファイルが存在していますリモートWebサーバー上のファイルをチェックしません。 にとって 正しい仕事関数の場合、スクリプトファイルはチェック対象のファイルがあるサーバーに配置する必要があります。

2)関数を使用してファイルサイズを決定します ファイルサイズ()

myfile( "counter.txt");

function myfile($ name)//ファイルの存在を確認し、ファイルのサイズを決定する関数を作成します
{
if(file_exists($ name))echo "ファイルサイズ:"。filesize($ name)。 "byte";
else echo "ファイルが存在しません";
}
?>

3)関数を使用して一時ファイルを作成します tmpfile()

$ myfile = tmpfile();
fwrite($ myfile、 "この行は一時ファイルに書き込まれます。"); //一時ファイルに書き込みます
fseek($ myfile、0); //ファイルポインタを設定します
エコーフレッド($ myfile、1024); //ファイルの内容を表示します
?>

4)ファイルの行数を定義する必要があります。 このために、関数を使用します カウント()

$ fp = file( "counter.txt");
echo "ファイルの行数:"。count($ fp);
?>

5)ファイルロックメカニズムを使用する必要があります

$ fp = fopen( "counter.txt"、 "a");
群れ($ fp、LOCK_EX); //書き込み用にファイルをロックします
fwrite($ fp、 "書き込む文字列");
群れ($ fp、LOCK_UN); //ロックを解除します
fclose($ fp);
?>

6)ファイルから特定の行を削除する必要があります

$ num_stroka = 5; //ファイルから5行目を削除します
$ file = file( "counter.txt"); //ファイル全体を配列に読み込みます

for($ i = 0; $ i< sizeof($file); $i++)
if($ i == $ num_stroka)unset($ file [$ i]);

$ fp = fopen( "counter.txt"、 "w");
fputs($ fp、implode( ""、$ file));
fclose($ fp);
?>

7)ファイルタイプの決定。 関数を使用します