在内存中创建 CSV、通过电子邮件发送并从内存中删除

2024-01-20

private function convert_to_csv($input_array, $output_file_name, $delimiter) {

    $temp_memory = fopen('php://memory','w');

    foreach ($input_array as $line) {

        fputcsv($temp_memory, $line, $delimiter);

    }

    fseek($temp_memory, 0);

    header('Content-Type: application/csv');
    header('Content-Disposition: attachement; filename="' . $output_file_name . '";');

    fpassthru($temp_memory);

}               

我使用上面的函数获取数据数组,转换为 CSV,然后输出到浏览器。两个问题:

  1. 通过 HTTP 下载后文件是否会从内存中删除?
  2. 如何重写这个相同的函数,以便可以使用该文件(例如,用作使用 PHPMailer 发送的电子邮件附件),然后立即从内存中删除?

编辑:工作代码 - 但写入文件,而不是内存

public function emailCSVTest() {

    $test_array = array(array('Stuff','Yep'),array('More Stuff','Yep yep'));

    $temp_file = '/tmp/temptest.csv';

    $this->convertToCSV($test_array, $temp_file);

    $this->sendUserEmail('Test Subject','Test Message','[email protected] /cdn-cgi/l/email-protection',$temp_file);

    unlink($temp_file);

}

private function convertToCSV($input_array, $output_file) {

    $temp_file = fopen($output_file,'w');

    foreach ($input_array as $line) {

        fputcsv($temp_file, $line, ',');

    }

    fclose($temp_file);

}

仍然没有答案:原始函数是否从内存中删除文件?


我会使用 PHPtempfopen 包装器和内存阈值如下:

// we use a threshold of 1 MB (1024 * 1024), it's just an example
$fd = fopen('php://temp/maxmemory:1048576', 'w');
if ($fd === false) {
    die('Failed to open temporary file');
}

$headers = array('id', 'name', 'age', 'species');
$records = array(
    array('1', 'gise', '4', 'cat'),
    array('2', 'hek2mgl', '36', 'human')
);

fputcsv($fd, $headers);
foreach($records as $record) {
    fputcsv($fd, $record);
}

rewind($fd);
$csv = stream_get_contents($fd);
fclose($fd); // releases the memory (or tempfile)

内存阈值是1MB。当CSV文件变大时,PHP会创建一个临时文件,否则一切都会发生在内存中。优点就是大CSV文件不会耗尽内存。

关于你的第二个问题,fclose()会释放内存。

我曾经写过一篇关于此的博客文章,你可能会觉得很有趣:http://www.metashock.de/2014/02/create-csv-file-in-memory-php/ http://www.metashock.de/2014/02/create-csv-file-in-memory-php/

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

