php + odbc写入文件限制

时间:2013-08-29 04:35:43

标签: php odbc

我在PHP中有一个函数从ODBC(到IBM AS400)读取表,并每天将其写入文本文件。它工作正常,直到它超过1GB ++。然后它停在一些行并且没有完全写入。

function write_data_to_txt($table_new, $query)
{
    global $path_data;
    global $odbc_db, $date2;

    if(!($odbc_rs = odbc_exec($odbc_db,$query))) die("Error executing query $query");
    $num_cols = odbc_num_fields($odbc_rs);

    $path_folder = $path_data.$table_new."/";
    if (!file_exists($path_folder)) mkdir ($path_folder,0777);

    $filename1 = $path_folder. $table_new. "_" . $date2 . ".txt";
    $comma = "|";
    $newline = chr(13).chr(10);

    $handle = fopen($filename1, "w+");

    if (is_writable($filename1)) {
      $ctr=0; 
        while(odbc_fetch_row($odbc_rs))
        {
        //function for writing all field
        //  for($i=1; $i<=$num_cols; $i++)
        //  {
            //  $data = odbc_result($odbc_rs, $i);
            //  if (!fwrite($handle, $data) || !fwrite($handle, $comma)) {
                //  print "Cannot write to file ($filename1)";
                //  exit;
            //  }
            //}
        //end of function writing all field
            $data = odbc_result($odbc_rs, 1);
            fwrite($handle,$ctr.$comma.$data.$newline);
            $ctr++;
        }
        echo "Write Success. Row = $ctr <br><br>";
    }
    else
    {
        echo "Write Failed<br><br>";
    }
    fclose($handle);
}

没有错误,只是成功消息但它应该是3,690,498行(并且仍在增加)但我只有大约3,670,009行

我的查询是普通选择,如:

select field1 , field2, field3 , field4, fieldetc from table1

我尝试的和我的假设:

  1. 我认为这是fwrite限制因此我尽量不写所有字段(只写$ ctr和第1条记录)但它仍然停留在同一行..所以我假设它不是关于fwrite超出限制..
  2. 我尝试减少我选择的字段,它可以完全工作!所以我认为它对odbc有一些限制。
  3. 我尝试使用与SQL Server相同的odbc数据源并尝试选择所有字段,它给我完整的行。所以我认为它不是odbc限制。
  4. 即使我尝试64位机器,但更糟糕的是,它只返回大约3,145,812行..所以我认为它不是32/64位基础设施。
  5. 我尝试将php ini中的memory_limit增加到1024mb,但它也没有用..
  6. 有没有人知道我是否需要在PHP中设置odbc连接?

0 个答案:

没有答案