2021-02-23

循环大量数据导致内存超出,不增加内存如何解决该问题

我在生成HTML文件时,由于数据量较大,无数次的 fopen fwrite fclose,文件还没生成完呢,就提示内存超出。
我的HTML生成方式是,读入缓存,再写入文件

ob_start ();		$temp = ob_get_contents ();		ob_end_clean ();

我unset(temp) 也不起作用,这个问题到底该怎么解决。不知那些CMS又是怎么生成HTML的,再大的数据也不会内存超出

回复讨论(解决方案)

不知道你的具体代码,不好说什么

需要及时释放工作变量,可将工作放在函数中执行,以利用 php 自己的回收机制
自己释放变量时需注意的是数组占用的内存是只增不减的,所以要注意数组的复用

我在生成HTML文件时,由于数据量较大,无数次的 fopen fwrite fclose,文件还没生成完呢,就提示内存超出。
我的HTML生成方式是,读入缓存,再写入文件

ob_start ();		$temp = ob_get_contents ();		ob_end_clean ();

我unset(temp) 也不起作用,这个问题到底该怎么解决。不知那些CMS又是怎么生成HTML的,再大的数据也不会内存超出

比如某个脚本为必须为死循环,那么循环到一定次数就会造成内存超出,如何控制每循环100次,释放内存

那你加个循环控制量就是了

PHP生成HTML,怎样才能让他内存不超出,求代码

周末休息没人回答了

我在生成HTML文件时,由于数据量较大,无数次的 fopen fwrite fclose,文件还没生成完呢,就提示内存超出。
我的HTML生成方式是,读入缓存,再写入文件

ob_start ();		$temp = ob_get_contents ();		ob_end_clean ();

我unset(temp) 也不起作用,这个问题到底该怎么解决。不知那些CMS又是怎么生成HTML的,再大的数据也不会内存超出

比如某个脚本为必须为死循环,那么循环到一定次数就会造成内存超出,如何控制每循环100次,释放内存

$p = $_GET['p'] * 100;for($i=$p; $i<$p+100; $i++){	echo $i;	echo '
'; // ..... // 执行其他操作}sleep(1);?>

思路就是把大任务分批执行

用分页读取的方式。
加:register_shutdown_function
每页写完,自动header location到下一页。

用register_shutdown_function 的话,只要你打开了第一次,就可以关闭浏览器了,它会自动执行。

数据的最后一页写完了,要执行:die();

这种情况要分批执行,上个代码,你马上就明白其中的原理了

$total = 10;$s = 0;if (isset ( $_GET ['s'] )) {        $s = &$_GET ['s'];}$per = $s + 5; // 每次循环5条if ($per > $total) { // 如果下次循环会超过总数,就让他只能循环到总数        $per = &$total;}while ( $s < $per ) {        echo ++ $s;        echo '
';}echo '
';echo $s;if ($s < $total) { echo "";}

php中文网最新课程二维码

  • 相关标签:循环大量数据导致内存超出,不增加内存如何解决该问题
  • 本文原创发布php中文网,转载请注明出处,感谢您的尊重!
  • https://www.php.cn/php-weizijiaocheng-255458.html

    发表回复

    Your email address will not be published. Required fields are marked *