2013-06-22 6 views
0

Я создаю онлайн-судью. Я использую API IDEONE для компиляции файла. Поэтому, когда мой пользователь загружает файл, есть функция, которая берет файл и компилирует файл с помощью API IDEONE. Но проблема заключается в том, что файл компилируется, если мой пользователь нажимает на новую ссылку, компиляция остается полузавершенной. Есть ли способ убедиться, что функция выполняется полностью до перенаправления пользователя?Как убедиться, что функция в PHP заканчивается, прежде чем пользователь нажимает на другую ссылку?

Моя первая идея состояла в том, чтобы создать поток и сделать поток компиляцией. И пока поток запущен, я могу показать пользователю новое представление. Но, видимо, вы не можете запустить поток в PHP, поэтому я не в курсе.

ответ

1

В PHP нет способа убедиться, что пользователь остается на странице, а что-то завершает.

Ваш лучший выбор - передать свою работу по компиляции в фоновый процесс. Один из способов сделать это - вставить строку в базу данных с информацией, которую вы хотите обработать. Вы можете сразу показать пользователю сообщение о том, что его задание было помещено в очередь, и оно будет обработано в ближайшее время. Затем настройте Cron, чтобы извлечь информацию из базы данных и сделать запрос к вашему API. Когда все будет сделано, вы снова обновите базу данных, чтобы указать, что работа выполнена. Если это особенно длительный процесс, вы можете отправить по электронной почте пользователю, что их работа завершена, поэтому им не нужно сидеть и ждать.

В целом ваша цель - дать пользователю хорошую обратную связь о том, что происходит, в то время как вы не выполняете свой процесс так, чтобы пользователь мог уйти от него.