5. PHP

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()


[144] Böse Zungen sprechen auch vom BASIC des 21. Jahrhunderts. ;-)


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

Das gedruckte Buch