php数组的限制于memory_limit的关系解决方法
程序员文章站
2022-06-03 13:39:07
...
php数组的限制于memory_limit的关系
前几天在服务器上处理一个大文件时,遇到了一个问题
在网上看了下,说是跟php.ini里设置的memory_limit有关,因为那个脚本中有个函数,是把文件的每行经过处理后放入一个数组的,那个文件有46419行,我想可能是超过了限制吧,于是我在windos系统做了下测试
php.ini中的memory_limit设置为
运行后,显示
之后,我便把数组调小了些
这次可以显示了,长度为150000
接着我又改了下php.ini中memory_limit大小
运行了下,之前报错的那个数据现在可以显示了,数组的长度为1590000
我想问下,php.ini里的memory_limit和数组长度是什么关系,当然了从问题上看,可以知道前者的大小决定后者的长度,如何根据前者的大小测试数组长度的上限呢?
------解决方案--------------------
跟长度没有关系。。
是你脚本执行时使用的内存有关
------解决方案--------------------
我想看了这个,你应该知道点什么了
------解决方案--------------------
数组大概占多少内存,可以估算出来。比如你存放的是4字节的int数,数组有1000个元素就是4*1000字节。如果是字符串,按字符估算个平均值既可。
当然memory_limit设置的值不光是你一个数组所占用的内存数,php本身进程启动,以及加载那些扩展、还有你程序中其他地方也需要占用内存。
------解决方案--------------------
是说企图再分配24个字节时,超过了128M的内存限制, 所以失败了.
前几天在服务器上处理一个大文件时,遇到了一个问题
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
在网上看了下,说是跟php.ini里设置的memory_limit有关,因为那个脚本中有个函数,是把文件的每行经过处理后放入一个数组的,那个文件有46419行,我想可能是超过了限制吧,于是我在windos系统做了下测试
$arr = array();
for($i=0;$i=1590000;$i++) {
$arr[] = $i;
}
echo count($arr);
php.ini中的memory_limit设置为
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M
运行后,显示
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes) in D:\server\www\02\array.php on line 5
之后,我便把数组调小了些
$arr = array();
for($i=0;$i $arr[] = $i;
}
echo count($arr);
这次可以显示了,长度为150000
接着我又改了下php.ini中memory_limit大小
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 512M
运行了下,之前报错的那个数据现在可以显示了,数组的长度为1590000
我想问下,php.ini里的memory_limit和数组长度是什么关系,当然了从问题上看,可以知道前者的大小决定后者的长度,如何根据前者的大小测试数组长度的上限呢?
------解决方案--------------------
跟长度没有关系。。
是你脚本执行时使用的内存有关
------解决方案--------------------
我想看了这个,你应该知道点什么了
$t = 0;
echo memory_get_usage() - $t, ' ',$t = memory_get_usage(), PHP_EOL;
$a = array();
echo memory_get_usage() - $t, ' ', $t = memory_get_usage(), PHP_EOL;
$a[] = 1;
echo memory_get_usage() - $t, ' ', $t = memory_get_usage(), PHP_EOL;
$a[] = 2;
echo memory_get_usage() - $t, ' ', $t = memory_get_usage(), PHP_EOL;
$a[] = 3;
echo memory_get_usage() - $t, ' ', $t = memory_get_usage(), PHP_EOL;
------解决方案--------------------
数组大概占多少内存,可以估算出来。比如你存放的是4字节的int数,数组有1000个元素就是4*1000字节。如果是字符串,按字符估算个平均值既可。
当然memory_limit设置的值不光是你一个数组所占用的内存数,php本身进程启动,以及加载那些扩展、还有你程序中其他地方也需要占用内存。
------解决方案--------------------
是说企图再分配24个字节时,超过了128M的内存限制, 所以失败了.
相关文章
相关视频
- 教你使用PHP数据库迁移工具“Phinx”
- 详解win10下PHP的安装配置(以php5.6为...
- php Swoole实现毫秒定时计划任务(详解)
- PHP 采集程序原理分析篇_php技巧
- php数组的限制于memory_limit的关系解...
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: 如何获取上拉菜单选择框里面的值
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论