|
|
|
|
|
для: TetRiska
(20.02.2014 в 17:00)
| | Вы можете сохранить идентификатор сессии и по нему восстановить её в мониторном скрипте. Просто надо понимать, что одновременно с одной и той же сессией может работать только один скрипт. | |
|
|
|
|
|
|
|
для: Саня
(20.02.2014 в 15:15)
| | чего-то не совсем пойму. если закрыть сессию в скрипте который запускает фоновый скрипт рассылки, то в этом фоновом скрипте я то смогу открыть новую сессию и туда писать данные, но я не смогу выловить эту сессию в скрипте, который будет мониторить эту статистику | |
|
|
|
|
|
|
|
для: TetRiska
(20.02.2014 в 12:28)
| | Да как угодно! Хоть сессиями, хоть ещё как. | |
|
|
|
|
|
|
|
для: Саня
(20.02.2014 в 10:35)
| | А как тогда мониторить отправку? Хотел писать в сессии, т.к. не хотел затрагивать БД или файлы. Писалась бы статистика в сессию в цикле отправки. | |
|
|
|
|
|
|
|
для: TetRiska
(18.02.2014 в 21:28)
| | Закрывать сессию надо чтобы избежать возможного дедлока. Стандартный файловый обработчик сессии накладывает эксклюзивную блокировку на файл сессии при старте. Поэтому при запуске нового скрипта он будет ожидать освобождения блокировки, а скрипт, его запустивший, будет ожидать выполнение дочерней программы. Вот и дедлок. Причём не зависящий от количество операторов. | |
|
|
|
|
|
|
|
для: Саня
(18.02.2014 в 19:55)
| | если не сложно, ответьте на вопрос, спасибо | |
|
|
|
|
|
|
|
для: Саня
(18.02.2014 в 19:55)
| | понял, тогда лучше буду использовать промежуточную таблицу и передавать лишь ИД.
верно составил отправку без --, т.к. передается только 1 параметр - число?
exec('/usr/bin/php sendMessage.php '.$id.' > /dev/null &');
|
> Перед вызовом exec нужно закрыть сессию функцией session_write_close();
зачем? мне ведь нужно в сессию писать статистику по отправленным письмам, дабы ее в реальном времени сразу отображать оператору
> Можно схлопотать дедлок.
письма рассылать будут 2 оператора, каждый из операторов начав отправку, будет ожидать окончания ее, после чего сможет приступить к следующей отправке | |
|
|
|
|
|
|
|
для: TetRiska
(18.02.2014 в 03:34)
| | 1. Это специальный аргумент, указывающий что аргументы интерпретатора закончились и начинаются аргументы, передаваемые в сам скрипт. Таким образом можно безопасно передавать в скрипт любые агрументы, не боясь, что они будут восприняты как аргументы php интерпретатора.
2. Конечно какая-то обработка данных нужна, иначе появляется потенциальная возможность провести shell injection.
Например в descr записать:
И получится не очень приятно:
/usr/bin/php sendMessage.php -- "cid=43&bid=1&reply=y&desc="; rm -rf . > /dev/null &
|
Лучше да, поместить во внешнее хранилище (mysql, файл, и т.п.).
Перед вызовом exec нужно закрыть сессию функцией session_write_close();
Вообще это не очень хорошая идея - использовать сессии. Можно схлопотать дедлок. | |
|
|
|
|
|
|
|
для: Саня
(17.02.2014 в 15:41)
| | примерно так я сделал из примеров:
exec('/usr/bin/php sendMessage.php -- "cid=43&bid=1&reply=y&desc=Привет "Вася"" > /dev/null &');
|
1. только не пойму зачем -- перед параметрами
2. передаваемые параметры никакими функциями проверки не нужно оборачивать? Т.к. будут передаваться числа, текст с " < и тд. Или все же надежней перед запуском скрипта в фоне, записать все данные в промежуточную таблицу и передать лишь ид?
Сейчас пробую записать сессию в скрипте sendMessage.php и потом получить ее на сайте, ничего не выходит, сессия полностью сбрасывается, разве я не верно делаю?
exec('/usr/bin/php sendMessage.php -- "'.session_id().'" > /dev/null &');
|
в sendMessage.php:
session_id($argv[2]);
session_start();
$_SESSION['start'] = 1;
|
| |
|
|
|
|
|
|
|
для: TetRiska
(16.02.2014 в 15:51)
| | Аргументами:
/usr/bin/php ***/requests/sendMessage.php arg1 arg2 arg3 > /dev/null &
|
Агрументы будут доступны в глобальной переменной $argv. | |
|
|
|
|