Я об этом не нашёл статьи на хабре, по этому решил сделать пост. Ты узнаеш, как можно делать задачи в фоне и не мучить пользователя с ожиданием, например конвертации большого видео.
1. %username% шлёт тебе запрос на сервер.
2. Скрипт смотрит, что тут идёт конвертация видео, отправка сообщения на email(подставить нужное) и ничего не покажет пока работа не закончиться.
Хорошо, хорошо… Давай посмотрим на твой код(я схематически):
Как мы видим пока всё не будет сделано, %username% не увидит ничего. Как нужно сделать:
Если у вас fastcgi измените свой код так:(если нет, бегите удаляйте апач, и поставьте уже nginx + php-fpm)
Казалось бы, всё, но не тут то было… Если ты используеш сессии то нужно их закрывать. Всего-то перед fastcgi_finish_request добавить:
чтоб, было как-то так:
По правилам, юзабилити, нужно ёще оповестить пользователя, если видео загружено и обработано. Так, например делает ВКонтакте.
На этом всё, надеюсь я тебе помог.
Как всё у тебя сейчас
1. %username% шлёт тебе запрос на сервер.
2. Скрипт смотрит, что тут идёт конвертация видео, отправка сообщения на email(подставить нужное) и ничего не покажет пока работа не закончиться.
Кэп, я как бы знаю, что у меня на сервере делается
Хорошо, хорошо… Давай посмотрим на твой код(я схематически):
<?php
$info = $_POST['video[]'];
$file = $_FILE['video_file'];
//здесь конвертируем, загружаем, заносим в базу даных
echo "Спасибо, видео загружено";
Как мы видим пока всё не будет сделано, %username% не увидит ничего. Как нужно сделать:
Если у вас fastcgi измените свой код так:(если нет, бегите удаляйте апач, и поставьте уже nginx + php-fpm)
<?php
$info = $_POST['video[]'];
$file = $_FILE['video_file'];
echo "Спасибо, видео обрабатывается";
fastcgi_finish_request();
//заносим инфу в базу даных, если нужно, конвертируем, потом загружаем и меняем статус в бд на обработано
Сессии
Казалось бы, всё, но не тут то было… Если ты используеш сессии то нужно их закрывать. Всего-то перед fastcgi_finish_request добавить:
session_write_close();
чтоб, было как-то так:
<?php
$info = $_POST['video[]'];
$file = $_FILE['video_file'];
echo "Спасибо, видео обрабатывается";
session_write_close();
fastcgi_finish_request();
//заносим инфу в базу даных, если нужно, конвертируем, потом загружаем и меняем статус в бд на обработано
По правилам, юзабилити, нужно ёще оповестить пользователя, если видео загружено и обработано. Так, например делает ВКонтакте.
Заключения
На этом всё, надеюсь я тебе помог.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий