Basta executar o script separado do servidor web via cron / etc.
Se você precisar executá-lo a partir do servidor web ... popen (nohup ..) e executar o script no cli ...
Meu palpite é que o servidor web / conexão do navegador atinge o tempo limite / falha e, eventualmente, a pilha TCP diz: "Acabamos aqui" e o processo do php é demolido .. Eu odiaria imaginar uma janela do navegador esperando por várias horas para um script para completar ...
Se você realmente quer fazer isso ... e o problema se torna um problema de conexão com o cliente, você pode olhar para configurar o ignore-user-abort para true no script / php.ini ...