Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
今天要用php代碼來處理一個580M的日志文件,總共有219萬多行記錄,因為是.log的文件,在windows下面很難將文件按照條數(shù)來分割,于是在linux下用split -l 10000 filename 前綴名 將整個文件按10000行一個分割成了200多個小文件,之后用php來循環(huán)處理這200多個文件,可是執(zhí)行到后來就出現(xiàn)了題目上面的錯誤:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
去百度了一下,原來是php.ini中的內(nèi)存分配的問題,默認(rèn)php代碼能夠申請到的最大內(nèi)存字節(jié)數(shù)就是134217728 bytes,如果代碼執(zhí)行的時候再需要更多的內(nèi)存,就會報錯了,于是就將php.ini文件中的配置改了一下:
memory_limit = 128M;//將128M改成了256M
但是之后一想,一個php腳本一次請求的內(nèi)存空間就要超過128M,那不管你以后將memory_limit設(shè)置成多大,以后肯定有出問題的時候。
究其原因,是我在在編碼時,僅僅對變量賦值,卻從來沒有 unset ($var) 過。導(dǎo)致了內(nèi)存占用越來越多,所以以后一個變量不再使用之后,一定要記得unset掉它。
下面附上我今天處理這個日志文件的代碼:
<?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ā)送失敗郵箱提取出來
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 "無法獲取日志中發(fā)送失敗的郵箱,請檢查";
}
}
}
unset($row);
}
//將提取出來的發(fā)送失敗郵箱寫入到mail.txt文件中
$mailurl=fopen("$name","a");
foreach($mail as $line)
{
fwrite($mailurl,$line."\r\n");
}
echo "將所有發(fā)送失敗的郵箱地址寫入".$name."<br />";
fclose($mailurl);
}
getmail(".","mail.txt");
?>
- 解決fatal:remote error:You can''t push to git://github.com/username/*.git問題的辦法
- 解決PHP程序運行時:Fatal error: Maximum execution time of 30 seconds exceeded in的錯誤提示
- PHP中使用register_shutdown_function函數(shù)截獲fatal error示例
- ThinkPHP提示錯誤Fatal error: Allowed memory size的解決方法
- php運行提示:Fatal error Allowed memory size內(nèi)存不足的解決方法
- php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解決方法
- Windows平臺的 PHP 報錯 Fatal error: Class COM not found in 的解決方法
- PHP中Fatal error session_start()錯誤解決步驟
- PHP捕獲Fatal error錯誤的方法
- Fatal: the Postfix mail system is already running 解決辦法
相關(guān)文章
使用Curl進(jìn)行抓取遠(yuǎn)程內(nèi)容時url中文編碼問題示例探討
在編碼時應(yīng)該只對部分URL編碼,否則URL中的冒號和反斜杠也會被轉(zhuǎn)義,下面有兩個不錯的示例,有類似情況的朋友可以感受下2013-10-10PHP加密函數(shù) Javascript/Js 解密函數(shù)
php加密,js解密,貌似沒什么意義,主要是key在js中會被看到,不過在某些地方可能會用到2013-09-09PHP正則表達(dá)式處理函數(shù)(PCRE 函數(shù))實例小結(jié)
這篇文章主要介紹了PHP正則表達(dá)式處理函數(shù)(PCRE 函數(shù)),結(jié)合實例形式總結(jié)分析了php正則表達(dá)式preg_replace、preg_match、preg_match_all、preg_split及preg_quote等函數(shù)相關(guān)使用技巧,需要的朋友可以參考下2019-05-05PHP中使用數(shù)組實現(xiàn)堆棧數(shù)據(jù)結(jié)構(gòu)的代碼
堆棧是一種數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)形式,是廣泛用來存取數(shù)據(jù)的一種容器2012-02-02php+ajax實現(xiàn)仿百度查詢下拉內(nèi)容功能示例
這篇文章主要介紹了php+ajax實現(xiàn)仿百度查詢下拉內(nèi)容功能,結(jié)合具體實例形式分析了php結(jié)合ajax動態(tài)查詢功能的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-10-10