ich nutze ein Anrufmonitor-Skript für die Fritzbox (Client Socket Port 1012) aus dem Forum welches viele hundert Logfileeinträge erstellt.
Auszug aus dem Log:
02.09.2010 11:16:20.93 | 16139 | DEBUG | VariableManager | [Abfrage_FritzBox\Anrufmonitor\Letzter Anruf] = am 02.09.10 11:16:19 von 03520429667
02.09.2010 11:16:20.93 | 51557 | DEBUG | VariableManager | [Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf] = am 02.09.10 11:16:19 von 03520429667
02.09.2010 11:16:20.93 | 16139 | DEBUG | VariableManager | [Abfrage_FritzBox\Anrufmonitor\Letzter Anruf] = am 02.09.10 11:16:19 von 03520429667
02.09.2010 11:16:20.93 | 51557 | DEBUG | VariableManager | [Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf] = am 02.09.10 11:16:19 von 03520429667
Diese Enträge sind über 250 mal vorhanden!
Ist das normal oder liegt hier ein Fehler im Script (evtl. Registervariable) vor? Ich kann keinen offensichtlichen Fehler finden. Vielleich kann sich das mal ein Profi anschauen.
Danke und Gruß Tommy
<?
// Daten aus Registervariable lesen
$daten = explode(";", $IPS_VALUE);
// Datum/Uhrzeit mit ausgeben
define ("datetime", $daten[0]);
// Nummern ohne Eintrag im öffentlichen Telefonbuch welche aber bekannt sind und übertragen werden ($intern).
// unendlich erweiterbar
$array["Nummer"][1] = "****";
$array["Name"] [1] = "Papa Mobil HTC";
$array["Nummer"][2] = "****";
$array["Name"] [2] = "Papa Mobil 1&1";
$array["Nummer"][3] = "****";
$array["Name"] [3] = "Mama Mobil";
$array["Nummer"][4] = "****";
$array["Name"] [4] = "Tom Mobil";
$array["Nummer"][5] = "xxxxxx";
$array["Name"] [5] = "E";
$array["Nummer"][6] = "xxxxxx";
$array["Name"] [6] = "F";
// Daten aus Registervariable auswerten
switch($daten[1])
{
case "RING":
$Rufnummer = $daten[3];
if(in_array($Rufnummer, $array["Nummer"]))
{
$intern = array_search($Rufnummer, $array["Nummer"]);
SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$array["Name"][$intern]);
SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " von ".$array["Name"][$intern]);
echo "Anruf am ".datetime. " von ".$array["Name"][$intern];
return;
}
else
{
$Rufnummer = SucheNummer($Rufnummer);
}
break;
case "CALL":
$interneNummer = $daten[4];
if ($interneNummer == 738636)
{
$interneNummer = "Büro";
}
else
{
$interneNummer = "Privat";
}
$externeNummer = $daten[5];
SetValue(53935 /*[Abfrage_FritzBox\Anrufmonitor\Ausgehender Anruf]*/, "von ".$interneNummer." zu ".$externeNummer);
break;
case "DISCONNECT":
RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "keiner");
SetValue(53935 /*[Abfrage_FritzBox\Anrufmonitor\Ausgehender Anruf]*/, "keiner");
IPS_RunScript(53821 /*[Abfrage_FritzBox\Anruferliste\Anruferliste\Auslese-Skript]*/);
return;
break;
}
//
function SucheNummer($Rufnummer)
{
$url_orig="http://www.klicktel.de/inverssuche/index/search?method=searchSimple&_dvform_posted=1&phoneNumber=#TEL#";
$url=str_replace("#TEL#","$Rufnummer",$url_orig);
$handle=fopen("$url", "r");
if (!$handle)
{
// error cannot open file
echo("ERROR : CANNOT OPEN URL : '$url'
");
}
$lineNb = 0;
$searchTag0 = 'namelink';
$searchTag01 = '<strong>';
$searchTag02 = '</strong>';
$found = 0 ;
while(!$found && !feof($handle))
{
$lineNb++;
$buffer = fgets($handle);
if (strpos($buffer, $searchTag0) != false)
{
//echo "Name gefunden in Zeile: ".$lineNb."
";
$found = 1 ;
$startLN = strpos($buffer, $searchTag01);
$endeFN = strpos($buffer, $searchTag02) ;
$name = substr($buffer, $startLN+8, $endeFN) ;
$foundName1 = $name;
SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$foundName1);
SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " von ".$foundName1);
}
else
{
$foundName1 = "Unbekannt";
SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$Rufnummer);
SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " von ".$Rufnummer);
}
}
fclose($handle);
$foundName1 = html_entity_decode($foundName1);
return $foundName1;
}
?>
da habe ich mich vielleicht etwas ungenau ausgedrückt. Die 250 Logfileeinträge (oben ist nur ein Auszug der Einträge) beziehen sich auf „pro Anruf“, also jeder Anruf erzeugt weit über 250 Einträge. Ich denke das das Skript so oft aufgerufen wird, aber warum? Das Thema Registerveriable habe ich noch nicht ganz geblickt!
Mein Logfile ist ca. 5 MB groß und dabei laufen noch nicht mal 10 % der Sachen die ich gerne machen möchte.
mit deinem Testskript funktioniert es. Komischerweise geht es jetzt auch mit meinem Skript ohne das ich daran etwas geändert habe. Hast du eine Erklärung dafür?
hab den Fehler gefunden und wollte die Lösung des Problems nicht schuldig bleiben.
Es lag doch am Skript, man sollte doch nicht alles Blind aus dem Forum übernehmen ohne sich die Funktionsweise klar zu machen. Die Ursache für die vielen Log-Einträge lag in der Funktion zu Reverssuche der Telefonnummer. Dort wurde die Variable in einer Schleife viele Male geschrieben.
Anbei das Skript wie es jetzt bei mir läuft, vielleicht kann es ja einer brauchen.
Gruß Tommy
<?
// Daten aus Registervariable lesen
$daten = explode(";", $IPS_VALUE);
// Datum/Uhrzeit mit ausgeben
define ("datetime", $daten[0]);
// Nummern ohne Eintrag im öffentlichen Telefonbuch welche aber bekannt sind und übertragen werden ($intern).
// unendlich erweiterbar
$array["Nummer"][1] = "*";
$array["Name"] [1] = "Papa Mobil HTC";
$array["Nummer"][2] = "*";
$array["Name"] [2] = "Papa Mobil 1&1";
$array["Nummer"][3] = "*";
$array["Name"] [3] = "Mama Mobil";
$array["Nummer"][4] = "*";
$array["Name"] [4] = "Tom Mobil";
$array["Nummer"][5] = "xxxxxx";
$array["Name"] [5] = "E";
$array["Nummer"][6] = "xxxxxx";
$array["Name"] [6] = "F";
// Daten aus Registervariable auswerten
switch($daten[1])
{
case "RING":
$Rufnummer = $daten[3];
if ($Rufnummer <> "")
{
if(in_array($Rufnummer, $array["Nummer"]))
{
$intern = array_search($Rufnummer, $array["Nummer"]);
SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$array["Name"][$intern]);
SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " von ".$array["Name"][$intern]);
echo "Anruf am ".datetime. " von ".$array["Name"][$intern];
RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
return;
}
else
{
$Rufnummer = SucheNummer($Rufnummer); //Rufnummer suchen
SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$Rufnummer);
SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " von ".$Rufnummer);
}
}
else
{
SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " Nummer unterdrückt");
SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " Nummer unterdrückt");
}
RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
break;
case "CALL":
$interneNummer = $daten[4];
if ($interneNummer == 738636)
{
$interneNummer = "Büro";
}
else
{
$interneNummer = "Privat";
}
$externeNummer = $daten[5];
SetValue(53935 /*[Abfrage_FritzBox\Anrufmonitor\Ausgehender Anruf]*/, "von ".$interneNummer." zu ".$externeNummer);
RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
break;
case "DISCONNECT":
RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "keiner");
SetValue(53935 /*[Abfrage_FritzBox\Anrufmonitor\Ausgehender Anruf]*/, "keiner");
IPS_RunScript(53821 /*[Abfrage_FritzBox\Anruferliste\Anruferliste\Auslese-Skript]*/);
// return;
break;
}
//
function SucheNummer($Rufnummer)
{
$url_orig="http://www.klicktel.de/inverssuche/index/search?method=searchSimple&_dvform_posted=1&phoneNumber=#TEL#";
$url=str_replace("#TEL#","$Rufnummer",$url_orig);
$handle=fopen("$url", "r");
if (!$handle)
{
// error cannot open file
echo("ERROR : CANNOT OPEN URL : '$url'
");
}
$lineNb = 0;
$searchTag0 = 'namelink';
$searchTag01 = '<strong>';
$searchTag02 = '</strong>';
$found = 0 ;
while(!$found && !feof($handle))
{
$lineNb++;
$buffer = fgets($handle);
if (strpos($buffer, $searchTag0) != false)
{
//echo "Name gefunden in Zeile: ".$lineNb."
";
$found = 1 ;
$startLN = strpos($buffer, $searchTag01);
$endeFN = strpos($buffer, $searchTag02) ;
$name = substr($buffer, $startLN+8, $endeFN) ;
$foundName1 = $name;
}
}
fclose($handle);
$foundName1 = html_entity_decode($foundName1);
return $foundName1;
}
?>