Как сделать preloader в php до загрузки html?
Все, что делает PHP происходит до того как клиент получает HTML и JS.
Вам необходимо делать загрузку тяжелых данных через AJAX
есть вариант без аякса: 
1) делаете ссылку на страничку с прелоадером, то есть весь контент - только прелоадер
2) Делаете на ней js: location.href = 'урл с гет параметрами который долго грузится'
3) Profit! пока пхп не отдаст содержимое страницы с вашими тяжелыми запросами будет крутиться прелоадер, потом сразу загрузится вся тяжелая страничка.