也可以在程序中动态设置 ini_set('memory_limit', '1024M');这样就设置成1G了。
但是一样平常不会这样设置,毕竟会影响到机器的其他做事。
有时候可以排查一下代码,很多时候内存溢出是由于php变量没有及时开释,或者遍历比较大的数组时涌现。

1.排查

memory_get_usage() php有这个别系函数,可以得到当提高程利用了多少内存空间。
返回是字节单位round(memory_get_usage()/1024/1024, 2).'MB',转换为MB.

php内存溢出PHP过程防止内存溢出的排查 NoSQL

可以追踪代码实行过程中内存的变革。

2.常见内存溢出的案例

遍积年夜型数组,修正数组的某些值,导致遍历过程数组复制一份。

php变量的特点是“写时复制”,

当涉及$arr数组赋值时,会产生分裂,天生新的HashTable构造体,导致内存占用瞬间变大

3.遍历赋值其他变量

$arr = range(0, 599999);echo 'foreach前内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';foreach($arr as $key => $item) { $arr[$key] = $item + 1; if($item % 100000 == 0) { echo 'foreach中内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>'; }}echo 'foreach后内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';//输出/foreach前内存:49.9MBforeach中内存:81.36MBforeach中内存:84.42MBforeach中内存:87.47MBforeach中内存:90.52MBforeach中内存:93.57MBforeach中内存:96.62MBforeach后内存:49.9MB/

办理方法,采取引用遍历

$arr = range(0, 599999);echo 'foreach前内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';foreach($arr as $key => &$item) { $arr[$key] = $item + 1; if($item % 100000 == 0) { echo 'foreach中内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>'; }}unset($key);unset($item);

遍历完成后记得unset($key);unset($item); 由于$item是对数组末了一个元素的引用,后面如果修正这个变量,会直接修正到数组。