国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ バックエンド開発 PHPチュートリアル PHP での大きなファイルの読み取りおよび書き込みに関する問題

PHP での大きなファイルの読み取りおよび書き込みに関する問題

Jun 13, 2016 pm 12:11 PM
content file path

PHP での大きなファイルの読み書きに関する問題


通常の學習や開発では、大量のデータ入力の読み書きに觸れることがほとんどないため、そのような必要性が突然生じた場合でも、

は、 file_get_contents、fread、その他のファイルを読み取るメソッドなど、より高速なメソッドに従うことができますが、読み取られたファイルが

では、大きなファイルの読み書き時に が検索されるという問題が発生します。インターネットでいくつかの情報を見つけましたが、いくつかの例はうまくいきませんでした。私のニーズを満たしているので、オンラインですでに持っているものと組み合わせました。たとえば、別の結(jié)論のブログを書きましょう 。

それでは、具體的には何が起こるのでしょうか?これは、PHP の基礎(chǔ)となる実裝である number、file_get_contents について話しましょう。 fread

まず、PHP の ファイル読み取り関數(shù)、 file_get_contents について説明します。 fread、これら 2 つの関數(shù)は実際には同じ原理で、システムのメモリにコンテンツを読み取ります。ただし、ファイルの內(nèi)容を文字列として読み込むだけの場合は、file_get_contents() を使用してください。そのパフォーマンスは fread() よりもはるかに優(yōu)れています。

それほど大きくないファイルを読み取る場合はまだ問題ありませんが、大きなファイルを読み取る場合は (たとえば、2GB のログ)、マシンのメモリが 4G しかない場合、

ファイル全體を読み取って文字列に保存すると、システムの動作や他のプロセスの動作を維持するために に使用されるメモリの一部がまだ殘っているため、システムのメモリが爆発してフリーズする可能性があります。このような場合があるため、一度に大量のコンテンツを読み取らないようにするには他のメソッドが必要であり、この

メソッドを使用して大きなファイルの読み取りを?qū)g現(xiàn)します。 PHP ファイルの読み取り:

以下は、オンラインで大きなファイルを読み取る例です。上記のメモリが爆発する現(xiàn)象。 。

_______________________________ 無敵の分かれ目_______________________________________________


要件は次のとおりです。

約 500 萬行の約 1G のログ ファイルがあり、php を使用して最後の數(shù)行の內(nèi)容を返します。

実裝方法:

1. ファイル関數(shù)を直接使用して操作します
注: ファイル関數(shù)はすべてのコンテンツを一度にメモリに読み込むため、 PHP は、一部の不適切に作成されたプログラムがメモリを占有しすぎてシステム メモリが不足し、サーバーがクラッシュすることを防ぐために、デフォルトで最大メモリ使用量が 16M に制限されています。これは、php.ini 設(shè)定でのmemory_limit = 16M によって行われます。 、この値が -1 に設(shè)定されている場合、メモリ使用量は制限されません。

次は、file を使用してこのファイルの最後の行を抽出するコードです。

コード全體の実行には時間がかかります。 116.9613 (s ).






私のマシンには 2 G F5 を押して実行すると、システムはすぐに灰色になり、約 20 分後に回復(fù)します。このような大きなファイルをメモリに直接読み取ると、重大な結(jié)果が生じることがわかります。そのため、Memory_limit は最後の手段ではありません。調(diào)整が高すぎる場合は、コンピューター室に電話してマシンをリセットするように依頼するしかありません。





_____________________________________

php對大文件進行讀取操作【OK】 - PHP程序員 - 李國華【PHP程序員C++】博客

上記の例は最後の數(shù)行を読み込む例ですが、ファイルの內(nèi)容をトラバースするので読み込むのと同じですファイル全體、ただし >

コンテンツの最後の數(shù)行を読みたい場合は、fseek を直接使用してコンテンツの一部を位置決めして読み取ることもできます。


大きなファイルの読み取りと書き込みの方法について説明します。


大きなファイルの読み込み:

