PHP for 循环中允许的内存大小耗尽

2024-03-02

当我尝试在 PHP 中操作一个巨大的数组并将结果作为响应返回时,我遇到了致命错误HTTP POST 请求:

允许的内存大小 536870912 字节已耗尽

我已经尝试过设置ini_set('memory_limit', '-1');为了看看我是否得到结果,但我没有得到任何类型的回复。当我尝试发出 POST 请求时,Postman 总是崩溃。

数组的起始结构就是这个。机身大小约为25mb。主数组包含大约 22k 个具有此结构的数组,我刚刚包含了 2 个:

Array
(
    [0] => Array
        (
            [id] => 14
            [isActive] => 1
            [personId] => 0023fff16d353d16a052a267811af53bc8bd42f51f2266a2904ca41db19dfd32_0
            [gender] => m
            [age] => 69
            [linedata_0] => 2018-03-01 17:15:18, 155.59, 294.076; 2018-03-01 17:16:04, 502.968, 249.947; 2018-03-01 17:16:44, 276.837, 270.593; 2018-03-01 17:17:28, 431.68, 371.14; 2018-03-01 17:17:34, 851.622, 355.915
        )

    [1] => Array
        (
            [id] => 180
            [isActive] => 1
            [personId] => 02659982ae8286409cc5bb283089871b62f2bafbbad517941d64e77ecf2b62b1_0
            [gender] => m
            [age] => 69
            [linedata_0] => 2018-03-01 13:20:05, 155.599, 293.841; 2018-03-01 13:20:48, 495.468, 249.582; 2018-03-01 13:21:28, 258.791, 260.748; 2018-03-01 13:23:20, 859.061, 352.237; 2018-03-01 13:23:32, 56.1404, 269.858
        )
)

下面是用于操作数组的 php 部分,以便通过分解每个用户的时间戳和坐标来获得预期的最终结果:

$final_result = [];

foreach($query_result as $row)
{
    $line_datas =explode(";",$row["linedata_0"]);
    $linedata = [];
    $final = [];
    $d = [];

    for($s =0; $s < count($line_datas); $s++){
        $line_data = explode(",",$line_datas[$s]);
        $d["timestamp"] = utf8_encode($line_data[0]);
        $d["x"]= utf8_encode($line_data[1]);
        $d["y"] = utf8_encode($line_data[2]);

        array_push($linedata,$d);
    }

    $final["id"]= $row["id"];
    $final["isActive"]= $row["isActive"];
    $final["personId"]= utf8_encode($row["personId"]);
    $final["name"] = NULL;
    $final["gender"] = utf8_encode($row["gender"]);
    $final["age"] = utf8_encode($row["age"]);
    $final["linedata"]=$linedata;

    array_push($final_result, $final);
}

return $final_result;

在我看来,没有无限循环或不良实践可以证明内存问题是合理的。唯一真正的问题可能是需要操作的数组的大小。

有什么建议么?


您正在将大量数据收集到数组中,然后才将其返回。

如果您改为收集单个“$final”项目,并且yield它位于 foreach 循环中,而不是将其放入一个不断增加的大小变量中,您仍然可以在函数调用周围进行 foreach 。

这是一个简单的示例,其中 $i 代表返回值的示例,而不是收集数据的“$final”数组。

<?php
function count_one_to_three() {
    for ($i = 1; $i <= 3; $i++) {
        // Note that $i is preserved between yields.
        yield $i;
    }
}

$generator = count_one_to_three();
foreach ($generator as $value) {  // you can also foreach(count_one_to_three() as $value)
    echo "$value\n";
}

