>>>подскажите как правильно запустить паралельный скрипт для выполнения, например рассылки почты, после
>>>нажатия на кнопку (например при добавлении новой темы в форуме)
>>>тоесть чтобы пользователь не ждал пока выполнится скрипт рассылки, а этого даже
>>>не заметил по времени.
>>
>>
>>вот так, например:
>><?
>>passthru("(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1");
>>?>
>>
>>можно так же в script.php вписать интерпретатор в начало:
>>
>>#!/path/to/php
>><?
>>//script here
>>?>
>>
>>тогда можно будет сделать вот так:
>><?
>>passthru("(/path/to/script.php & ) >> /dev/null 2>&1");
>>?>
>>
>>Перенаправление вывода нужно для того, чтобы скрипт, запустивший passthru, не ждал окончания
>>его работы.
>
>
>Я извеняюсь за возможно глупый вопрос, но что значит в срочке passthru("(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1");
>
>"-f" и ">> /dev/null 2>&1" - это чтобы уже полностю разобраться с этим вопросом и понимать как и что работаетOk.
читаем про passthru: http://www.php.net/manual/en/function.passthru.php
видим, что passthru выполняет заданную в параметрах системную команду.
смотрим, как из консоли запустить на выполнение php скрипт:
смотрим man php , видим такую строчку
php [options] [ −f ] file [[−−] args...]
что означает, что если нужно выполнить php скрипт, то запускать нужно вот так:
#/path/to/php -f /path/to/script.php
Это было насчет "-f". Надеюсь, что ответил на первую половину вопроса.
Дальше. Определились, что будем выполнять вот такую команду: /path/to/php -f /path/to/script.php
Дальше. Читаем ман по passthru: http://www.php.net/manual/en/function.passthru.php
If you start a program using this function and want to leave it running in the background, you have to make sure that the output of that program is redirected to a file or some other output stream or else PHP will hang until the execution of the program ends.
Что в кратце означает, что passthru не будет ждать окончания выполнения, если отправить процесс в бэкграунд и вывод этого процесса перенаправлен в файл или поток.
В бэкграунд выполнение скрипта можно отправить добавлением амперсанда в конце: /path/to/php -f /path/to/script.php &
Кроме того, нам еще нужно перенаправить вывод. Читаем man sh секцию REDIRECTION (не буду ее здесь приводить) и приходим к такуму решению:
перенаправим STDOUT и STDERR в /dev/null, так как на совсем не интересно, что там выводит этот, запускаемый в бэкграунде, скрипт. Получаем:
(/path/to/php -f /path/to/script.php & ) >> /dev/null 2>&1
Если вывод все-таки интересен, то можно перенаправлял вывод в какой-нить файл:
(/path/to/php -f /path/to/script.php & ) >> /path/to/script.log 2>&1
Таким образом ">> /dev/null 2>&1" означает перенаправление STDOUT и STDERR в /dev/null