background image

有关

php 内存溢出的解决方法

本文介绍下,在

php 编程中,有关内存溢出的解决方法,供大家参考。

一,

php 内存溢出

在做数据统计分析时,经常会遇到大数组,可能会发生内存溢出。
如下:
假定日志中存放的记录数为

500000 条,解决方案如下:

ini_set(‘memory_limit’,’64M’); //重置 php 可以使用的内存大小为 64M,一般在远程主机上
是不能修改

php.ini 文件的,只能通过程序设置。注:在 safe_mode(安全模式)下,ini_set

失效

代码示例

:

<?php
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++){
$arr = explode()($spt,$_sub[$i]);
$Uarr[] = $arr[1]; //vurl
$Marr[] = $arr[2]; //vmark
$IParr[] = $arr[3].” |$nbsp;”.$arr[1]; //IP
}