PHP错误:Allowed memory size of xxx bytes(一)

PHP中文网
发布: 2017-03-30 17:14:31
原创
1371人浏览过

在写PHP程序的时候,需要处理的数据比较大的时候经常会出现“Allowed memory size of  xxx bytes”这个问题,对这个问题一般也是去修改php.ini中的配置,那是一个很有效的方法,但是有没有其他的办法来解决这个问题,当然是有,在这里我会从数据库查询和读文件的两个常用的例子来说说这个问题的解决思路。

文章中我使用的机器配置并不算高,是ubuntu 14.04的系统。

现有代码是:

$sql = "select * from `user` order by `id`";
$conn = mysql_connect($host, $user, $pwd);
$db   = mysql_select_db($db_name);
$result = mysql_query($sql);
if ($result) {
    while ($row = mysql_fetch_assoc($result)) { 
       // 一些操作的代码    
    }
}
登录后复制

果不其然,在我特意配置的小内存运行环境下出现了“Allowed memory size of  xxx bytes” 的问题。

原文代码处理是将所有数据先读取数据进入内存,然后在进行处理,在数据超出配置的最大内存的时候,就出现了这个提示。

在php中这里有个说法,一个是缓存查询,就是我们上面这种,另外一种就是非缓存查询,思路和处理流文件的处理有些类似,只缓存需要处理的数据,这样虽然会增加一部分服务器的负载,但是在内存上会有些优化。

立即学习PHP免费学习笔记(深入)”;

比如在上面的样例中,我使用memory_get_usage();函数获取的内存使用为18973784 byte。下面我会展示三种写法以及截取的他们内存的占用情况,这样的对比可能不是很准确,但是提供思路为主,抛砖引玉。

代码1:

$conn = mysql_connect($host, $user, $pwd);
$db   = mysql_select_db($db_name);
$result = mysql_unbuffered_query($sql);
if ($result) {
    while ($row = mysql_fetch_assoc($result)) {
            // 一些处理    
            }
    }
登录后复制

这个和样例的区别在于mysql_unbuffered_query这个函数,计算的内存占用为27392 byte。

挖错网
挖错网

一款支持文本、图片、视频纠错和AIGC检测的内容审核校对平台。

挖错网 28
查看详情 挖错网

代码2:

$pdo = new PDO("mysql:host={$host};dbname={$db_name}", "{$user}", "{$pwd}");
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$result = $pdo->query($sql);
if ($result) {
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 
       // 一些处理的代码    
    }
}
登录后复制

代码2使用了pdo,计算出来的内存占用为 33672 byte

代码3:

$mysqli  = new mysqli("{$host}", "{$user}", "{$pwd}", "{$db_name}");
$result = $mysqli->query("{$sql}", MYSQLI_USE_RESULT);
if ($result) {
    while ($row = $result->fetch_assoc()) {
           // 一些操作的代码    
           }
     }
登录后复制

代码3使用的mysqli,内存的占用是9008 byte

附:测试内存占用使用的方法

$start = memory_get_usage();
// 操作代码
$end =  memory_get_usage();
$used = $end - $limit;
echo $used;
登录后复制

 以上就是PHP错误:Allowed memory size of xxx bytes(一)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号