开发者社区> 问答> 正文

[PHP]改了 memory_limit=1024M 还是报错: Fatal e?报错

php.ini 已加上  "memory_limit = 1024M"。php 页首也加了 "ini_set('memory_limit', '1024M')"。

var_dump(ini_get('memory_limit'));和phpinfo() 证实上限已经到 1024M

这php只跑一句sql(2表join,数据分别约3百万),还是 报错 "...allocated 80740352",这表示只有分到 77MB啊! (=80740352除以1024再除以1024)。

还有哪里设置限制住了内存分配?  http.conf ? 还是windows xp 系统里面?请高手支招!!

(电脑内存有3G。只需在命令行跑这php。该句sql已经无法再简化。就一句sql,无法用到unset来释放内存。这sql 直接在mysql操作没有问题。)

展开
收起
爱吃鱼的程序员 2020-06-22 21:16:26 1165 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    把PDO属性的PDO::MYSQL_ATTR_USE_BUFFERED_QUERY  设置为false

    试试看

    http://stackoverflow.com/questions/13728106/unexpectedly-hitting-php-memory-limit-with-a-single-pdo-query

    可能是apache的问题吧能把代码和phpinfo相关部分贴一下么cli执行试试.

    php最大支持128MB吧,

    memory_limit上面描述有讲.
     

    可以通过修改配置增加的,于老板PHP代码里有foreach吧,用了迭代了吧。。你还是贴PHP和MYSQL语句吧Maximumamountofmemoryascriptmayconsume(128MB)不是这么理解吧这个问题遇到过,是你循环次数超过了最大的1000次你潜逃循环了吧,优化下性能吧。

    http://www.oschina.net/code/snippet_998019_19249

    可以参考一下这篇.

    $runcount=$memory/(strlen($string)+1);//为什么+1?因为需要留点内存给其它变量或者计算式.

    可能算法不对,你可以不+1,将$runcount*0.99也可以.总要留点内存给其它变量.

    引用来自“徐同乐”的答案

    这个问题遇到过,是你循环次数超过了最大的1000次你潜逃循环了吧,优化下性能吧。回复 @徐同乐:也是办法:)想过真没答案只好用limit,在程序里分一段一段的搬到光。但这很没必要啊,平白增加复杂度,资源也没用到。想找到可以突破77M的限制。限制下返回的结果数试试那就不晓得了,此类错误我就做数的时候循环嵌套出现过。
    2020-06-22 21:16:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载