PHP脚本中的循环以星号执行



我的想法是,我想在Asterisk的拨号计划执行一个PHP脚本。它的工作原理就像一个守护进程/进程,从Asterisk获取值并对它们进行处理。但是当我执行系统(php script.php)命令时,Asterisk停止并且不转到下一个拨号计划步骤。原因是,我相信,script.php有"while(1){…}"循环内部,Asterisk等待结束…

你能帮我,告诉我一些解决方案如何运行外部"php-loop"脚本,并通过扩展。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;
  */
  }
?>

所以,正如你所看到的,这个想法很简单:用'loop'启动php脚本,同时在[internal]上下文中从底部的步骤执行其他操作。如何处理?因为Asterisk等待script.php执行结束,然后进入下一步。

谢谢!

星号中的Agi正在阻塞。Dialplan执行将等到agi死亡后再继续。如果你想让你的agi运行,不管Dialplan,看看Fastagi,这是一个agi守护进程,你通过一个套接字连接到(它的长寿,无论和独立的Asterisk)。在调用agi之前,不要忘记在dialplan中设置${AGISIGHUP}=no。

AGI的示例见这里,并查看FreePBX的许多模块中包含的一些脚本。

相关内容

  • 没有找到相关文章

最新更新