background image

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

++){