Hallo, ich habe ein kleines Problem.
Ich betreibe zur Zeit zwei VServer mit Asterisk. Auf einem läuft die Version 1.4.? und auf dem anderen 1.6.2.1
Aus dem Dialplan heraus wird ein PHP-AGI-Script gestartet - dies funktioniert soweit ganz gut.
Allerdings ist der STDIN bei dem Script auf dem Asterisk 1.6.2.1 flüchtig.
Hier mal der Code:
Das sleep (warten für x Sekunden) ist nur zum testen. Steht da "0" drin funktioniert alles gut, wenn ich da 'ne 1 rein schreibe, fehlt die erste Hälfte der agi-vars wenn ich ne 2 rein schreibe fehlen fast alle agi-vars und wenn ich da 'ne 3 reinschreibe, dann gibt es gar keine agi-vars und das Script hängt an dem "fgets".
Das heißt, je mehr sich der Anfang des Scriptes verzögert, desto weniger habe ich von den agi-vars.
Nun könnte man ja sagen: "Warum liest du die nicht als erstes ein?" Nun, dies tue ich bereits, leider ist es so, wenn das Script nach einer Bestimmten Zeit das erste Mal aufgerufen wird, dann verzögert sich das ganze und mir fehlen die Variablen. Heißt also, wenn ich morgens das erste mal die Nummer anrufe, chrasht das Script, wenn ich dann auflege und dann gleich nochmal anrufe, läufts - auch nach einer Stunde noch - auch nach 2 - wenn ich aber 4 Stunden (besser 6) nicht angerufen habe, chrasht es wieder.
Interessant ist, auf der Anderen Maschine habe ich Asterisk 1.4 am laufen und dort besteht das Problem nicht. Das heißt, es ist egal ob ich da ein Sleep von 3 Sekunden oder von 10 Sekunden einbaue, der Inhalt der Pipe (des Streams) steht mir so lange zur Verfügung, bis ich ihn gelesen habe.
Meine Frage nun, ist der Fehler bekannt? Liegts an PHP oder Asterisk? Oder ist es eine Konfig-Einstellung?
Für sinnvolle Ratschläge bin ich dankbar.
Gruß Raph
(PS: SuFu wurde benutzt, zum Thama AGI-vars gibt es 1001 Beiträge aber irgendwie habe ich keins gefunden, was auf genau DIESES Problem passt)
Ich betreibe zur Zeit zwei VServer mit Asterisk. Auf einem läuft die Version 1.4.? und auf dem anderen 1.6.2.1
Aus dem Dialplan heraus wird ein PHP-AGI-Script gestartet - dies funktioniert soweit ganz gut.
Allerdings ist der STDIN bei dem Script auf dem Asterisk 1.6.2.1 flüchtig.
Hier mal der Code:
Code:
#!/usr/bin/php -q
<?php
{
// Logfile
$errorfile = "/var/lib/asterisk/agi-bin/script_12.log";
$log = 0; // soll geloggt werden? 1 = ja 0 = nein
...
$stdin = fopen( 'php://stdin', 'r' );
$stdout = fopen( 'php://stdout', 'w' );
if($log) $stdlog = fopen($errorfile, 'w' );
if($log) fputs( $stdlog, "---Start---\n" );
[COLOR="Red"]sleep(1);[/COLOR]
while ( !feof($stdin) )
{
$temp = fgets( $stdin );
if($log) fputs( $stdlog, $temp );
// Strip off any new-line characters
$temp = str_replace( "\n", "", $temp );
$s = explode( ":", $temp );
$agivar[$s[0]] = trim( $s[1] );
if ( ( $temp == "") || ($temp == "\n") )
{
break;
}
}
...
}
Das sleep (warten für x Sekunden) ist nur zum testen. Steht da "0" drin funktioniert alles gut, wenn ich da 'ne 1 rein schreibe, fehlt die erste Hälfte der agi-vars wenn ich ne 2 rein schreibe fehlen fast alle agi-vars und wenn ich da 'ne 3 reinschreibe, dann gibt es gar keine agi-vars und das Script hängt an dem "fgets".
Das heißt, je mehr sich der Anfang des Scriptes verzögert, desto weniger habe ich von den agi-vars.
Nun könnte man ja sagen: "Warum liest du die nicht als erstes ein?" Nun, dies tue ich bereits, leider ist es so, wenn das Script nach einer Bestimmten Zeit das erste Mal aufgerufen wird, dann verzögert sich das ganze und mir fehlen die Variablen. Heißt also, wenn ich morgens das erste mal die Nummer anrufe, chrasht das Script, wenn ich dann auflege und dann gleich nochmal anrufe, läufts - auch nach einer Stunde noch - auch nach 2 - wenn ich aber 4 Stunden (besser 6) nicht angerufen habe, chrasht es wieder.
Interessant ist, auf der Anderen Maschine habe ich Asterisk 1.4 am laufen und dort besteht das Problem nicht. Das heißt, es ist egal ob ich da ein Sleep von 3 Sekunden oder von 10 Sekunden einbaue, der Inhalt der Pipe (des Streams) steht mir so lange zur Verfügung, bis ich ihn gelesen habe.
Meine Frage nun, ist der Fehler bekannt? Liegts an PHP oder Asterisk? Oder ist es eine Konfig-Einstellung?
Für sinnvolle Ratschläge bin ich dankbar.
Gruß Raph
(PS: SuFu wurde benutzt, zum Thama AGI-vars gibt es 1001 Beiträge aber irgendwie habe ich keins gefunden, was auf genau DIESES Problem passt)