В общем случае вам надо запустить эту функцию в отдельном процессе/нити, только тогда она будет выполнятся независимо ( с обычными оговорками, но все же )
Как именно это делать — это вопрос. Выше предлагают держать отдельные процессы, которые подхватят задание из очереди. Есть еще стандартный расширение pcntl, которое реализует стандартный unix механизм fork для создания дочернего процесса, но он не работает на виндах, например, в силу того что там это организовано по-другому.
Дополнительно есть особенности с работой php в веб-сервере с set_time_limit().
Когда мне надо было сделать какие-то долгие задачи, я делал фактически демон в bg и работал с ним через разные интерфейсы — то очередь через базу, то REST, что прикольней.