Рекурсия в phpagi скрипте сервера звездочек

Я использую это в файле расширения, который выполняет мой скрипт phpagi: —

exten => s,n,Read(NUMBER,,4)
exten => s,n,agi(a.php,${CALLERID(num)},${NUMBER})

И это в моем сценарии phpagi:

#!/usr/bin/php -q
<?php
require('phpagi.php');
$agi = new AGI();
$NUMBER = $argv[1];
$SSnNUMBER = $argv[2];
------Some Processing----------
$ttresult = $agi->get_data("beep",30000,4);
$ttssn = $ttresult['result'];
$agi->say_digits($ttssn);
$agi->exec("AGI","a.php",$agi->request['agi_callerid'],"$ttssn");
?>

Вы можете видеть, что я использую рекурсию в скрипте phpagi, но каждый раз это не получается. В скрипте CLI есть ошибка: —

Скрипт AGI a.php завершен, вернув 4

0

Решение

Вы не можете начать AGI внутри AGI.

Причина: AGI — простой интерфейс stdin / stdout (см. Документацию)

Итак, сначала AGI соединяется со звездочкой, читает информацию из STDIN, отправляет в STDOUT.

Как вы ожидаете запустить скрипт внутри него?

Вы можете просто использовать системный вызов php exec, но вам нужно позаботиться об инициализации AGI (он уже используется вашим скриптом) и об отправке stdin / stdout этому процессу (с использованием каналов или каким-либо другим способом).

В вашем случае вы также можете использовать GOTO и установить переменные для нового скрипта.

exten => s,n(repeat),agi(a.php,${CALLERID(num)},${NUMBER})
exten => s,n,GotoIF($[ "${REPEAT}" == "YES" ]?repeat)

Измените свой сценарий на

#!/usr/bin/php -q
<?php
require('phpagi.php');
$agi = new AGI();
$NUMBER = $argv[1];
$SSnNUMBER = $argv[2];
------Some Processing----------
$ttresult = $agi->get_data("beep",30000,4);
$ttssn = $ttresult['result'];
$agi->say_digits($ttssn);
$agi->set_variable("NUMBER","$ttssn");
$agi->set_variable("REPEAT","YES");
?>
0

Другие решения

Других решений пока нет …