php数组的限制于memory_limit的关系解决方法
limit
memory
nbsp
php
usage
php数组的限制于memory_limit的关系
前几天在服务器上处理一个大文件时,遇到了一个问题
<br /> PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 10255856 bytes) in /usr/local/asg/www/scripts/sync.php on line 641<br />
登录后复制
在网上看了下,说是跟php.ini里设置的memory_limit有关,因为那个脚本中有个函数,是把文件的每行经过处理后放入一个数组的,那个文件有46419行,我想可能是超过了限制吧,于是我在windos系统做了下测试
<br /> $arr = array();<br /> for($i=0;$i=1590000;$i++) {<br /> $arr[] = $i;<br /> }<br /> <br /> echo count($arr);<br />
登录后复制
php.ini中的memory_limit设置为
<br /> ; Maximum amount of memory a script may consume (128MB)<br /> ; http://php.net/memory-limit<br /> memory_limit = 128M<br />
登录后复制
运行后,显示
<br /> Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes) in D:\server\www\02\array.php on line 5<br />
登录后复制
之后,我便把数组调小了些
<br /> $arr = array();<br /> <br /> for($i=0;$i<1550000;$i++) {<br /> $arr[] = $i;<br /> }<br /> <br /> <br /> echo count($arr);<br />
登录后复制
这次可以显示了,长度为150000
接着我又改了下php.ini中memory_limit大小
<br /> ; Maximum amount of memory a script may consume (128MB)<br /> ; http://php.net/memory-limit<br /> memory_limit = 512M<br />
登录后复制
运行了下,之前报错的那个数据现在可以显示了,数组的长度为1590000
我想问下,php.ini里的memory_limit和数组长度是什么关系,当然了从问题上看,可以知道前者的大小决定后者的长度,如何根据前者的大小测试数组长度的上限呢?
------解决方案--------------------
跟长度没有关系。。
是你脚本执行时使用的内存有关
------解决方案--------------------
我想看了这个,你应该知道点什么了
$t = 0;<br /> echo memory_get_usage() - $t, ' ',$t = memory_get_usage(), PHP_EOL;<br /> $a = array();<br /> echo memory_get_usage() - $t, ' ', $t = memory_get_usage(), PHP_EOL;<br /> $a[] = 1;<br /> echo memory_get_usage() - $t, ' ', $t = memory_get_usage(), PHP_EOL;<br /> $a[] = 2;<br /> echo memory_get_usage() - $t, ' ', $t = memory_get_usage(), PHP_EOL;<br /> $a[] = 3;<br /> echo memory_get_usage() - $t, ' ', $t = memory_get_usage(), PHP_EOL;<br />
登录后复制
------解决方案--------------------
数组大概占多少内存,可以估算出来。比如你存放的是4字节的int数,数组有1000个元素就是4*1000字节。如果是字符串,按字符估算个平均值既可。
当然memory_limit设置的值不光是你一个数组所占用的内存数,php本身进程启动,以及加载那些扩展、还有你程序中其他地方也需要占用内存。
------解决方案--------------------
是说企图再分配24个字节时,超过了128M的内存限制, 所以失败了.
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
4 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
4 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写
