ホームページ バックエンド開発 PHPチュートリアル Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)_php技巧

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)_php技巧

May 16, 2016 pm 08:32 PM
error fatal memory size

今天要用php代码来处理一个580M的日志文件,总共有219万多行记录,因为是.log的文件,在windows下面很难将文件按照条数来分割,于是在linux下用split -l 10000 filename 前缀名 将整个文件按10000行一个分割成了200多个小文件,之后用php来循环处理这200多个文件,可是执行到后来就出现了题目上面的错误:

复制代码 代码如下:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)

去百度了一下,原来是php.ini中的内存分配的问题,默认php代码能够申请到的最大内存字节数就是134217728 bytes,如果代码执行的时候再需要更多的内存,就会报错了,于是就将php.ini文件中的配置改了一下:

复制代码 代码如下:

memory_limit = 128M;//将128M改成了256M

但是之后一想,一个php脚本一次请求的内存空间就要超过128M,那不管你以后将memory_limit设置成多大,以后肯定有出问题的时候。

究其原因,是我在在编码时,仅仅对变量赋值,却从来没有 unset ($var) 过。导致了内存占用越来越多,所以以后一个变量不再使用之后,一定要记得unset掉它。

下面附上我今天处理这个日志文件的代码:

复制代码 代码如下:

set_time_limit(1800) ;
/**
 * 获取日志中发送失败的邮箱地址
 * @param $directory log日志的目录
 * @param $name    失败邮箱保存的文件名
 */
function getmail($directory,$name){
//遍历目录下的.log文件
    $files=scandir("$directory");
    foreach($files as $v){
        if(preg_match_all("|mail\.log\D+|",$v,$log)){
            $logs[]=$log[0][0];
        }
    }
//将所有.log文件中发送失败邮箱提取出来   
    foreach($logs as $v){
        $row=file("$v");
        echo "读取".$v."文件
";
        foreach($row as $key => $value)
        {
            if(eregi("host name lookup failure|Connection timed out with|Connection refused by|cannot find your reverse hostname", $value)){
                if(preg_match("|\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*|", $row[$key],$matches)){
                    $mail[] = trim($matches[0]);
                    echo "获取发送失败的邮箱地址".$matches[0]."
";
                }else{
                    echo "无法获取日志中发送失败的邮箱,请检查";
                }
            }
        }
        unset($row);
    }
//将提取出来的发送失败邮箱写入到mail.txt文件中   
    $mailurl=fopen("$name","a");
    foreach($mail as $line)
    {
        fwrite($mailurl,$line."\r\n");
    }
    echo "将所有发送失败的邮箱地址写入".$name."
";
    fclose($mailurl);
}

getmail(".","mail.txt");
?>

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

win10でゲームを開くときに致命的なエラーが発生した場合はどうすればよいですか? win10でゲームを開くときに致命的なエラーが発生した場合はどうすればよいですか? Feb 09, 2024 pm 12:54 PM

win10でゲームを開くときに致命的なエラーが発生した場合はどうすればよいですか?ソフトウェアまたはゲームの実行中に致命的なエラー メッセージが表示された場合はどうすればよいですか?このサイトでは、Win10でゲームを開くときに致命的なエラーが発生した場合の対処方法をユーザーに丁寧に紹介します。 win10でゲームを開くときに致命的なエラーが発生した場合はどうすればよいですか?方法 1: ファイルの破損やクラック パッチの使用など、ゲーム クライアントに問題があり、致命的なエラーが発生する場合は、ゲームを再ダウンロードできます。方法 2: コンピューターのメモリが小さすぎると、致命的なエラーが発生する可能性があります。物理メモリが十分な場合は、システムの仮想メモリを設定してみてください。

PHP 致命的エラーの解決策: 未定義メソッド PDO::prepare() の呼び出し PHP 致命的エラーの解決策: 未定義メソッド PDO::prepare() の呼び出し Jun 22, 2023 pm 06:40 PM

