твой код можно заменить одной функцией array_unique которуая удалит все дубликаты из массива.
Я думаю алгоритм для больших файлов должен быть следующим:
открытие файла (fopen)
чтение строки.
пробежать по файлу в поисках дубликата с места нахождения этой строки.
Если найдено то занести в массив.
В итоге будет два массива, один чистый а в другом будут все найденные совпадения.
Это по тому что, написал киба (perl, портировать на php не составит труда)
Код:
foreach(@tmp) { push(@unqie,$_) if !$seen{$_}; $seen{$_}=1; }
@tmp - список в который считывается файл @unique - список в котором окажутся все уникальные строки %seen - хэш, в котором будут повторы (key=>имя_повтора, value=>всегда 1)
Хотя я не совсем уверен, что это есть оптимальный алгоритм... Хотя хз...