tutaj jest nie konieczny chociaż do inicjacji pliku możesz go użyć ale i tak będziesz musiał się posłużyć "sztuczką" gdyż przecież nie będziesz czekał na odpowiedź minutę

wszystko da się zrobić bez ajaxa - już mniej więcej napisze co i jak a potem popróbujesz swoich sił

- w ajax'ie też pasowało by czekać na skończenie wykonywania się skryptu chyba że zrobisz tak jak niżej napisałem to na 2 plikach jeden ajaxem - ale po co jak nie trzeba

robisz to w php tylko i kolejność taką jaką podałeś wg. logiki - może to być w jednym pliku a może być w dwóch gdzie drugi includujesz do pierwszego (można to na wiele sposobów zrobić nawet bez includowania - ale tak najprościej)....
i teraz najważniejsze.... w pierwszym kroku "budujesz" i wysyłasz stronę jaką chciałeś przesłać (nie myśl na razie o reszcie), jednak po wygenerowaniu tej zawartości musisz treść odrazu wysłać i zamknąć połączenie - do tego potrzebny będzie Ci ten zestaw funkcji:
Output Control Functions - jednak aby przeglądarka nie czekała też na skończenie skryptu trzeba też wysłąć odpowiedni nagłówek w header razem z treścią....
Obsługa połączeń - i przykład z ogólną ideą jaka potrzebujesz w drugim komentarzu - funkcji sleep nie potrzebujesz

....
jeszcze jedno - czasami niektórzy przerywają połączenie zanim strona się wczyta co przerwie normalnie wykonywanie skryptu - skoro skoro skrypt został zainicjowany więc masz dane z formularza który jednak chcesz zapisać i nie chcesz by sam się skrypt przestał wykonywać tylko dlatego, że ktoś np. wciśnie escape - i tu funkcja:
ignore_user_abort - zastosuj ją na samym początku skryptu co zapeni Ci przynajmniej zapisanie formularza jeśli ktoś zerwie połączenie - no co do długości maksymalnego wykonywania skrytu to chyba nie musze nic więcej dopisywać skoro sam stwierdzasz ile on ma się wykonywać

i to wszystko powinno Ci wystarczyć - a jeszcze jedno - jeśli kompresujesz strony i chcesz zamknać połaczenie to długość/wielkość strony jest trochu inna i trzeba jeszcze jeden myk zastosować - ale jak na szybko zerknąłem to w tym komentarzu drugim o którym napomniałem jest jedno z rozwiązań - czyli podwójny bufor wyjścia przy gzip - jest tam też napisane dlaczego

pozdro i napisz czy sobie poradziłeś - a jeśli nie to podaj Swoje próby - jakiś kod to dalej napisze się co źle robisz