我们需要将数据导出到csv文件。
方法是:
fopen
csv文件一次fputcsv
)之后x = 100, 500 or 1000
fclose
在写完所有数据后将其关闭30.000行需要大约1分钟来解析并写入文件。
到目前为止,在100行之后写作是最快的。
如何加快出口速度?它不是关于我们的数据解析算法,而是文件管理和编写。
以下是一些相关的代码块:
// -- 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, ';', '"');
}
答案 0 :(得分:1)
如果您对写入间隔进行了修改并发现100是最快的,那么您可能已尽可能多地完成。
如果这是在从shell而不是网页调用的脚本中,则有其他选择。
备选方案1 - 以编译语言而不是解释语言编写导出脚本。 C 1 击>
备选方案2 - 将CSV行输出到stdout
并使用重定向将输出管道输入操作系统中的文件
备选方案3 - 如果可能,请查看操作系统中的缓存选项
没有尝试上述任何一项(并且在看到您的代码片段后,选项1被删除了),可能是因为您在创建文件时更接近操作系统而不是更快有PHP循环并执行写作