読み込み部分が必要なため、ファイルは特に大きくないので、file_get_contents または fread 獨自のセグメンテーション パラメーターを使用して、読み取り用のブロックに分割できます (IO のピーク サイズを減らすためにここにスリープ関數(shù)を追加する必要があるように感じますが、それが正しいかどうかはわかりません。ダニエルが指摘してくれたといいのですが) 、fgets を使用して while ループで 1 行ずつ読み取るという方法もあります。これは、fgetss がファイル ポインターを介して 1 行ずつ読み取るためです。比較的高いです。


以下に、fgets を通じて大きなファイルを読み取り、ファイルの內(nèi)容をエンコードする例を示します (UTF-8 -> GBK)。は次のとおりです:


            $file = fopen($old_file_path,"r");            $result = fopen($temporary_file_path,"a");            $re_sign = 0;             while(!feof($file))            {                $content = fgets($file);                $encode = mb_detect_encoding($content, array('ASCII','UTF-8','GB2312','GBK','BIG5'));                 if ($encode == 'UTF-8') {                    $str = iconv($encode,"GBK//IGNORE", $content);                    $encode = mb_detect_encoding($content, array('ASCII','UTF-8','GB2312','GBK','BIG5'));                     fwrite($result, $str);                     $re_sign = 1;                 } else {                                        fwrite($result, $content);                 }            }            fclose($file);            fclose($result);            if($re_sign == 1){                                rename($old_file_path, $old_file_path . '.bak' );                rename($temporary_file_path, $old_file_path);                            } else {                unlink($temporary_file_path);            }


大きなファイルの書き込み:


大きなファイルの書き込みは、大きなファイルの読み取りよりも発生する可能性が高くなります。一度に多くのファイルが書き込まれる場合、

が原因でハードディスクがスタックするだけなので、コストはそれほど高くありません。効率の観點 1 回限りの直接書き込みが最も時間がかかり効率的であるため、大きなファイルを書き込む場合は、一度読み取ってからファイルに直接書き込むことをお勧めします。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP BLOBをファイルに変換する方法 PHP BLOBをファイルに変換する方法 Mar 16, 2023 am 10:47 AM

PHP BLOB をファイルに変換する方法: 1. PHP サンプル ファイルを作成します; 2. 「function blobToFile(blob) {return new File([blob], 'screenshot.png', { type: 'image/jpeg' })」を通じて} 」メソッドを使用して、Blob をファイルに変換できます。

JavaのFile.length()関數(shù)を使用してファイルのサイズを取得します。 JavaのFile.length()関數(shù)を使用してファイルのサイズを取得します。 Jul 24, 2023 am 08:36 AM

ファイルのサイズを取得するには、Java の File.length() 関數(shù)を使用します。ファイル操作を扱うとき、ファイル サイズは非常に一般的な要件です。Java では、ファイルのサイズを取得するための非常に便利な方法、つまり length( ) File クラスのメソッド。この記事では、このメソッドを使用してファイルのサイズを取得する方法と、対応するコード例を紹介します。まず、サイズを取得したいファイルを表す File オブジェクトを作成する必要があります。 File オブジェクトを作成する方法は次のとおりです: Filef

紅夢ネイティブアプリケーションのランダムな詩 紅夢ネイティブアプリケーションのランダムな詩 Feb 19, 2024 pm 01:36 PM

オープン ソースの詳細については、次のサイトを參照してください。 51CTO Honmeng 開発者コミュニティ https://ost.51cto.com 実行環(huán)境 DAYU200:4.0.10.16SDK: 4.0.10.15IDE: 4.0.600 1. アプリケーションを作成するには、[ファイル] をクリックします。 >新しいファイル ->プロジェクトの作成。テンプレートを選択します: [OpenHarmony] EmptyAbility: プロジェクト名 shici、アプリケーション パッケージ名 com.nut.shici、およびアプリケーションの保存場所 XXX (中國語、特殊文字、スペースは含まれません) を入力します。 CompileSDK10、モデル: ステージ。デバイス

