цикл в php-скрипте выполняется звездочкой - PullRequest
0 голосов
/ 10 декабря 2011

Моя идея заключается в том, что я хочу выполнить PHP-скрипт в абонентской группе Asterisk. Он работает как демон / процесс, который получает значения от Asterisk и что-то с ними делает. Но когда я выполняю команду system (php script.php) , Asterisk останавливается и не переходит к следующему шагу абонентской группы. Причина в том, что, я полагаю, script.php имеет внутри цикл "while (1) {...}", и Asterisk ожидает его окончания ...

Не могли бы вы мне помочь и показать какое-то решение, как запустить внешний скрипт "php-loop" и выполнить шаги extensions.conf одновременно?

extensions.conf

[internal]
exten => 100,1,Set(CallerId=${CALLERID(num)}) ;get number
exten => 100,n,System(php script.php ${CallerId}) ;execute php script with argv[1]
;now the script.php should run at the background and below part
;should be execute like in ordinary context
exten => 100,n,Dial(SIP/100)
exten => 100,n,Hangup()

script.php

#!/usr/bin/php
<?php
  $num = argv[1]; //the value from [internal] in the extensions.conf
  while(1) { //start the loop
  /*
   * do something in the infinite loop and END it IF something happen
   * e.g. $someVal == 9999;
  */
  }
?>

Итак, как вы можете видеть, идея проста: запустите скрипт php с помощью 'loop', а тем временем сделайте что-нибудь еще из нижних шагов в [внутреннем] контексте. Как справиться с этим? Поскольку Asterisk ожидает окончания выполнения script.php , а затем он переходит к следующему шагу.

Спасибо!

1 Ответ

0 голосов
/ 22 декабря 2011

Аги в Звездочке блокируют.Выполнение диалплана будет ждать, пока не прекратится аги, прежде чем продолжить.Если вы хотите, чтобы ваши agi работали независимо от плана набора, посмотрите на Fastagi, который является agi deamon, к которому вы подключаетесь через сокет (он долго действует, независимо от Asterisk и не зависит от него).Просто не забудьте установить $ {AGISIGHUP} = no в своей диалплане ДО ДО вызова agi.

Примеры AGI см. здесь и ознакомьтесь с некоторыми скриптами, включенными в FreePBX's много модулей.

...