[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Php и фоновый режим
Хиросим
Всем привет.
Угрохал целый день на вроде бы банальную задачу, сдался, прошу помощи.
Ситуация - пользователь создает на сайте новый пост, после создания его редиректит на страницу этого поста, а параллельно хотелось бы пустить емейл-рассылку оповещений по подписчикам. Вот с этим "параллельно" большие проблемы. В синхронном режиме не хотелось бы, и адресов много и задержки стоят, процесс редиректа затянется. Крон тоже пока не хочу пользовать. Маюсь с асинхронными вариантами, но пока ничего не работает.
Развлекаюсь я на Денвере под виндой.
header('Location: /newpost.php?id='.$_GET['new_id']); 
exec('php /mailing.php > /daemon.txt &');

Данная конструкция отрабатывается но не в фоне, редирект ждет окончания рассылки и совершенно не понятно как передать id нового поста в mailing.php
Опять же под линуксом (на сколько я понял) придется изменить строку для exec, а хочется ведь универсальности.
ignore_user_abort(true) 
header('Location: /newpost.php?id='.$_GET['new_id']);
//тут расылка

Это тоже не прокатывает (ждет окончания рассылки)

Выгуглил такую конструкцию, в данном виде не работает, разобраться с флушами не смог:
ignore_user_abort(false);
if (ob_get_level() == 0)
ob_start();
header('Location: /newpost.php?id='.$_GET['new_id']);
ob_flush();
flush();
//тут расылка
ob_end_flush();

Как то не верится, что универсального варианта на php нет, помогите у кого идеи есть.
r3al
во-первых: чем ajax не асинхронность?
во-вторых: тут я могу ошибаться, но все же, exec('php blablabla').. у тебя че php.exe прям в %windir% лежит или в папке со скриптом? О_О это я к тому что пути надо до всего прописать
с флашами все просто:

if (ob_get_level() == 0) # проверяет на наличие даты в буфере
ob_start(); # включает буферизацию и записывает все выводы в буфер
ob_flush(); # очистить буфер (показать содержимое, равносильно echo/print без буферизации)
flush(); # тоже что и предъидущее
ob_end_flush(); # тоже что и предъидущее + отключает буферизацию
Хиросим
С аякса я начал, но что то не срослось, от того и пришлось ковырять php варианты. Делал вот так
$(function() 
{
$.post('/mailing.php', {new_item:<?= $id ?>});
});

Денвер эмулировал отправку от двух до пяти писем и намертво залипал.

Пути в exec прописаны ровно,это я для краткости их урезал, скрипт отрабатывается полностью и в daemon.txt резуль выводит, вот только синхронно несмотря на амперсанд в конце команды.

Про фруши я так и представлял, но не понимаю зачем мутить буферизацию, чем третий код трушнее второго? Да и не сваривается что значит запихнуть результат выполнения header в буфер.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.