.titleBar { margin-bottom: 5px!important; }

Kurze Frage zu PHP mit Bitte um kurze Antwort

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von betateilchen, 9 Sep. 2004.

  1. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    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.
     
  2. otaku42

    otaku42 Admin-Team

    Registriert seit:
    26 März 2004
    Beiträge:
    1,670
    Zustimmungen:
    0
    Punkte für Erfolge:
    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.
     
  3. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    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.
     
  4. fabe

    fabe Neuer User

    Registriert seit:
    13 Juli 2004
    Beiträge:
    72
    Zustimmungen:
    0
    Punkte für Erfolge:
    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;
    
    ?>
    
     
  5. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Danke für die Antworten. Thema erledigt.
     
  6. Christoph

    Christoph IPPF-Promi

    Registriert seit:
    20 Feb. 2004
    Beiträge:
    6,229
    Zustimmungen:
    5
    Punkte für Erfolge:
    38
    Ort:
    Düsseldorf
    @ beta:

    Ja, und wie? Durch die Tipps hier oder andere Lösung?
     
  7. schakal2k

    schakal2k Mitglied

    Registriert seit:
    16 Aug. 2004
    Beiträge:
    309
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    @beta

    Was hast du denn nun damit realisiert?

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

    otaku42 Admin-Team

    Registriert seit:
    26 März 2004
    Beiträge:
    1,670
    Zustimmungen:
    0
    Punkte für Erfolge:
    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.
     
  9. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    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:
     
  10. otaku42

    otaku42 Admin-Team

    Registriert seit:
    26 März 2004
    Beiträge:
    1,670
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hmm... was ist an AGI schwer durchschaubar? Funktioniert vergleichbar zu CGI. Aber gut, jeder wie er mag :)
     
  11. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    @otaku

    genau - und CGI habe ich auch nie kapiert :mrgreen:
     
  12. otaku42

    otaku42 Admin-Team

    Registriert seit:
    26 März 2004
    Beiträge:
    1,670
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Mussu vernunftig Dokumendasion finden :)