JPaeper
8. November 2010 um 21:58
1
Hallo Leute,
ich beobachte ein komisches Verhalten bei dem Befehl http_get. Der Skript funktioniert ein lange Zeit (Stunden, Tage) ohne Probleme. Irgendwann liefert der Befehl ein „False“ zurück. Beende ich dann den IPS-Server und starte ihn dann gleich wieder funktioniert der Befehl wieder (Stunden, Tage) ohne Probleme!
Wie kann es zu solch einem Verhalten kommen?
Joachim
JPaeper
9. November 2010 um 19:46
2
Hallo Leute,
heute wieder das Gleiche: Skript lief offenbar bis 6:30 Uhr - Fehlermeldung. Jetzt IPS neu gestartet - läuft sofort wieder…
Hier mal der Code:
<?
$AktuellerWochentag = GetValueInteger(37151 /*[Sonstige Daten\Variablen\Sonstige Variablen\Aktueller Wochentag (Nr)]*/ );
$AktuelleKalenderwoche = GetValueInteger(36714 /*[Sonstige Daten\Variablen\Sonstige Variablen\Kalenderwoche des Jahres]*/ );
If (($AktuellerWochentag >= 1) and ($AktuellerWochentag <= 5))
{
$ModKalenderwoche = $AktuelleKalenderwoche;
}
else
{
$ModKalenderwoche = $AktuelleKalenderwoche + 1;
}
//Echo $AktuellerWochentag." ".$AktuelleKalenderwoche." ".$ModKalenderwoche;
$Antwort = http_get("....link....", array("connecttimeout"=>2));
If ($Antwort == False)
{
SetvalueString(34075 /*[BRGS\Stundenplan]*/ , "Es ist ein Fehler aufgetreten!");
echo $Stundenplan;
}
else
{
$StundenplanArray = get_mark($Antwort, "</head>*</TR></TABLE><TABLE");
$Stundenplan = $StundenplanArray[0];
$Stundenplan = str_Replace('color="#000000"', '', $Stundenplan);
$Stundenplan = str_Replace('color="#FF0080"', '', $Stundenplan);
$Stundenplan = str_Replace('bgcolor="#FFFFFF"', '', $Stundenplan);
$Stundenplan = str_Replace('border="3"', 'border="1"', $Stundenplan);
$Stundenplan = str_Replace('Arial', GetValueString(32181 /*[Server\Einstellungen\Webfront Einstellungen\Schriftart]*/ ), $Stundenplan);
SetvalueString(34075 /*[BRGS\Stundenplan]*/ , $Stundenplan);
$Datum = GetValueString(23632 /*[Sonstige Daten\Variablen\Sonstige Variablen\Aktuelles Datum]*/ );
$Uhrzeit = GetValueString(37001 /*[Sonstige Daten\Variablen\Sonstige Variablen\Aktuelle Uhrzeit]*/ );
SetValueString(33832 /*[BRGS\Letzte Aktualisierung]*/ , $Datum." ".$Uhrzeit);
$Kalenderwochenbeginn = date("d.m.Y", getKW($ModKalenderwoche, date("Y")));
$Kalenderwochenende = date("d.m.Y",(strtotime("+7 day", strtotime($Kalenderwochenbeginn))));
SetValueString(23148 /*[BRGS\Kalenderwoche]*/ , $Kalenderwochenbeginn." - ".$Kalenderwochenende);
echo $Stundenplan;
}
return;
// Diese Funktion trennt die relevanten Bereiche aus dem Ausschnitt heraus $string ist dabei der zu durchsuchende Gesamtstring,
// in $Mark sind durch "*" getrennt der Beginn des zu suchenden Strings und das Ende des zu suchende Abschnittes. Beispiel für den Text "<div>*</div></li>"
function get_mark($string,$mark)
{
$ausgabe = array();
$template = explode("*",$mark);
$mark = $template[0];
$end = $template[1];
$string = strstr($string,$mark);
$temp = explode($mark,$string);
$a = 1;
foreach ($temp as $tempx)
{
$tempx = explode($end,$tempx);
$tempx = $tempx[0];
if ($tempx)
{
array_push ($ausgabe,$tempx);
}
}
return $ausgabe;
}
// Diese Function ermittelt den ersten Montag des Jahres für den Beginn der ersten Kalenderwoche (kann auch im Vorjahr liegen!)
function firstMonday($year = null)
{
if(is_null($year)) $year = date("Y");
$date = mktime(0,0,0,1,4,$year);
return mktime(0,0,0,1, date("d", $date) + (date("w", $date) == 0 ? -6 : (1 - date("w", $date))), $year);
}
// Diese Funktion ermittelt den Montag einer bestimmten Kalenderwoche und -jahr
function getKW($kw, $year = null)
{
if(is_null($year)) $year = date("Y");
return firstMonday($year) + 604800 * ($kw - 1);
}
?>
Joachim
JPaeper
17. November 2010 um 19:29
3
Hallo Leute,
vielleicht fällt ja doch jemanden etwas dazu ein, wie ich dem Fehler auf die Schliche komme…
Die Fehlermeldung heißt:
„Warning: http_get() [function.http-get]: Timeout was reached; connect() timed out! (…link…) in D:\IP-Symcon\Installation\scripts\BRGSStundenplanLink.ips.php on line 16“
Einmal den IPS-Server neu Starten, funktioniert es wieder sofort…
(Die Lösung kann doch bitte nicht sein, bei Fehlermeldung IPS neu zu starten, oder?:()
Joachim
JPaeper
11. Dezember 2010 um 21:57
4
Hallo Leute,
vielleicht hat ja jemand Interesse an meiner Lösung.
Ich habe
$Antwort = http_get("http://Benutzername:Passwort@...link...", array("connecttimeout"=>2));
ersetzt durch:
$Antwort = file_get_contents("http://Benutzername:Passwort@...link...");
Wie auch immer läuft jetzt seit Wochen stabil…
Joachim