有关 PHP 中“yield”的信息 https://stackoverflow.com/a/17483807/6216

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP for 循环中允许的内存大小耗尽 的相关文章

  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩
  • PHP - 扩展 __construct

    我想知道你是否可以帮助我 我有两个类 一个扩展了另一个 B 类将由各种不同的对象扩展 并用于常见的数据库交互 现在我希望 B 类能够处理其连接和断开连接 而无需来自 A 类或任何外部输入的指示 据我了解 问题是扩展类不会自动运行其 cons
  • 如何确定当前使用哪个网格选项

    我将 Bootstrap 3 用于使用 PHP 和 HTML 创建的网页 随着响应式网格和类的开启引导程序3您可以将多个类分配给一个 div 以根据当前屏幕尺寸定义不同的宽度 例如 div class col lg 3 col md 3 c
  • char*str={"foo",...} 和 char str[][5]={"foo",...} 数组定义之间有什么区别?

    Case 1 当我写作时 char str what is this then str i newstring 是有效的 而str i j j 是无效的 Case 2 当我写作时 char str 5 what is this then s
  • JavaScript 中带前导零的数字发生变化

    我使用 print 语句从 php 调用 javascript 函数来打印 html 代码 并且传入一个整数 但是 在 php 中传递的值与 javascript 函数接收到的数字不匹配 我不知道为什么 这是调用 javascript 函数
  • 具有恒定长度的 System.arraycopy

    我正在玩 JMH http openjdk java net projects code tools jmh http openjdk java net projects code tools jmh 我偶然发现了一个奇怪的结果 我正在对制
  • 在java中使用BUBBLE SORT对二维字符串数组进行排序

    类似的问题已经被问过 但从来没有关于二维字符串数组 因此在尝试了很长时间之后我找不到我想要的 我正在尝试使用 BubbleSort 对 java 中的 2D 字符串数组进行排序 作为输入 我收到一个二维字符串数组 一个表 以及您应该排序的
  • 在 Laravel 中动态设置数据库连接和语言

    我有 3 个域指向同一个Laravel应用 我想要的是每个人都连接到自己的数据库并根据 TLD 加载自己的语言文件 我可以在哪个文件中设置这些设置 我可以直接在配置文件中执行此操作 或者可以在加载配置之前执行某些事件 我拥有的是一个简短的函
  • 尝试获取 Google accessToken

    看起来 无论我做什么 谷歌都在竭尽全力阻止我完成这个研究项目 我的项目让我使用 Google 电子表格作为数据库 并使用所述电子表格中的数据执行程序化的 Google 图片搜索 并向最终用户显示一些结果 设置说明 我开始按照此处的说明进行操
  • Doctrine 1 和 Symfony 1 的多个主键?

    我已经知道在 Symfony 1 和 Doctrine 1 中不可能使用多个主键 但是你们知道有什么好的解决方法吗 除了多对多关系之外 原则 1 不适用于多列上的主键 但如果你想使用多对多关系 请像这样使用 BlogPost columns
  • 模拟/存根在 PHPUnit 中实现 arrayaccess 的类的对象

    这是我正在为其编写测试套件的类的构造函数 它扩展了 mysqli function construct Config c store config file this gt config c do mysqli constructor pa
  • Yii2 中 init() 和 __construct() 方法有什么区别

    init 方法 public function init construct method public function construct 那么 它们之间有什么区别 应该使用哪一个呢 init 是从以下对象扩展的任何对象的方法yii b
  • strtok - 如何避免换行并放入字符串数组?

    如果我欺骗了主题 我真的很抱歉 我在这里搜索但没有结果 我有代码 void split char str char splitstr char p char splitbuf 32 int i 0 p strtok str while p
  • CSS 无法从带有 php“includes”的相对路径工作

    文件夹结构 index php includes header html css style css 我的主项目文件夹中有 2 个子文件夹 一个是名为 includes 的文件夹 另一个名为 css 我有我的 index php主文件夹中的
  • PHP:在脚本完成之前获取输出

    我有一个名为 data php 的脚本 如下所示 do some stuff echo result do some other stuff eg database operations 我需要在另一个脚本中使用 data php 的输出
  • wordpress - 像 stackoverflow 中那样内嵌 ajax 注释

    我有一个 WordPress 博客 希望为人们提供与 stackoverflow 中添加评论相同的用户体验 有很多评论 ajax 插件 但我找不到一个可以使用的插件 它允许您在主页上内联 进入并添加评论 而无需先深入到单独的单个帖子页面 任
  • 如何确保在 PHP 的“foreach”循环中重置该值?

    我正在写一个简单的 PHP 页面和一些foreach使用了循环 以下是脚本 arrs array a b c foreach arrs as arr if substr arr 0 1 b echo This is b End of fir
  • HTML 代码中的 PHP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我用 HTML 代码编写了 PHP div div 但这出现在输出页面中 else print 我怎样才能让PHP执行 你的文件有一个 p
  • 接口中的构造方法

    接口中的构造方法不好吗 为什么人们认为有人想要实例化接口 我们想要做的是强制实现者实现构造函数 就像其他接口方法一样 接口就像一个合同 假设我有一个接口 Queue 并且我想确保实现者创建一个带有一个参数的构造函数 该构造函数创建一个单例队
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏

