《PHP實(shí)戰(zhàn):Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes》要點(diǎn):
本文介紹了PHP實(shí)戰(zhàn):Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
今天要用php代碼來(lái)處理一個(gè)580M的日志文件,總共有219萬(wàn)多行記錄,因?yàn)槭?log的文件,在windows下面很難將文件依照條數(shù)來(lái)分割,于是在linux下用split -l 10000 filename 前綴名 將整個(gè)文件按10000行一個(gè)分割成了200多個(gè)小文件,之后用php來(lái)循環(huán)處理這200多個(gè)文件,可是執(zhí)行到后來(lái)就出現(xiàn)了題目上面的錯(cuò)誤:PHP學(xué)習(xí)
代碼如下:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
去百度了一下,原來(lái)是php.ini中的內(nèi)存分配的問(wèn)題,默認(rèn)php代碼能夠申請(qǐng)到的最大內(nèi)存字節(jié)數(shù)就是134217728 bytes,如果代碼執(zhí)行的時(shí)候再需要更多的內(nèi)存,就會(huì)報(bào)錯(cuò)了,于是就將php.ini文件中的配置改了一下:PHP學(xué)習(xí)
代碼如下:
memory_limit = 128M;//將128M改成了256M
但是之后一想,一個(gè)php腳本一次哀求的內(nèi)存空間就要超過(guò)128M,那不管你以后將memory_limit設(shè)置成多大,以后肯定有出問(wèn)題的時(shí)候.PHP學(xué)習(xí)
究其原因,是我在在編碼時(shí),僅僅對(duì)變量賦值,卻從來(lái)沒(méi)有 unset ($var) 過(guò).導(dǎo)致了內(nèi)存占用越來(lái)越多,所以以后一個(gè)變量不再使用之后,一定要記得unset掉它.PHP學(xué)習(xí)
下面附上我今天處理這個(gè)日志文件的代碼:PHP學(xué)習(xí)
代碼如下:
<?php
set_time_limit(1800) ;
/**
?* 獲取日志中發(fā)送失敗的郵箱地址
?* @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文件中發(fā)送失敗郵箱提取出來(lái)???
??? foreach($logs as $v){
??????? $row=file("$v");
??????? echo "讀取".$v."文件<br />";
??????? 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 "獲取發(fā)送失敗的郵箱地址".$matches[0]."<br />";
??????????????? }else{
??????????????????? echo "無(wú)法獲取日志中發(fā)送失敗的郵箱,請(qǐng)檢查";
??????????????? }
??????????? }
??????? }
??????? unset($row);
??? }
//將提取出來(lái)的發(fā)送失敗郵箱寫(xiě)入到mail.txt文件中???
??? $mailurl=fopen("$name","a");
??? foreach($mail as $line)
??? {
??????? fwrite($mailurl,$line."\r\n");
??? }
??? echo "將所有發(fā)送失敗的郵箱地址寫(xiě)入".$name."<br />";
??? fclose($mailurl);
}
getmail(".","mail.txt");
?>
PHP學(xué)習(xí)
歡迎參與《PHP實(shí)戰(zhàn):Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/14191.html