ホームページ  >  記事  >  バックエンド開発  >  ファイル ハンドルの例: ハンドルを使用した大きなファイルの未確認読み取りおよびチャンク読み取りの開始位置の特定

ファイル ハンドルの例: ハンドルを使用した大きなファイルの未確認読み取りおよびチャンク読み取りの開始位置の特定

黄舟
黄舟オリジナル
2017-05-20 16:59:322219ブラウズ

ファイルハンドルの例: ハンドルを介した目に見えない読み取りの開始位置の特定と、大きなファイルのチャンク読み取り

ファイル読み取り関数を使用するには、PHP スクリプトからの相対パスを使用してそれらをポイントする必要があります。ただし、ほとんどの PHP ファイル関数は、ファイルにアクセスするために若干異なるメカニズムを使用します。このメカニズムは、「接続」に fopen() 関数を使用し、「」に fclose 関数を使用します。接続"。切断"。 fopen 関数の戻り値は、ファイル ハンドルとも呼ばれる PHP ファイル ポインターです。ファイル ハンドルを取得すると、それを使用して、削除、追加操作など、ファイルに対してさまざまな操作を実行できます。このハンドルは使用中に使用中です どのような問題に注意する必要がありますか?

まず、ファイルがどのように開かれ、閉じられるかを見てみましょう。コードは次のとおりです。

<?php
$f_fopen = fopen("../file.txt.","rb");    //打开文件
  ....                               //对文件进行操作
fclose($f_fopen);                    //操作完成后关闭文件
?>

fopen を使用してファイルを接続する場合、ファイル パスとファイル アクセス モードを指定する必要があります (例: r は読み取り専用を意味します)。モード)。 b モードは、ファイルがバイナリ モードで開かれることを意味します。これは、異なる操作間でのコードの移植性を確保するために使用できます。

1. ハンドルを介してファイル読み取りの開始位置を特定します

fopen() 関数を使用してファイルを開くと、ファイル ハンドルがすでに存在します。 次に、このハンドルを使用してファイルを読み取ります。コードは次のとおりです:

<?php
header("Content-Type:text/html; charset=utf-8");
$filename = "05.txt";                          //要读取的文件
$fp = fopen($filename,"rb");                   //打开文件
echo fread($fp,32);                            //使用fread()函数读取文件内容的前32个字节
echo "<p>";
echo fread($fp,filesize($filename));          //输出其余的文件内容
?>

結果は次のとおりです:

ファイル ハンドルの例: ハンドルを使用した大きなファイルの未確認読み取りおよびチャンク読み取りの開始位置の特定

この例は、ファイル ハンドルの使用方法を示します。 fread を使用する場合、2 番目のパラメータは 1 バイト単位であり、ファイルの内容が設定されたデータ量まで読み取られると、ハンドルはこの位置に配置されることに注意してください。このファイルの他の内容の読み取りを続けるには、filesize 関数を通じてファイルの合計サイズを読み取り、この値を fread の 2 番目のパラメーターとして使用できます。このとき、出力はファイルの残りの内容になります。 . これがハンドルの役割です。

2. 大きなファイルの読み取りのブロック

前の解決策は小さなファイルの読み取りには非常に効果的ですが、大きなファイルの内容を読み取る場合はサーバーのメモリが占​​有され、場合によってはパフォーマンスの問題が発生する可能性があります。この問題の可能性を減らすために、ファイルをブロックで読み取り、ブロックをオブジェクトとして操作する方法を使用できます。これにより、原則として、fopen 関数を通じてファイルを開き、while ステートメントを使用して読み取ります。ループ内 ファイルの内容を取得し、ファイル ポインターがファイルの末尾に達したときにループを停止します。それ以外の場合は、fgets 関数を使用してファイル内のデータを読み取り、ファイル ハンドル全体を前方に移動します。ブロック内のファイルは次のとおりです:

<?php
header("Content-Type:text/html; charset=utf-8");
$fopen = fopen("fun.php","rb");         
while(!feof($fopen)){             //使用 feof()函数测试指针是否到了文件结束的位置
    echo fgets($fopen);            // 输出当前行
}
fclose($fopen);
?>

ファイル ハンドルを使用してファイルを読み取る関数は他にもたくさんあります。そのうちの 1 つは fgetss 関数 (2 つの に注目) です。これは fgets とほぼ同じですが、strip_tags 関数のように、見つかったすべての HTML タグ ファイルを削除できる点が異なります。もう 1 つは fscanf 関数で、printf などのファイルからの出力をフォーマットします。 csv (カンマ区切り値) ファイルの処理を非常に簡単にする fgetcsv もあります。

ただし、ファイルの内容全体を変数に読み込む場合は、file 関数と file_get_content 関数の方が使いやすく、パフォーマンスも向上する可能性があります。

それでは、友達が簡単にマスターできるはずのファイルハンドルの使い方を紹介します。

以上がファイル ハンドルの例: ハンドルを使用した大きなファイルの未確認読み取りおよびチャンク読み取りの開始位置の特定の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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