我正在開發一個應用程序,它必須讀取大型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