php脚本中的循环由星号执行

时间:2011-12-10 17:29:15

标签: php while-loop asterisk

我的想法是我想在Asterisk的拨号方案中执行PHP脚本。它就像一个deamon / process,它从Asterisk获取值并对它们做一些事情。但是当我执行系统(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;
  */
  }
?>

所以,你可以看到这个想法很简单:用'loop'启动php脚本,同时从[internal]上下文的底部步骤做另外的事情。 怎么处理?因为Asterisk等待 script.php 执行结束,然后他进入下一步。

谢谢!

1 个答案:

答案 0 :(得分:0)

Asterisk的Agi正在阻止。拨号程序执行将等到agi终止后再继续。如果你想让你的agi运行而不管拨号方案,请查看Fastagi,这是一个通过套接字连接的agi守护程序(它的长期生存,无论如何都独立于Asterisk)。在调用agi之前,不要忘记在拨号方案中设置$ {AGISIGHUP} = no。

有关AGI的示例,请参阅here并查看FreePBX's多个模块中包含的一些脚本。