PHP
—
实例 PHP 内存溢出问题的解决方法
一.内存溢出解决方案
在做数据统计分析时,经常会遇到大数组,可能会发生内存溢出,这里分享一下我的解
决方案。还是用例子来说明这个问题,如下:
假定日志中存放的记录数为 500000 条,那么解决方案如下:
代码如下:
ini_set
(‘memory_limit','64M');
//重置 php 可以使用的内存大小为 64M,一般在远程主机上
是不能修改 php.ini 文件的,只能通过程序设置。注:在 safe_mode(安全模式)下,
ini_set 失效
set_time_limit(600);
//设置超时限制为6分钟
$farr
=
$Uarr
=
$Marr
=
$IParr
=
$data
=
$_sub
=
array
();
$spt
= ”$@#!$”;
$root
= ”/Data/webapps/VisitLog”;
$path
=
$dpath
=
$fpath
= NULL;
$path
=
$root
.”/”.
date
(“Y-m”,
$timestamp
);
$dpath
=
$path
.”/”.
date
(“m-d”,
$timestamp
);
for
(
$j
=0;
$j
<24;
$j
++){
$v
= (
$j
< 10) ? ”0″.
$j
:
$j
;
$gpath
=
$dpath
.”/”.
$v
.”.php”;
if
(!
file_exists
(
$gpath
)){
continue
;
}
else
{
$arr
= file(
$gpath
);
////将文件读入数组中
array_shift
(
$arr
);
//移出第一个单元-》<?php exit;?>
$farr
=
array_merge
(
$farr
,
$arr
);
unset(
$arr
);
}
}
if
(
empty
(
$this
->farr)){
echo
”<p><center>没有相关记录!</center></p>”;
exit
;
}
while
(!
empty
(
$farr
)){
$_sub
=
array_splice
(
$farr
, 0, 10000);
//每次取出$farr 中 1000 个
for
(
$i
=0,
$scount
=
count
(
$_sub
);
$i
<
$scount
;
$i
++){