Всем привет. Вот у меня вопрос. Пишу скрипт для автоматизации выполнения детализации из netflow. Вот кусок: PHP: <?php $flowfile = '/usr/local/netflow/logs/netflow.txt'; //put k papke i failu s logom newtflow $ot = $_POST['ot']; //vremya starta $do = $_POST['do']; //vremya okonchaniya $contract = $_POST['contract']; //nomer dogovora $command = escapeshellcmd('/usr/local/get_trafic_use.pl '.$contract.' '.$ot.' '.$do); @$exec = system($command, $msgcode); //???????? if(!$exec) exit('Invalid command'); if($msgcode == 2) exit('Error executing command'); ?> Значит, дело в чем - скрипт должен выполнять команду system(). Он запускает perl скрипт, который эту детализацию расшифровывает. Далее там создаются файлы, упаковывается в гзип и отсылается на почту. Так вот задача - не дожидаясь завершения system() (те, пусть там этот скрипт выполняется на заднем фоне), нужно перенаправить пользователя на другую страничку НЕ ПРЕРЫВАЯ работу скрипта. Зачем это делается - затем, что создание детализации, это дело муторное и долгое - иногда больше получаса. Далее, с file_exists я уже разберусь. Нужно как-то не завершая работу system() перейти на другую страничку.. Есть у кого-нибудь соображения?
Нет, ну можно, конечно, и не только ф-ей system(). Если есть какой-то другой вариант, я с удовольствием им воспользуюсь....
http://lv.php.net/manual/ru/function.system.php Т.е. Код (Text): system('netstat > /dev/null'); Не будет дожидаться, пока выполниться netstat (а оно может весьма долго выполнятся на загруженном WEB сервере, вплоть до 7-10 секунд).
ТЕ Код (Text): system('/usr/local/onyma/get_trafic_use.pl 8959 399203 992039 > /dev/null'); Так? Пробелы между словами в команде экранировать не нужно?
а зачем их экранировать? поработайте в linux консоли и всё встанет на свои места, т.к. по сути вы выполняете команду в консоли, только и всего.
эм, вообще-то консоль при этом не освобождается, соответственно и скрипт будет висеть а вот так вот уже лучше ) Код (Text): netstat >& /dev/null &