我正在使用Spreadsheet Excel Writer将数据写入XLS文件。但是,由于要处理的记录很多,因此这种数据处理需要相当长的时间。
当我从命令行运行脚本时,需要18秒并按预期转储xls文件。
当我用curl请求它时,我得到一个极短的Content-Length设置,连接立即关闭,而不是等待脚本的其余部分执行/ file写入。此外,只有我的脚本中的“标题”字段才会在发送之前添加到工作簿中。
我该如何解决这个问题?
MWE:
<?php
require_once 'Spreadsheet/Excel/Writer.php';
require('ncbi_blast_parse_xml.inc.php');
$blastxml = fopen('test.xml','r');
$blastresults = new ncbi_blast_parse_xml($blastxml);
$blastresults->parse_it(); // This call takes ~10 seconds to execute when called from CLI
// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();
// sending HTTP headers
$workbook->send('test.xls');
// Creating a worksheet
$worksheet =& $workbook->addWorksheet('My first worksheet');
$headers_array = array("Iteration Querydef","Iteration QueryLength"); //<SNIP>
for($i=0;$i<sizeof($headers_array);$i+=1){
$worksheet->write(0, $i, $headers_array[$i]);
}
$row=1;
foreach($blastresults->Matches() as $match) {
$z = 0;
foreach($match['All Deflines'] as $defline) {
//<SNIP>
here is where the data is added to the workbook
//<SNIP>
$row++;
}
}
// Let's send the file
$workbook->close();
?>
我运行的其他测试
我尝试在没有调用NCBI库的情况下运行,这似乎解决了一些问题。页面现在挂起,直到创建文件。看起来对parse_it()的调用不会导致线程等到该计算完成时(从Web运行)。