2013-07-11 2 views
0

Я пытаюсь настроить цикл скрипта php 10 раз, когда вызов выполнен, но по какой-то причине он выполняется только один раз, а затем он зависает/умирает/выходит. Любой вид проницательности, который я могу получить, очень ценится.asterisk agi loop не работает

for ($i=1; $i<=10; $i++) 
ob_implicit_flush(true); 
require_once('phpagi.php'); 

$agi = new AGI(); 
$agi->answer(); 


    list ($id,$number,$callerid) = mysql_fetch_row(mysql_query("select `called`,`tollfree`,`callerid` from `avotfmaster`.`cdr` where `pbx`='0' order by `mins` desc, rand() limit 1",$xb)); 

if($id) { 

$agi->set_callerid("$callerid"); 
$agi->exec('DIAL',"SIP/31282200*[email protected],40,L(60000)"); 


$gwopt_dtmf = $agi->get_data('confirm', 3000, 1); 

if($gwopt_dtmf['result']==1) 
     { 
mysql_query("UPDATE `avotfmaster`.`cdr` SET `pbx`='1' WHERE `number`='$number'",$xb); 


     } else { 
     mysql_query("UPDATE `avotfmaster`.`cdr` SET `pbx`='2' WHERE `number`='$number'",$xb); 
$agi->verbose("I will go ahead and mark this number already scanned and tested"); 

} 

} 
} 
+0

Я заметил, что если я уменьшить время разговора для команды набора, чем цикл работает отлично ... если что-то минута или больше он убивает мою петлю. – thevoipman

ответ

0

Просьба ознакомиться с документацией для Dial.

Если вам нужен контроль ПОСЛЕ этой функции, вам нужно добавить ключ «g» к параметрам.

+0

Я добавил: g после таймаута, и он все еще не работает: $ agi-> exec ('DIAL', "SIP/31282200 * $ number @ sip.abc.com, 40, L (60000), g") ; – thevoipman

+0

Потому что вы читаете документы плохо. вам нужно добавить g в том же параметре, то есть перед L. Вам не нужно добавлять дополнительные запятые. – arheops

+0

Я делаю цикл, не пытаясь, чтобы звездочка следила за тем, что будет дальше в моем скрипте agi .... – thevoipman

1

Неплохо называть такие вещи, как Dial, в основном все, что связывает ваш скрипт с неопределенным (или, возможно, большим) временем, из скрипта PHPAGI.

Системные ресурсы не освобождаются до завершения сценария. По этой причине в PHP существует максимальная продолжительность выполнения сценария выполнения сценария, я уверен, ваш сценарий работает дольше, чем допустимый по умолчанию период времени (по большинству вызовов), и сценарий заканчивается.

Смотрите этот ответ подсказки: PHP set_time_limit() does not work, safemode is off

+0

это очень хороший момент - я постараюсь «разрешить» мое время выполнения скрипта php дольше ... – thevoipman

+0

Если производительность вообще не проблема (я не уверен, для чего используется ваш сценарий), тогда было бы лучше использовать скрипт для получения нужного числа и т. Д., Которые вам нужны, и передать его обратно на диалплан в качестве переменной и сделайте циферблат оттуда, соберите свой ответ и передайте его (или некоторому другому) скрипту для обработки. Вы можете использовать переменную и передавать ее назад и вперед для счетчика, а также отслеживать ваши итерации. Как указано: я не знаю, является ли производительность проблемой или нет, если это не так, не беспокойтесь об этом :-) –

+0

Забыл упомянуть: если вы сделаете это, как описано выше, тогда значение time_limit не будет любой вопрос. –