...

воскресенье, 22 июня 2014 г.

[recovery mode] FastCGI Finish Request — фоновое выполнения задач в php

Я об этом не нашёл статьи на хабре, по этому решил сделать пост. Ты узнаеш, как можно делать задачи в фоне и не мучить пользователя с ожиданием, например конвертации большого видео.



Как всё у тебя сейчас




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.


Комментариев нет:

Отправить комментарий