Innym rozwiązaniem może być użycie funkcji file() z flagą FILE_SKIP_EMPTY_LINES:
$filename = 'dane.txt';
$lines = file($filename, FILE_SKIP_EMPTY_LINES
); file_put_contents
($filename, implode('', $lines));
Oczywiście to rozwiązanie, jak i rozwiązanie użytkownika @by_ikar należy stosować do plików "małych", o wielkości powiedzmy do 50MB. W sytuacji, kiedy plik będzie zbyt duży (będzie zawierał dużo treści) braknie nam pamięci na wykonanie całego skryptu. Wtedy trzeba skorzystać z funkcji fopen(), fgets(), sprawdzać długość każdej pobranej linii i zapisywać ją, lub nie do nowego pliku czy tablicy, z której później utworzysz plik.
EDIT: De facto, dokładnie taki sam problem był już na forum poruszany.