Às vezes você precisa ignorar a última linha ou linhas do csv. Eu defino o número de linhas ignoradas da parte superior como $start_offset e o número de linhas a serem ignoradas da parte inferior como $end_offset. Comece com zero e aumente até que o erro de deslocamento desapareça
Veja como faço:
$data = file_get_contents($filename);//load up csv
$data_array = explode("\n", $data);//break file into lines
$csv = array_map('str_getcsv', $data_array);//break up comma delimited
$csv_len = count($csv); //count of number of lines
$start_offset = 2;
$end_offset = 3;
for ($i=$start_offset; $i<$csv_len-$end_offset; $i++)
{
//access columns as $csv[$i][0], $csv[$i][1] etc
}