Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在编写大数据时保持文件打开?_Php - Fatal编程技术网

Php 在编写大数据时保持文件打开?

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

我们需要将数据导出到csv文件

方法是:

  • fopen
    csv文件一次
  • fputcsv
    在x行之后将数据转储到文件(
    x=100、500或1000
  • fclose
    写入所有数据后将其关闭
  • 30000行需要大约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, ';', '"'); 
      }
    

    如果您修改了写入间隔,发现100是最快的,那么您可能已经尽了最大努力

    如果这是在一个从shell而不是网页调用的脚本中,那么还有其他选择

    • 备选方案1-使用编译语言而不是解释语言编写导出脚本。C

    • 备选方案2-将CSV行输出到
      stdout
      ,并使用重定向将输出导入操作系统内的文件

    • 备选方案3-如果可能,请查看操作系统中的缓存选项


    没有尝试过以上任何一种方法(选项1在看到您的代码片段后被删除),这可能是因为您在创建文件时更接近操作系统,而不是让PHP循环并执行写入操作,因此您将获得一个更快的速度。

    您所说的“100行后写入是迄今为止最快的”是什么意思?100行之后,书写速度是否会提高?这可能会有帮助,因此请查看您的实际(相关)建议优化的代码解析100行数据后写入文件要比解析500行然后写入文件快。添加了一些代码块您是在开始写入之前拥有所有数据,还是分批读取并在N行之后写入?感谢提供了其他方法,但我必须坚持使用PHP。此外,我将尝试调整我们的解析函数。