JavaのFile.renameTo()関數(shù)を使用してファイルの名前を変更する JavaのFile.renameTo()関數(shù)を使用してファイルの名前を変更する Jul 25, 2023 pm 03:45 PM

Java の File.renameTo() 関數(shù)を使用してファイルの名前を変更する Java プログラミングでは、ファイルの名前を変更する必要がよくあります。 Java には、ファイル操作を処理するための File クラスが用意されており、その renameTo() 関數(shù)でファイルの名前を簡単に変更できます。この記事では、Java の File.renameTo() 関數(shù)を使用してファイルの名前を変更する方法と、対応するコード例を紹介します。 File.renameTo() 関數(shù)は、File クラスのメソッドです。

Linux システムの PATH 環(huán)境変數(shù)を設(shè)定する手順 Linux システムの PATH 環(huán)境変數(shù)を設(shè)定する手順 Feb 18, 2024 pm 05:40 PM

Linux システムで PATH 環(huán)境変數(shù)を設(shè)定する方法 Linux システムでは、PATH 環(huán)境変數(shù)を使用して、システムがコマンド ラインで実行可能ファイルを検索するパスを指定します。 PATH 環(huán)境変數(shù)を正しく設(shè)定すると、任意の場所でシステム コマンドやカスタム コマンドを?qū)g行できるようになります。この記事では、Linux システムで PATH 環(huán)境変數(shù)を設(shè)定する方法と詳細なコード例を紹介します。現(xiàn)在の PATH 環(huán)境変數(shù)を表示する ターミナルで次のコマンドを?qū)g行して、現(xiàn)在の PATH 環(huán)境変數(shù)を表示します: echo$P

JavaのFile.getParent()関數(shù)を使用してファイルの親パスを取得します。 JavaのFile.getParent()関數(shù)を使用してファイルの親パスを取得します。 Jul 24, 2023 pm 01:40 PM

ファイルの親パスを取得するには、Java の File.getParent() 関數(shù)を使用します Java プログラミングでは、ファイルやフォルダーを操作する必要がよくあります。場合によっては、ファイルの親パス、つまりファイルが存在するフォルダーのパスを取得する必要があることがあります。 Java の File クラスには、ファイルまたはフォルダーの親パスを取得する getParent() メソッドが用意されています。 File クラスは、ファイルとフォルダーを Java で抽象表現(xiàn)したもので、ファイルとフォルダーを操作するための一連のメソッドを提供します。その中で、手に入れてください

JavaのFile.getParentFile()関數(shù)を使用してファイルの親ディレクトリを取得します。 JavaのFile.getParentFile()関數(shù)を使用してファイルの親ディレクトリを取得します。 Jul 27, 2023 am 11:45 AM

ファイルの親ディレクトリを取得するには、Java の File.getParentFile() 関數(shù)を使用します Java プログラミングでは、ファイルやフォルダーを操作する必要がよくあります。ファイルの親ディレクトリを取得する必要がある場合は、Java が提供する File.getParentFile() 関數(shù)を使用できます。この記事では、この関數(shù)の使用方法とコード例を説明します。 Java の File クラスは、ファイルやフォルダーを操作するために使用される主なクラスです。ファイルのプロパティを取得および操作するための多くのメソッドを提供します

パス環(huán)境変數(shù)を設(shè)定する方法 パス環(huán)境変數(shù)を設(shè)定する方法 Sep 04, 2023 am 11:53 AM

パス環(huán)境変數(shù)を設(shè)定する方法: 1. Windows システムでは、[システムのプロパティ] を開き、[プロパティ] オプションをクリックし、[システムの詳細設(shè)定] をクリックし、[システムのプロパティ] ウィンドウで [詳細] タブを選択します。 「環(huán)境変數(shù)」ボタンをクリックし、「パス」を見つけてクリックして編集し、保存します。 2. Linux システムの場合は、ターミナルを開き、bash 構(gòu)成ファイルを開き、ファイルの最後に「export PATH=$PATH: file path」を追加します。ファイルを保存して保存します; 3. MacOS システムの場合、操作は上記と同じです。

See all articles