Используя curl, вы добавляете зависимость времени ожидания сети в смесь. В идеале вы должны запускать все из командной строки, чтобы избежать проблем с тайм-аутом.
PHP поддерживает разветвление (pcntl_fork). Вы можете разветвлять некоторые процессы, а затем отслеживать их с помощью чего-то вроде pcntl_waitpid. В итоге вы получаете один «родительский» процесс для отслеживания дочерних процессов, которые он охватывает.
Имейте в виду, что хотя один процесс может запуститься, загрузить все, а затем разветвиться, вы не можете делиться такими вещами, как соединения с базой данных. Таким образом, каждый разветвленный процесс должен устанавливать свой собственный. Я использовал разветвление для 50 процессов.
Если разветвление недоступно для вашей установки PHP, вы можете запустить процесс, как упоминал Спенсер. Просто убедитесь, что вы запускаете процесс таким образом, чтобы он не останавливал обработку вашего основного скрипта. Вы также хотите получить идентификатор процесса, чтобы вы могли отслеживать порожденные процессы.
exec("nohup /path/to/php.script > /dev/null 2>&1 & echo $!", $output);
$pid = $output[0];
Вы также можете использовать вышеуказанную настройку exec () для запуска процесса, запущенного с веб-страницы, и немедленного получения контроля.