Primero, no veo conveniente (ni necesario) el uso de ob_start() y ob_end_flush().
Por otra parte, puede ser que se esté agotando el tiempo máximo de ejecución y por eso no se descargue completo el script; prueba con esto:
http://php.net/manual/es/function.set-time-limit.php