


Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes),allocate2611816
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes),allocate2611816
今天要用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");
?>

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Apakah yang perlu saya lakukan jika terdapat ralat maut semasa membuka permainan di win10? Apakah yang perlu kita lakukan jika mesej ralat maut muncul semasa menjalankan perisian atau permainan? Biarkan tapak ini dengan teliti memperkenalkan kepada pengguna cara menangani ralat maut semasa membuka permainan dalam Win10. Apakah yang perlu saya lakukan jika terdapat ralat maut semasa membuka permainan di win10? Kaedah 1: Terdapat masalah dengan klien permainan, seperti kerosakan fail atau penggunaan beberapa patch retak, yang akan membawa kepada ralat ralat fatal Anda boleh memuat turun semula permainan. Kaedah 2: Memori komputer yang terlalu kecil juga boleh menyebabkan ralat ralat fatal Jika memori fizikal mencukupi, anda boleh cuba menetapkan memori maya sistem.

PHP ialah bahasa pembangunan web popular yang telah digunakan sejak sekian lama. Kelas PDO (Objek Data PHP) yang disepadukan dalam PHP adalah cara biasa untuk kita berinteraksi dengan pangkalan data semasa pembangunan aplikasi web. Walau bagaimanapun, masalah yang sering dihadapi oleh sesetengah pembangun PHP ialah apabila menggunakan kelas PDO untuk berinteraksi dengan pangkalan data, mereka menerima ralat seperti ini: PHPFatalerror:CalltoundefinedmethodPDO::prep

Sangat biasa untuk menggunakan axios dalam aplikasi Vue ialah klien HTTP berasaskan Promise yang boleh digunakan dalam penyemak imbas dan Node.js. Semasa proses pembangunan, mesej ralat "Uncaught(inpromise)Error: Requestfailedwithstatuscode500" kadangkala muncul untuk pembangun, mesej ralat ini mungkin sukar difahami dan diselesaikan. Artikel ini akan meneroka perkara ini

Gunakan fungsi File.length() Java untuk mendapatkan saiz fail Saiz fail adalah keperluan yang sangat biasa apabila berurusan dengan operasi fail Java menyediakan cara yang sangat mudah untuk mendapatkan saiz fail, iaitu, menggunakan panjang(. ) kaedah kelas Fail. Artikel ini akan memperkenalkan cara menggunakan kaedah ini untuk mendapatkan saiz fail dan memberikan contoh kod yang sepadan. Pertama, kita perlu mencipta objek Fail untuk mewakili fail yang kita ingin dapatkan saiznya. Berikut ialah cara membuat objek Fail: Filef

Apabila pemain bermain permainan dalam Final Fantasy 7, ramai pemain menghadapi masalah ralat yang membawa maut dan tidak tahu cara menyelesaikannya Ia biasanya mengenai masalah yang tidak dapat dibaca oleh pemain masalah. Cara menyelesaikan ralat maut Final Fantasy 7 1. Pasang semula permainan masalah klien Permainan, seperti kerosakan fail, ketidaklengkapan, dan penggunaan beberapa patch retak akan membawa kepada ralat yang membawa maut. 2. Alih keluar atribut baca sahaja bagi semua fail Sesetengah atribut fail tidak boleh dibaca sahaja tetapi ditetapkan kepada baca sahaja. Hanya alih keluar atribut baca sahaja bagi semua fail. kemudian klik kanan pada permainan Pasang folder dan batalkan atribut baca sahaja. 3. Menetapkan memori maya mungkin disebabkan oleh memori yang terlalu kecil Jika memori fizikal mencukupi

Selesaikan masalah "error:incompletetypeisnotallowed" dalam kod C++ Semasa proses pengaturcaraan C++, anda kadangkala menghadapi beberapa ralat kompilasi Salah satu ralat biasa ialah "error:incompletetypeisnotallowed". Ralat ini biasanya disebabkan oleh operasi pada jenis yang tidak lengkap. Artikel ini akan menerangkan punca ralat ini dan menyediakan beberapa penyelesaian. Pertama sekali, saya

Penyelesaian kepada "0271: ralat jam masa nyata" yang tidak boleh dihidupkan: 1. Tekan F1, dan dalam antara muka yang muncul, alihkan bar pilihan ke item ketiga "Tarikh/Masa" 2. Tukar masa sistem secara manual ke masa semasa; 3. Tekan F10 dan pilih ya dalam kotak dialog pop timbul 4. Buka semula buku nota untuk but seperti biasa.

Selesaikan masalah "error:expectedinitializerbefore'datatype'" dalam kod C++ Dalam pengaturcaraan C++, kadangkala kita menghadapi beberapa ralat kompilasi semasa menulis kod. Ralat ini biasanya berlaku dalam pengisytiharan berubah atau definisi fungsi dan boleh menyebabkan atur cara gagal untuk menyusun dengan betul atau
