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()
Version 1.2, November 2002
Neue Version verfügbar
Sie betrachten gerade die alte Version des Buches (Version 1.0). Wir empfehlen Ihnen für Asterisk 1.4 und 1.6 die neue Version des Buches.
Asterisk-Tag 2008
Lernen Sie Mark Spencer (den Erfinder von Asterisk) kennen! Viele Vorträge, Case-Studies und Workshops rund um das Thema VoIP. Asterisk-Tag.org