PHP は、長い間使用されている人気のある Web 開発言語です。 PHP に統合された PDO (PHP Data Object) クラスは、Web アプリケーションの開発中にデータベースと対話する一般的な方法です。ただし、一部の PHP 開発者がよく遭遇する問題は、PDO クラスを使用してデータベースと対話するときに、次のようなエラーが表示されることです。

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

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

Vue アプリケーションで axios を使用しているときに「Uncaught (in Promise) Error: Request failed with status code 500」が発生した場合はどうすればよいですか? Vue アプリケーションで axios を使用しているときに「Uncaught (in Promise) Error: Request failed with status code 500」が発生した場合はどうすればよいですか? Jun 24, 2023 pm 05:33 PM

Vue アプリケーションで axios を使用するのは非常に一般的です。axios は、ブラウザーと Node.js で使用できる Promise ベースの HTTP クライアントです。開発プロセス中に、「Uncaught(inpromise)Error: Requestfailedwithstatuscode500」というエラー メッセージが表示されることがありますが、開発者にとって、このエラー メッセージは理解および解決が難しい場合があります。この記事ではこれについて説明します

ファイナルファンタジー7の致命的なエラーを解決する方法 ファイナルファンタジー7の致命的なエラーを解決する方法 Mar 07, 2024 pm 04:40 PM

ファイナルファンタジー 7 をプレイしていると、多くのプレイヤーが致命的なエラーの問題に遭遇し、その解決方法がわかりません。通常、メモリが読み取れないという問題が発生します。この問題を解決するには、ゲームを再インストールすることをお勧めします。ファイナルファンタジー 7 の致命的エラーの解決方法 1. ゲームを再インストールします ファイルの破損、不完全さ、一部のクラック パッチの使用などのゲーム クライアントの問題は致命的なエラーにつながる可能性があるため、ゲームを再インストールすることをお勧めします。 2. すべてのファイルの読み取り専用プロパティを削除します。一部のファイル プロパティは読み取り専用であってはなりませんが、読み取り専用に設定されています。すべてのファイルの読み取り専用プロパティを削除するだけです。たとえば、ゲームがプレイできない場合は、ゲーム上で右クリックしてフォルダをインストールし、読み取り専用属性を解除してください。 3. 仮想メモリの設定は、メモリが少なすぎることが原因である可能性があります。物理メモリが十分な場合は、

C++ コードの「エラー: 不完全な型は許可されません」の問題を解決する C++ コードの「エラー: 不完全な型は許可されません」の問題を解決する Aug 26, 2023 pm 08:54 PM

C++ コードの「error:incompletetypeisnotallowed」問題を解決します。C++ プログラミング プロセス中に、コンパイル エラーが発生することがあります。一般的なエラーの 1 つは、「error:incompletetypeisnotallowed」です。このエラーは通常、不完全な型を操作することによって発生します。この記事では、このエラーの原因を説明し、いくつかの解決策を提供します。まず、私は

0271: リアルタイムクロックエラーによりコンピュータの電源が入らない場合はどうすればよいですか? 0271: リアルタイムクロックエラーによりコンピュータの電源が入らない場合はどうすればよいですか? Mar 13, 2023 am 11:30 AM

起動できない「0271: リアルタイム クロック エラー」の解決策: 1. F1 キーを押し、表示されるインターフェイスでオプション バーを 3 番目の項目「日付/時刻」に移動します; 2. システム時刻を手動で現在の時刻に変更します。 1 回; 3. F10 キーを押し、ポップアップ ダイアログ ボックスで [はい] を選択します; 4. ノートブックを再度開いて、通常どおり起動します。

C++ コードの「エラー: 'datatype' の前に初期化子が必要です」問題を解決する C++ コードの「エラー: 'datatype' の前に初期化子が必要です」問題を解決する Aug 25, 2023 pm 01:24 PM

C++ コードの「error:expectedinitializerbefore'datatype'」問題を解決します。C++ プログラミングでは、コードを作成するときにコンパイル エラーが発生することがあります。一般的なエラーの 1 つは、「error:expectedinitializerbefore'datatype'」です。このエラーは通常、変数宣言または関数定義で発生し、プログラムが正しくコンパイルされなかったり、

See all articles