类别:PHP问题 / 日期:2019-12-02 / 浏览:85 / 评论:0

内存溢出是指运用体系中存在没法接纳的内存或运用的内存过量,终究使得顺序运转要用到的内存大于假造性能供应的最大内存。

引发内存溢出的缘由有很多种,罕见的有以下几种:

内存中加载的数据量过于巨大,如一次从数据库掏出过量数据; (引荐进修:PHP视频教程)

鸠合类中有对对象的援用,运用完后未清空;

代码中存在死轮回或轮回发生过量反复的对象实体;

运用的第三方软件中的BUG;

启动参数内存值设定的太小;

假定日记中寄存的纪录数为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++){
$arr = explode($spt,$_sub[$i]);
$Uarr[] = $arr[1]; //vurl
$Marr[] = $arr[2]; //vmark
$IParr[] = $arr[3].” |$nbsp;”.$arr[1]; //IP
}
unset($_sub);//用完实时烧毁
}
unset($farr);

这里,不难看出,一方面,我们要增添PHP可用内存大小,另一方面,只需我们想办法对数组举行分批处置惩罚,分而治之,将用过的变量实时烧毁(unset),平常是不会涌现溢出题目的。

别的,为了节约PHP顺序内存消耗,我们应该尽量削减静态变量的运用,在须要数据重用时,能够斟酌运用援用(&)。再一点就是:数据库操纵完成后,要立时封闭衔接;一个对象运用完,要实时挪用析构函数(__destruct())。

以上就是php内存溢出罕见缘由的细致内容,更多请关注ki4网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。