在内存中创建 CSV、通过电子邮件发送并从内存中删除 的相关文章

  • 如何获取 URL 中未知的 $_GET 值的数组?

    我正在使用一个在线购物车 它接受订购的商品并通过 URL 将其唯一 ID 传递到 process php 页面 所以 URL 看起来像这样 process php code 1 231 code 2 532 code 3 342 Anoth
  • 如何显示 PHP 对象

    我有这样的代码 dataRecord1 client gt GetRecord token table filter echo pre print r dataRecord1 echo pre foreach dataRecord1 gt
  • 如何将对象(模型类型对象)插入到 Laravel 中 Collection 对象的特定索引号处?

    我读过戴尔 里斯的代码明亮 https daylerees com codebright 了解更多关于雄辩的信息Collection在 Laravel 中使用 还做了一些其他研究 但找不到我正在寻找的答案 我想插入一个对象 Model输入对
  • 获取 Cocoa 中文件的类型

    我成功找到了指定文件的扩展文件类型 JPEG 图像 TIFF 图像等 但我正在寻找更通用的东西 可以对 大类别 中的文件进行分类 如图像 moovies 文本文件等 有没有办法在可可 或 Objective C 中实现这一点 感谢您的帮助
  • 字符串的外部文件,而不是对它们进行硬编码

    我有开发一些 Android 应用程序的经验 这些应用程序可以轻松地拥有可以存储字符串的 XML 字符串文件 上次我开发桌面 Java 应用程序时 我对字符串进行了硬编码 例如按钮标题 标签等 我后来了解到这是不好的做法 我应该将字符串存储
  • 从 Symfony2 中的 http_basic auth 注销

    每当我去 admin logout 我已正确重定向到项目的根目录 但在访问时仍处于登录状态 admin 因为没有提示我输入凭据 这是我的配置 安全 yml security firewalls admin area pattern admi
  • 如何改进 PHP 分页算法?

    我正在研究 PHP 中的分页算法 我可以猜测它需要改进的空间 所以我想对如何改进它有一些想法 无论是从 UI UX 的角度清理代码本身 还是你能想到的任何其他东西 该算法应输出如下所示的分页 1 2 3 6 7 8 97 98 99 or
  • PHP 函数 iconv 字符编码从 iso-8859-1 到 utf-8

    我正在尝试将字符串从 iso 8859 1 转换为 utf 8 但是当我找到这两个字符 和 时 函数返回 一个字符 是一个里面有两个数字的正方形 我该如何解决这个问题 我认为您正在寻找的编码是Windows 代码页 1252 http en
  • 这是过滤数据并防止 SQL 注入和其他攻击的安全方法吗?

    我创建了两个简单的函数来在插入数据进入 mysql 查询之前对其进行过滤 对于表单字段 我还使用正则表达式来单独检查每个字段 Form filter function filter var HTML is not allowed var s
  • 我们可以在 Bash 脚本中使用 PHP 吗?

    我有一个 bash 脚本abcd sh bin sh for i in seq 8 do ssh w i uptime ps elf grep httpd wc l free m mpstat done pid sleep 1 kill 9
  • 传递给 Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() 的参数 1 必须是以下实例

    我创建了一个新的中间件来检查用户令牌我创建了中间件然后添加到 kernal php 但是当我尝试访问中间件中的 request 时我收到错误 这是我的中间件代码 namespace App Http Middleware use Illum
  • PHP 多个 Ajax 请求:第一个请求阻止第二个请求

    我在一页上有 2 个 ajax 请求 我运行了第一个请求并单独启动了第二个请求 但第二个在第一个运行后停止工作 第一次结束后继续 第一个请求需要很长时间 大约 30 60 秒 此时我需要第二个请求来显示日志第一个请求发生的情况 我尝试使用
  • json_decode 到自定义类

    是否可以将 json 字符串解码为 stdClass 以外的对象 不是自动的 但你可以按照老式的路线来做 data json decode json true class new Whatever foreach data as key g
  • FPM 与 apache2 无法工作(权限被拒绝)

    我正在尝试使用 apache fastcgi 和 fpm 设置一个 Debian Web 服务器 但我越来越恼火 一旦我停用 mod php 我就会收到以下错误 2014 年 5 月 22 日星期四 12 16 10 错误 客户端 xxx
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • Symfony2 - 在自定义验证器中调用 EmailValidator

    我正在创建一个自定义验证器约束来验证 联系人 类似于 John Doe 电子邮件受保护 gt 遵循Cookbook http symfony com doc current cookbook validation custom constr
  • 安全地评估简单的数学

    我想知道是否有一种安全的方法来评估数学 例如 2 2 10000 12000 10000 20 2 2 40 20 23 12 无需使用eval 因为输入可以来自任何用户 我需要实现的只是整数的加法和减法 是否有任何已经存在的代码片段 或者
  • 什么是 PHP session_start()

    它是否基于 cookie 启动当前会话 从 PHP 网站上得到的 PHP如何控制会话 如果我在用户打开我的登录页面时启动会话 我什至可以使用该会话做什么 我可以使用当前会话来获取有关登录用户的信息吗 PHP 会话系统允许您将数据安全地存储在
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att
  • 将 Hbase 与 PHP 集成 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经安装了 Hbase 现在我正在寻找一些 PHP 库来将 hbase 与 PHP 集成 我尝试了 2 个库 第一个是我尝试与 th

