我正在开发一个应用程序,它必须读取大型CSV文件和处理数据。绝对不可能在一个请求中完成它,因为处理数据也需要时间,而不仅仅是阅读。PHP:如何阅读使用AJAX请求的部分CSV文件
所以我试过到目前为止,什么一直运作良好,到目前为止是这样的:
// Open file
$handle = fopen($file, 'r');
// Move pointer to a place where it stopped last time
fseek($handle, $offset);
// Read limited line and process
for ($i = 0; $i < $limit; $i++) {
// Get length of line for offset purposes
$newlength = strlen(fgets($handle));
// Move pointer back. fgets moves pointer so we move it back for fgetcsv to get that line again
fseek($handle, $offset);
$line = fgetcsv($handle, 0, $csv_delimiter);
// Process data here
// Save offset
$offset += $newlength;
}
所以,问题就在这里在这条线:
$newlength = strlen(fgets($handle));
它失败时CSV列有换行符。
我也试过$newlength = strlen(implode(';', fgetcsv($handle, 0, $csv_delimiter)));
但这并不总是奏效。通常几个字符都会失败。大概的报价和行尾在这里处理不当。
我所需要的只是获取csv行的长度,不仅仅是单行,而是可能在引号内有换行符的csv行。
有人有更好的解决办法吗?
我会将作业发送到作业队列,并让计划程序(如cron)定期从命令行处理这些作业。并在工作完成时向适当的人发送通知。 – jeroen
这与我的问题无关。克朗将接下来。首先,我需要更正脚本来处理数据。 – Jamol