E' normale che sia così. Una volta che hai letto la riga, il puntatore del file si trova sul primo carattere dopo la riga letta (l'inizio della nuova riga).
Dovresti tornare indietro di un numero di byte che compongono la riga letta:
Codice PHP:
$valore = 0; // ...da definire
$newRow = array(); // ...da definire
$file = fopen('mydata.csv', 'r+');
while(!feof($file)) {
$row = fgetcsv($file);
if($row[0] == $valore) {
fseek($file, -1 * mb_strlen($row) , SEEK_CUR);
fputcsv($file, $newRow);
break;
}
}
fclose($file);
Comunque, questo è corretto se la dimensione della nuova riga è la stessa di quella vecchia:
Se è più piccola potresti ritrovarti il pezzo finale della vecchia riga
Se più grande, finirai per mangiarti il pezzo iniziale della riga ruccessiva