随机推荐

  • Singleton 类出了问题,不知道是什么

    我以前从未做过任何单例类 现在我认为对于这个数据库连接来说 创建一个单例类是个好主意 但我不知道为什么它不起作用 如果有人能帮助我解决这个问题 我真的很感激 因为我想了解 OOP 是如何工作的 无论如何 我现在只需将 PHP 更新到最新版本
  • Spring data MongoDB 将数组添加到现有文档

    假设我有以下集合 public Data class Customer Id private String id private String firstName private String lastName DBRef private
  • 升级到 Crashlytics NDK 2.+ 后出现虚假 NDK 堆栈回溯

    从 Crashlytics 2 6 8 Crashlytics NDK 1 1 5 迁移到 Crashlytics 2 8 0 Crashlytics NDK 2 0 0 以及之后的任何更新版本后 寻找 NDK 堆栈跟踪中展开问题的结构支持
  • Firestore 管理员 创建匿名用户

    尝试使用管理员创建匿名用户 我使用云功能 但我不知道是否可能 admin auth createUser email userEmail emailVerified false password userPassword disabled
  • 如何在xcode中使用数组传递本地html文件

    我在这里尝试申请 当我单击表格视图时 它将重定向到另一个名为 详细信息 的页面 在那里我使用了 webview 来显示所选的 url 值 这是我的代码 void viewWillAppear BOOL animated super view
  • 选择内核和超参数以减少内核 PCA

    我正在阅读使用 Scikit Learn 和 TensorFlow 进行机器学习实践 构建智能系统的概念 工具和技术 https rads stackoverflow com amzn click com 1491962291 我正在尝试优
  • 使用 Java 下载文件

    我编写了一些代码来下载我所做的网络广播的一集 它获取剧集的 URL 并获取保存它的位置 不过 它最多只能下载 16MB 然后就会自动取消 我不完全确定要改变什么值来增加这个值 有可能吗 有人可以指出我正确的方向吗 谢谢你 下载代码 URL
  • Amazon SQS Java SDK - 无法接收消息属性

    在发送之前使用以下代码将带有属性的消息发布到 SQS 后 并在 SQS 控制台中检查所有内容是否正确发布 messageRequest addMessageAttributesEntry attributeTest new MessageA
  • Instabot:是否可以在单个帖子中上传多张图片?

    我正在使用此代码为 Instagram 创建一个简单的每日帖子机器人 一切都很顺利 但如果我能在每篇文章中发布包含 2 3 张图像的相册 那就太不可思议了 这可能吗 这是我到目前为止所做的 非常适合单图像帖子 import os impor
  • 尝试使用多处理来填充Python中的数组

    我有这样的代码 x 3 y 3 z 10 ar np zeros x y z from multiprocessing import Process Pool para process def local func section prin
  • Redis Lettuce 连接和 BLPOP

    Lettuce 在底层使用单个共享本机连接 在这种设计中使用 BLPOP 阻止命令是否安全 它会阻止此共享本机连接并影响其他客户端吗 我在 Lettuce 文档中没有找到具体的解释说明 提前致谢 使用 BLPOP BLMOVE 和类似命令会
  • 参数化ggplot2直方图/密度aes函数找不到对象

    我创建了一个直方图 密度图函数 我希望 y 轴为count而不是密度 但在参数化其 binwidth 时遇到问题 我正在使用基于的示例http docs ggplot2 org current geom histogram html htt
  • 如何将“com.unity3d.player.UnityPlayer”导入我的 Android 库?

    我在获取时遇到问题UnityPlayer依赖于我的 Unity Android 库插件 我只是无法找出向我的插件添加依赖项的正确方法 在我尝试添加之前classes jar文件到我的libs包含所有 UnityPlayer 代码的目录 这让
  • AngularJS:打开一个新的浏览器窗口,但仍然保留范围和控制器以及服务

    我正在编写一个 angularJS 应用程序 在这个特定的控制器中 我通过以下方式打开一个新的浏览器窗口 window open服务 但在新窗口中 所有 scope变量丢失 我尝试使用window parent但这行不通 事实上 在新的浏览
  • R:plm 个体和时间固定效应,但没有其他回归量

    我想运行仅包括时间和个体固定效应的回归 即没有其他右侧变量 我尝试这样做plm plm y 1 data data effect twoways model within 然而 语法不正确 也不能仅仅抑制 1从模型公式 错误信息是 Erro
  • 获取倒数第二个元素

    jQuery 有没有办法使用选择器来识别倒数第二个元素 有类似 last 1 的东西吗 该列表可以是任意长度 所以我不能使用 eq 任何帮助将非常感激 A 看不到你的 html 但试试这个 a last prev 那应该给你一个before
  • 如何在 Windows 中将文本附加到文件中?

    每次调用此函数时 旧文本数据都会丢失 告诉我如何维护以前的数据和附加新数据 该函数被调用 10 次 void WriteEvent LPWSTR pRenderedContent HANDLE hFile DWORD dwBytesToWr
  • Razor.ServiceStack - 视图不渲染,只是默认的“快照”

    我已经使用设置了一个网站http razor servicestack net http razor servicestack net 我创建了多个视图和匹配服务 示例如下 服务示例 using ServiceStack ServiceHo
  • 在drupal中使用hook_form_alter设置webform组件值[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我已经使用 form alter 函
  • 在内存中创建 CSV、通过电子邮件发送并从内存中删除

    private function convert to csv input array output file name delimiter temp memory fopen php memory w foreach input arra