我正试图从包含4000条记录的数据库中创建备份文件(实际上备份将远远超过20000条记录),为此,我打开文件对象,然后填充文件头,然后尝试以adif格式逐行追加记录。在不创建文件的情况下进行测试时,它会返回格式化的文本,但如果我将fwrite
添加到循环中,它会抛出错误"undefined variable $file."
以下是整个函数
public function processBackup() {
set_time_limit(300);
DB::disableQueryLog();
$fileName = 'backup'.date('YmdHis').'.adi';
$destinationPath = public_path().'/uploads/backups/'.Sentry::getUser()->username.'/';
$file = fopen($destinationPath.$fileName, 'w');
fwrite($file, "ADIF 2 Export from SWARLOG'n");
fwrite($file, "Generated on ".date('Y-m-d')."'n");
fwrite($file, "<PROGRAMID:7>SWARLOG'n");
fwrite($file, "<ADIF_Ver:1>2'n");
fwrite($file, "<EOH>'n");
Qso::withUser(Sentry::getUser()->id)->chunk(50,function($qsos){
foreach ($qsos as $qso) {
$row = AdifHelper::getAdif($qso);
fwrite($file, $row);
}
});
fclose($file);
}
怎么了?
您应该将use
添加到您的函数中。
更改:
function($qsos)
进入:
function($qsos) use ($file)