Php 在编写大数据时保持文件打开?
我们需要将数据导出到csv文件 方法是:Php 在编写大数据时保持文件打开?,php,Php,我们需要将数据导出到csv文件 方法是: fopencsv文件一次 fputcsv在x行之后将数据转储到文件(x=100、500或1000) fclose写入所有数据后将其关闭 30000行需要大约1分钟来解析和写入文件 100行后写作是迄今为止最快的 如何加快出口速度?这不是关于我们的数据解析算法,而是关于文件管理和编写 以下是一些相关的代码块: // -- path and file creation functions $strPhpTmpDir = sys_get_temp_di
fopen
csv文件一次fputcsv
在x行之后将数据转储到文件(x=100、500或1000
)fclose
写入所有数据后将其关闭 // -- path and file creation functions
$strPhpTmpDir = sys_get_temp_dir();
$strTmpDir = $strPhpTmpDir . DIRECTORY_SEPARATOR . uniqid();
$bOk = mkdir($strTmpDir, 0777);
$this->m_strTmpPath = $strTmpDir;
$strFile = 'csv-' . time() . '-' . rand() . '.csv';
$this->m_strTmpFile = $this->m_strTmpPath . DIRECTORY_SEPARATOR . $strFile;
touch($this->m_strTmpFile);
// -- open function
if (is_file($this->m_strTmpFile) && is_writable($this->m_strTmpFile)) {
$this->m_oFile = fopen($this->m_strTmpFile, 'w');
}
// -- dump function
foreach($arData as $arLine) {
fputcsv($this->m_oFile, $arLine, ';', '"');
}
如果您修改了写入间隔,发现100是最快的,那么您可能已经尽了最大努力 如果这是在一个从shell而不是网页调用的脚本中,那么还有其他选择
- 备选方案1-使用编译语言而不是解释语言编写导出脚本。C
- 备选方案2-将CSV行输出到
,并使用重定向将输出导入操作系统内的文件stdout
- 备选方案3-如果可能,请查看操作系统中的缓存选项
没有尝试过以上任何一种方法(选项1在看到您的代码片段后被删除),这可能是因为您在创建文件时更接近操作系统,而不是让PHP循环并执行写入操作,因此您将获得一个更快的速度。您所说的“100行后写入是迄今为止最快的”是什么意思?100行之后,书写速度是否会提高?这可能会有帮助,因此请查看您的实际(相关)建议优化的代码解析100行数据后写入文件要比解析500行然后写入文件快。添加了一些代码块您是在开始写入之前拥有所有数据,还是分批读取并在N行之后写入?感谢提供了其他方法,但我必须坚持使用PHP。此外,我将尝试调整我们的解析函数。