Hay varias formas, una de ellas es usando
ignore_user_abort verificando si el código de PHP se terminó, eso quiere decir que hay que mantener la petición viva en el servidor, puede que requiera de ajax para este tipo de casos y para que tengas un mejor ejemplo mira
este aporte de panino5001. O usar onunload o onbeforeunload de javascript y ejecutar mediante ajax la petición al servidor.