PHP ist zu einer der populärsten Programmiersprachen für
Webapplikationen geworden.[144] Da man aber aktuelle PHP-Versionen auch für den Aufruf von
Programmen auf der Kommandozeile benutzen kann, ist PHP eine für
AGI-Skripte gut geeignete Sprache. Als Beispiel benutzen wir ein kleines
PHP-Programm (lotto.php
), das 6 zufällige Zahlen von
1 bis 49 auswählt und dem Anrufer vorspricht. Die Beschreibung der
einzelnen Schritte erfolgt im Quellcode.
#!/usr/bin/php -q <?php # Sicherheitseinstellung. Das Skript laeuft nicht # laenger als 8 Sekunden. ################################################# set_time_limit(8); # Output Buffer wird deaktiviert # Alternativ könnten wir nach jeder Ausgabe # fflush(STDOUT); aufrufen. ################################################# ob_implicit_flush(); # PHP Error Reporting wird deaktiviert ################################################# error_reporting(0); # Fuer die Komunikation mit Asterisk benoetigen # wir STDIN und STDOUT Filehandles ################################################# if (!defined('STDIN')) define('STDIN' , fopen('php://stdin' , 'r')); if (!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w')); if (!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w')); # Die von Asterisk uebergebenen Variablen und # Werte werden ausgelesen und im Array $agi # gespeichert. ################################################# $agi = array(); while (!feof(STDIN)) { $tmp = trim(fgets(STDIN,4096)); if (($tmp == '') || ($tmp == "\n")) break; $var1 = split(':',$tmp); $name = str_replace('agi_','',$var1[0]); $agi[$name] = trim($var1[1]); } # Ein Array mit 6 zufaelligen und nicht # doppelten Zahlen von 1 bis 49 wird generiert. ################################################# $Lottozahlen = array(); do { $Zahl = rand(1,49); if (array_search($Zahl, $Lottozahlen) == FALSE) { $Lottozahlen[] = $Zahl; } } while (count($Lottozahlen) < 6); # Vor der ersten Ansage wird eine Sekunde # gewartet. ################################################# fwrite(STDOUT,"EXEC Wait 1 \"\"\n"); fflush(STDOUT); # Die Zahlen werden nacheinander vorgelesen. # Zwischen den einzelnen Zahlen gibt es immer # eine Pause von einer Sekunde. ################################################# foreach ($Lottozahlen as $value) { fwrite(STDOUT,"SAY NUMBER $value \"\"\n"); fflush(STDOUT); fwrite(STDOUT,"EXEC Wait 1 \"\"\n"); fflush(STDOUT); } ?>
Das Programm lotto.php
muss im
Verzeichnis /var/lib/asterisk/agi-bin/
abgespeichert
werden und wird in der extensions.conf
wie folgt
aufgerufen:
exten => 1234,1,Answer() exten => 1234,2,AGI(lotto.php) exten => 1234,3,Hangup()