ホームページ >バックエンド開発 >PHPチュートリアル >PHP で非常に大きなファイルを読み取るためのコード例、_PHP チュートリアル
昨年末に漏洩したさまざまなウェブサイトのアカウント情報のデータベースは非常に印象的で、私はいくつかのデータベースをダウンロードする機会を利用し、これらのアカウント情報を分析するためにデータアナリストから学ぶ準備をしました。このデータ情報は「整理」されていますが、データ量が膨大なので、自分で勉強するのに非常に役立ちます。
番号
大量のデータによって引き起こされる問題は、1 つのファイルが非常に大きく、このファイルを開くのが簡単ではないことです。メモ帳がすぐにフリーズすることは期待できません。 MSSQL クライアントでも、このような大きな SQL ファイルを開くことはできません。
メモリ不足が報告される理由は、MSSQL がデータを読み込む際に、読み込んだデータを一度にメモリに格納するため、データ量が多すぎてメモリが不足するとシステムのクラッシュに直結するためと言われています。 。
Navicat プレミアム ここでは、Navicat プレミアムというソフトウェアを推奨します。これは非常に強力で、数百メガバイトの SQL ファイルをまったく遅延なく開くことができます。また、このクライアントソフトはMSSQL、MYSQL、Oracleなど様々なデータベースへの接続をサポートしています。その他の機能についても、ゆっくり自分で勉強していきたいと思います。
でも
Navicat を使用して 274MB の SQL ファイル CSDN を開くことはできますが、内容に意味がなく、これらのアカウント情報のクエリ、分類、統計などを行うには不便です。のみ
この方法では、データを 1 つずつ読み取り、各レコードの異なるフラグメントを分割し、これらのフラグメントをデータ フィールドの形式でデータベースに保存し、将来便利に使用できるようにします。
PHP を使用して非常に大きなファイルを読み取る PHP
ファイルの読み込み方法にはさまざまな方法があり、対象のファイルに応じて適切な方法を採用することで実行効率を向上させることができます。 CSDN データベース ファイルは非常に大きいため、短時間ですべてを読み取らないようにします。
結局のところ、データを読み取るたびに、データを分割して書き込む必要があります。次に、より適切な方法は、PHP の fseek と fread を組み合わせて使用して、ファイルを領域ごとに読み取ることです。
ファイル内のデータの特定の部分を自由に読み取るためのコード例は次のとおりです:
リーリー
関数で渡される変数$tagの値についても、Windowsでは「rn」、Linux/unixでは「n」、Mac OSでは「r」と、システムによって渡される値が異なります。
プログラム実行の一般的なプロセス: まず、ファイルを読み取るための基本的な変数をいくつか定義し、次にファイルを開き、ファイルの指定された位置にポインターを置き、指定されたサイズの内容を読み取ります。必要な読み取り行数に達するかファイルの終わりまで、内容を読み取るたびに内容を変数に保存します。
プログラム内のすべてが計画どおりに機能するとは決して考えないでください。
ルート
上記のコードによれば、ファイル内の指定した位置とサイズのデータは取得できますが、全体の処理は一度しか実行されないため、すべてのデータを取得することはできません。実際、すべてのデータを取得するには、このループを使用できます。
ファイルが終了するかどうかを判断するループを外側の層に追加しますが、これはシステム リソースの無駄であり、ファイルが大きすぎて最後まで読み込めないために PHP の実行タイムアウトが発生する可能性もあります。もう 1 つの方法は、最後にデータが読み取られた時間を記録して保存することです。
針の位置が決定され、再度ループが実行されると、ポインタは最後の終了位置に配置されるため、1 回のループでファイルを最初から最後まで読み取る必要はありません。
実は、リークの数日後に CNBETA での分析があったため、まだ CSDN データベースをインポートしていません。ははは、アクションが早すぎました。他の人がすでにこれを行っているのを見ると、自動的にそれを行う意欲があまりなくなりますが、学ぶためには、それを完了するのに時間がかかる必要があります。