我有一个脚本可以提取100万条记录,并将它们写入光盘上的多个文件,每个文件中有4000个块。根据我的观察,似乎文件不会在光盘上创建,直到脚本即将完成的过程结束。这是为什么?有人可以解释这个过程吗?在我的情况下,它是不幸的,因为我想处理任何内存,将其保存到光盘并继续到另一个文件。这样我希望避免任何内存问题。这是脚本:
public function test()
{
$this->load->model('Marketing_data_model');
$records = $this->Marketing_data_model->get_messages();
$n = 0;
$j = 0;
foreach ($records as $record)
{
$msg = '{"index" : {"_index" : "mymessages" , "_type" : "data" , "_id" : "' . $record['message_id'] . '"}} \n' . json_encode($record) . '\n';
file_put_contents($filename, $msg, FILE_APPEND);
if ($j >= 4000)
{
$filename = 'dump/dump-' .$n. '.txt';
$n++;
$j = 0;
}
$j++;
}
}
编辑:
不幸的是同样的问题:
public function test()
{
$this->output->enable_profiler(TRUE);
$this->load->model('Marketing_data_model');
$records = $this->Marketing_data_model->get_messages();
$n = 0;
$j = 0;
$msg = '';
foreach ($records as $record)
{
$msg .= '{"index" : {"_index" : "mymessages" , "_type" : "data" , "_id" : "' . $record['message_id'] . '"}} \n' . json_encode($record) . '\n';
if ($j >= 100)
{
$fp = fopen('dump/dump-' .$n. '.txt', 'w');
fwrite($fp, $msg);
fclose($fp);
$n++;
$j = 0;
$msg = '';
}
else
{
$j++;
}
}
}