Kurze Frage zu PHP mit Bitte um kurze Antwort

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
Nach vielem Lesen auf voip-info.org und Suchen in Google bin ich immer noch ratlos.

Kann mir bitte jemand in 3 Sätzen versuchen zu erklären, wie ich aus Asterisk prinzipiell ein PHP Skript ausführen kann ?

Danke.
 

otaku42

Admin-Team
Mitglied seit
26 Mrz 2004
Beiträge
1,670
Punkte für Reaktionen
0
Punkte
0
Grundsaetzlich kannst Du alles aus Asterisk heraus ausfuehren, wenn Du es als AGI-Skript auslegst:

exten => <Nummer>,<Prio>,AGI(meinphpscript.php)

Gesucht wird das Skript ueblicherweise in /var/lib/asterisk/agi-bin, Du kannst aber meines Wissens auch einen vollen Pfad angeben. Es sollte als ausfuehrbar gekennzeichnet sein (beispielsweise chmod a+x meinphpscript.php).

Das PHP-Skript muss dann als erste Zeile enthalten:
#!/pfad/zum/php-interpreter
Ggf. kannst Du noch Optionen hinten anhaengen.

Den Rest erklaert http://phpagi.sourceforge.net/, wo Du dann auch gleich noch eine Bibliothek findest, mit der das schreiben von AGI-Skripten mit PHP erleichtert wird.

hth.
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
Danke für die Antowrt.
Nun bin ich auch schon soweit, daß das Skript aus dem Dialplan heraus ausgeführt wird - allerdings "passiert nix" - d.h. das Skript wird mit "... return 0" beendet und das wars. Ich habe nirgendwo einen Log-Eintrag gefunden, in dem ich finden könnte, ob das Skript überhaupt irgendwas macht oder z.B. eine Fehlerausgabe produziert.

Naja - wird wohl noch einige Nächte Exprerimentierens brauchen.
 

fabe

Neuer User
Mitglied seit
13 Jul 2004
Beiträge
72
Punkte für Reaktionen
0
Punkte
0
hast du korrekt stdin & stdout geöffnet und die werte korrekt ausgelesen?
hier mal ein beispiel von meinem standard agi das ich verwende (die execute function is von mir.. wesentlich schlanker als so ne klasse)

Code:
#!/home/php/bin/php -q
<?php

function execute($command) {
	GLOBAL $in, $out;
	fputs($out, $command . " \n");
	fflush($out);
	$data = fgets($in, 4096);
	if (preg_match("°^([0-9]{1,3}) (.*)°", $data, $matches)) {
		if (preg_match('°^result=([0-9a-zA-Z]*)( ?\((.*)\))?$°', $matches[2], $match)) {
			$arr['code'] = $matches[1];
			$arr['result'] = $match[1];
			if (isset($match[3]) && $match[3])
				$arr['data'] = $match[3];
			return $arr;
		} else return 0;
	} else return -1;
}

ob_implicit_flush(true);
set_time_limit(0);
$out = fopen("php://stdout", "w");
$in = fopen("php://stdin", "r");
//$log = fopen("/tmp/agi.log", "w");
while (!feof($in)) {
	$temp = str_replace("\n","",fgets($in,4096));
	$s = split(":",$temp);
	if (!isset($s[1])) $s[1] = "";
	$agi[str_replace("agi_","",$s[0])] = trim($s[1]);
	if (($temp == "") || ($temp == "\n")) {
		break;
	}
}

execute("STREAM FILE whatever/whatever ''");

fclose($out);
fclose($in);
//fclose($log);
exit;

?>
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
Danke für die Antworten. Thema erledigt.
 

schakal2k

Mitglied
Mitglied seit
16 Aug 2004
Beiträge
309
Punkte für Reaktionen
0
Punkte
16
@beta

Was hast du denn nun damit realisiert?

(Ich denke, ich bin nicht der einzige, den das interessiert, oder?)
 

otaku42

Admin-Team
Mitglied seit
26 Mrz 2004
Beiträge
1,670
Punkte für Reaktionen
0
Punkte
0
Die Loesung des Problems wird wohl der Tip gewesen sein, den fabe geposted hat. In einem AGI-Skript muss erst die Ausgabe von Asterisk lesen, bevor der erste Befehl ausgefuehrt wird (sprich: alles von stdin lesen). Nach jedem ausgefuehrten Befehl muss ebenfalls wieder stdin komplett gelesen werden. Nur dann funktioniert der Kram.
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
nein - ich habe ein völlig andere Lösung eingebaut. Ich wollte einfach was (für mein eigenes Netzwerk spezifisches) testen und es war letztendlich für mcih einfacher, eine eigene app in C zu programmieren als mich in dieses schwer durchschaubare AGI-Prinzip einzuarbeiten.

Wie gesagt - nix was für die Allgemeinheit von "Nutzen" wäre und bei mir ist das auch schon wieder raus - es war nur ein Test einer "sinnlosen" Anwendung :mrgreen:
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
@otaku

was ist an AGI schwer durchschaubar? Funktioniert vergleichbar zu CGI
genau - und CGI habe ich auch nie kapiert :mrgreen:
 

3CX PBX - GRATIS
Linux / Win / Cloud

Neueste Beiträge

Statistik des Forums

Themen
233,338
Beiträge
2,032,968
Mitglieder
351,904
Neuestes Mitglied
Giraffe75