[英]How can I read and remove line from CSV file with PHP?
我有一個大的csv文件,其中包含一個包含電子郵件的列。 我需要創建一個腳本來讀取此csv文件,發送電子郵件,然后刪除該行。 是否可以不創建臨時文件? 如果我將它存儲在數據庫中,它是最好的方法嗎?
我的代碼:
if (($handle = fopen("emails.csv", "r")) !== FALSE) {
while (($line = fgetcsv($handle, 1000, ",")) !== FALSE) {
$mail->parseTextandSendMail($line);
//Need to remove the $line
$row++;
}
fclose($handle);
謝謝
在我看來,如果你從文件的末尾而不是從頭開始讀取行,它就可以工作。 我從這里得到了一些幫助,弄清楚如何做到這一點,並將答案中的一些代碼合並到一個函數中,該函數從文件末尾向后搜索到最后一行的開頭。
function lineStart($file) {
$position = ftell($file);
while (fgetc($file) != "\n") {
fseek($file, --$position);
if ($position == 0) break;
}
return $position;
}
使用該功能,您可以重復讀取最后一行,然后將文件截斷為該行開頭的文件位置所指示的長度。
$file = fopen('emails.csv', 'r+'); // open for read/write
fseek($file, -1, SEEK_END); // move to end of file
while (fstat($file)['size']) {
lineStart($file); // move to beginning of line
$line = fgetcsv($file);
$mail->parseTextandSendMail($line); // do your email thing
ftruncate($file, lineStart($file)); // truncate from beginning of line
}
fclose($file);
我不知道我是否認為這通常是一個好主意(數據庫似乎更容易處理),但我只想弄清楚是否有辦法實現它,這似乎似乎在我的有限測試中工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.