随机推荐

  • PostgreSQL 使用 pg_trgm 比全扫描慢

    我玩pg trgm扩展名 我有点困惑 这是会议 postgres create table t i int x text CREATE TABLE postgres insert into t select i random text fr
  • NamedParameterJdbcDao支持数据源自动装配吗?

    我有一个类扩展 NamedParameterJdbcDaoSupport 这个超类有一个最终的 setDataSource 方法 如何使用注释 autowire 将数据源连接到它 您可以在构造函数或具有其他名称的方法上使用 Autowire
  • Microsoft ACE 驱动程序更改了程序其余部分中的浮点精度

    我遇到一个问题 在使用后 某些计算的结果似乎发生了变化微软 ACE 驱动程序 http www microsoft com en us download details aspx id 13255打开 Excel 电子表格 下面的代码重现了
  • 如何许可用 C# 开发的应用程序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 C Sharp 2008 Express Edition 开发一个软件 我几乎已经完成了 现在我需要许可该软件 商业用途 我对
  • Chrome 59 和 Selenium/Fluentlenium 的基本身份验证

    Chrome 59 有删除了对 https user 的支持 电子邮件受保护 URLs https www chromestatus com feature 5669008342777856 我有一个使用此功能的测试 但该功能现已损坏 因此
  • 如何配置 mongodb 在 docker 中运行以在 Windows 上使用外部驱动器

    我正在尝试设置一个 docker 映像 该映像将运行一个 mongo 实例 该实例指向不在默认 docker 容器内的驱动器位置 我使用以下命令来创建问题 docker run p 27017 27017 name mongo test v
  • C#:接口中的枚举

    我见过几个与此问题类似的线程 但没有一个真正回答我想问的问题 对于初学者来说 不幸的是 我正在使用现有的 API 代码 虽然可能有更好的方法来完成我所要求的事情 但我只能以类似的方式进行操作 因为向后兼容性是非 可以协商 我有一个响应类 当
  • 具有 RESTful JSON 服务、HTML5 和 jQuery ajax 的 Java Web 框架

    快到 2013 年了 HTML5 时代到来了 jQuery 是 Web Javascript 的事实上的标准 此链接适用于 2010 年 https stackoverflow com questions 3882082 rest json
  • Android 中的线程示例 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想要一些关于 android 中线程创建和调用线程的简单示例 这是一个很好的教程 http andr
  • Mac 上 Eclipse 的键盘设置

    我已经在大学完成了第一门 Java 课程 想在自己的计算机上练习 然而 在下载 Eclipse 并能够编写非常简单的程序后 当我尝试编写接受用户输入的程序时 我遇到了障碍 例如 Keyboard in readInteger 因为 Keyb
  • 从 React 上传 Cloudinary 图像:我包含 Cloudinary 未签名预设,但得到“使用未签名上传时必须指定上传预设”

    我正在尝试基于此 codepen 示例构建一个简单的 Cloudinary 图像上传 https codepen io team Cloudinary pen QgpyOK https codepen io team Cloudinary
  • 开发者工具无法在 Chrome osx 中运行

    尝试在 Chrome 中打开开发人员工具 无论是通过主菜单还是通过检查元素上下文选项 我看到检查器窗口闪烁 然后消失 每次 这是怎么回事 有没有办法在不删除我的个人资料的情况下重置开发人员工具配置 我在 Apple MacBook Pro
  • Android 3.0中如何强制用户在密码过期超时后更改密码?

    我试图使用 Android 密码过期功能DeviceAdmin 当我打电话时setPasswordExpirationTimeout API 仅此而已 发送通知但实际上并不强制用户更改 密码 它仅在超时后发送通知 V DevicePolic
  • 如何在 Flask 中重定向到外部域?

    在我的 Flask 应用程序中完成操作后 我需要重定向回外部 URL 代码看起来像这样 if form next data is not None return redirect form next data where form next
  • CSS 剪辑路径定位问题

    我使用 SVG 元素创建了一个相当简单的形状 然后使用该元素将其放入我的 CSS 中clip path 它应该使我的角变圆 但由于某种原因 只有 1 个角的效果完美 这是形状
  • 如何手动触发Laravel模型事件

    当没有数据更改时 laravel 检查 isDirty 并且从未执行更新查询 因此不会触发模型更新事件 我们如何手动触发事件 手动触发事件 user User findOrFail id user gt fill data user gt
  • 使用 Google App Engine 进行异步获取请求

    我正在阅读文档异步获取请求 https developers google com appengine docs python urlfetch asynchronousrequests在GAE中 Python 不是我的第一语言 因此我很难
  • 循环视图路径错误,Spring MVC

    我正在尝试做教程 gt http spring io guides gs serving web content http spring io guides gs serving web content 当我运行它时 它显示圆形视图路径 问
  • 使 Ruby 字符串不可变

    需要使我的程序中的某些 Ruby 字符串不可变 最好的解决方案是什么 写一个包装器String class The freeze方法对我不起作用 我看到freeze不允许您解冻该对象 以下是我的情况 我有一个类将字符串传递给回调 该字符串恰
  • PHP for 循环中允许的内存大小耗尽

    当我尝试在 PHP 中操作一个巨大的数组并将结果作为响应返回时 我遇到了致命错误HTTP POST 请求 允许的内存大小 536870912 字节已耗尽 我已经尝试过设置ini set memory limit 1 为了看看我是否得到结果