Moin.
Statt mit fopen() und fgetcsv() ließe sich deine Schleife auch wie folgt formuliere:
foreach(file($source) as $line) {
$data = explode('|', $line);
if(count($data) != 4) /* Fehlerbehandlung */;
[...]
}
Ob das performanter ist, musst du aber schon selbst testen...
Christoph