Powered by Invision Power Board


Seiten:12 ( Zum ersten neuen Beitrag ) Reply to this topicStart new topicStart Poll

> Php und fopen
Tekbaron
Geschrieben am: Mittwoch, 18.Juni 2003, 11:56 Uhr


Leader
********

Gruppe: [-bmb-]Admin
Beiträge: 2385
Mitgliedsnummer.: 12
Mitglied seit: 2001-03-07




Hi Jungs,

vieleicht kann mir ja jemand mal bei meinen Problem helfen:

Und zwar habe ich einige Scripte hier bei uns in der HP includet, speziell das ucl script. Alles ist gut wenn die UCl antwortet, oder total down ist. Nur jetzt kommt mein Problem, wenn der SQl Server bei Powie nett geht, wird der Rechte frame bei uns nicht mehr geladen, weil das script zwar das File findet aber, halt keine Daten bekommt. Irgent jemand ne Idee wie man da einen Timeout oder was weiss ich einbauen kann, damit das script nicht ewig wartet, biss es daten bekommt ?

Code

$gURL = "http://www.myucl.de/clan/clandetail.php?edit=1076&mod=CTF";

$file = @fopen ("$gURL", "r");
if (!$file) {
   echo "<p>UCL down\n";
   exit;
}
while (!feof ($file)) {
   $line = fgets ($file, 1024);
   if (ereg ("Rang:</td><td bgcolor=\"#F0D7CA(.*)</td>", $line, $out)) {
       $line = $out[1];


--------------------
mfg Tekbaron Leader [-bmb-] Clan

user posted image

user posted image

user posted image
PMUsers WebsiteICQ
Top
Martin
Geschrieben am: Mittwoch, 18.Juni 2003, 13:20 Uhr


KillingSpree
****

Gruppe: [-bmb-]Points
Beiträge: 130
Mitgliedsnummer.: 5
Mitglied seit: 2001-06-19




Hi Jörg !

Ich würde die Kondition der while-Schleife um eine Bedingung erweitern, um nach einer bestimmten Zeit abzubrechen.

Gehe ich recht in der Annahme, daß das ein PERL-Script ist ? Dann gucke ich zu Hause mal in meine Bücher, was ich dazu finde. Ich habe zwar unter PERL schonmal mit Zeitabfragen gearbeitet, aber das ist schon etwas her.


--------------------
Bis dann Martin
PM
Top
Tekbaron
Geschrieben am: Mittwoch, 18.Juni 2003, 13:36 Uhr


Leader
********

Gruppe: [-bmb-]Admin
Beiträge: 2385
Mitgliedsnummer.: 12
Mitglied seit: 2001-03-07




nee Martin issen php script  :eek:


--------------------
mfg Tekbaron Leader [-bmb-] Clan

user posted image

user posted image

user posted image
PMUsers WebsiteICQ
Top
Frank
Geschrieben am: Mittwoch, 18.Juni 2003, 22:53 Uhr


Rampage
******

Gruppe: [-bmb-]Rootserver
Beiträge: 695
Mitgliedsnummer.: 2
Mitglied seit: 2001-03-07




Wäre vielleicht einfacher, irgendeinen Text oder so anzuzeigen, solange keine Daten gekommen sind. Aber wie weiss ich natürlich auch nett ... sehr hilfreich, ich weiss ;)

[EDIT]

Vielleicht wäre 'do ... while...' eine Möglichkeit zunächst zum Beispiel den Text "Daten werden geladen" anzuzeigen oder eben alles andere im Script auszuführen ?

Ansonsten hätte ich noch einen Link ( falls Du das nicht eh schon kennst ) SelfPHP - Nachschlage-Werk für PHP mit Erläuterungen und Beispielen



--------------------
user posted image
PMEmail PosterUsers Website
Top
Martin
Geschrieben am: Donnerstag, 19.Juni 2003, 09:41 Uhr


KillingSpree
****

Gruppe: [-bmb-]Points
Beiträge: 130
Mitgliedsnummer.: 5
Mitglied seit: 2001-06-19




Hi !


Hey, Frank, guter Link. Da habe ich doch glatt was gefunden; läuft so ähnlich wie in PERL :)

Also: Zunächst - am besten am Anfang von dem zitierten Code-Schnipsel - eine skalare Variable definieren, die angibt, für wieviele Sekunden auf eine vollständige Antwort gewartet werden soll:
$waitforresponse=10;

Danach vor der while-Schleife die aktuelle Zeit abfragen:
$starttime=time();

Und dann in der while-Schleife die Kondition erweitern:
while (!feof ($file) and (time() <= $starttime+$waitforresponse)) {

Hat's Erfolg ?


--------------------
Bis dann Martin
PM
Top
Ingo
Geschrieben am: Donnerstag, 19.Juni 2003, 09:43 Uhr


KillingSpree
****

Gruppe: [-bmb-]Rootserver
Beiträge: 192
Mitgliedsnummer.: 3
Mitglied seit: 2001-03-07




Hm, also das Problem ist ja, das der Frame nicht dargestellt wird, weil das Programm noch arbeitet. Erste Möglichkeit : den oberen Teil mit dem Menü in eine andere PHP Datei 'umsiedeln'. Also wird das Menü schonmal dargestellt, dann wird der untere Teil mit der UCL abgearbeitet, und wenn dann was hängt,  :finger:
Es gibt eine Funktion check_connection_status, die einen Time_out liefern kann, allerdings ist die für die Verbindung zum User und nicht für File Transfer. Mein Vorschlag (aber nicht getestet und keine garantie oder Gewährleistung !!!;), eine Verbindung über socket
Code

$fp = fsockopen ("http://www.myucl.de/clan/clandetail.php?edit=1076&mod=CTF", 80, &$errno, &$errstr, 5);
// 80 ist der Port für WEB Verbindungen, tcp usw. sind auch möglich. die 5 am Ende ist der Timeout Wert für die Verbindung
if (!$fp) {
   echo "$errstr ($errno)<br />\n";
} else {
   fputs ($fp, "GET / HTTP/1.0\r\n\r\n");
   while (!feof($fp)) {
      socket_set_timeout($fp, 2);
      $line = fgets ($file, 1024);
      if (ereg ("Rang:</td><td bgcolor=\"#F0D7CA(.*)</td>", $line, $out)) {
      $line = $out[1];
}
   fclose($fp);


na denn, viel Spaß beim testen, und nicht fluchen  :D
PMEmail PosterUsers WebsiteICQAOLYahoo
Top
Tekbaron
Geschrieben am: Donnerstag, 19.Juni 2003, 12:21 Uhr


Leader
********

Gruppe: [-bmb-]Admin
Beiträge: 2385
Mitgliedsnummer.: 12
Mitglied seit: 2001-03-07




Meh die Idee ist gut, aber man kann wohl mit fsockopen nur www.myucl.de abfragen, wenn ich den Query String mit reinnehme sach er immer myucl down.

So alles neu gemacht und so gehts:

Code

<?
/*
UCL Platz-Skript made by: [-bmb-tekbaron-]
Updates verfügbar unter: http://www.bmb-clan.de

Zum einbinden einfach die Schriftart und Farben
anpassen und per PHP / oder SSI in die eigene HP
einbinden.
Beispiel: <!--#include virtual="statusucl.php" -->

sollte irgendwas nicht funzen gibt's hier hilfe:
http://www.bmb-clan.de/cgi-bin/ikonboard/ikonboard.cgi
*/

//***********************************************
//************** Konfiguration ******************
//***********************************************

//Schriftart:
$font = "Tahoma";

//Schrifgröße::
$fontsize = "1";

//Farbe des Textes:
$tcol = "#999999";

//Textfarbe der Plazierungen
$pcol= "#F4cb00";

//Clan Nummer
$clan= "1076";

//Mod
$mod= "CTF";

//***********************************************
//******* Ab hier nichts mehr ändern ! **********
//***********************************************

//create a string with all the posted data...

foreach ($HTTP_POST_VARS as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

//create headers...

$header .= "GET http://www.myucl.de/clan/clandetail.php?edit=($clan)&mod=($mod) HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= 'Content-Length: ' . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.myucl.de', 80, $errno, $errstr, 30);

if (!$fp) {
// ERROR
//  echo "$errstr ($errno)"; #debug
echo "<p>UCL down\n";
} else {

//put the data..
fputs ($fp, $header . $req);
while (!feof($fp)) {
socket_set_timeout($fp, 2);
//read the data returned...
  $res = fgets ($fp, 1024);
   if (ereg ("Aktueller Rang:</td><td bgcolor=\"#F0D7CA(.*)</td>", $res, $out)) {
       $res = $out[1];
       if (ereg ("\">(.*)</td></tr><tr><td bgcolor=\"#CEA590\">MOD", $res, $out2)){
        $rng = $out2[1];
    echo("<font face=\"$font\" color=\"$tcol\" size=\"$fontsize\"> <b>Rang <a href=\"http://www.myucl.de/clan/liga.php?mod=CTF\" target=\"_blank\">UCL CTF :</b></font></a>
        <font face=\"$font\" color=\"$pcol\" size=\"$fontsize\"><b>   $rng</b></font><br>");
       }
       break;
   }

}
fclose ($fp);
}
?>


Nun müste die ucl nur mal wieder down sein  :finger:



--------------------
mfg Tekbaron Leader [-bmb-] Clan

user posted image

user posted image

user posted image
PMUsers WebsiteICQ
Top
Ingo
Geschrieben am: Donnerstag, 19.Juni 2003, 13:15 Uhr


KillingSpree
****

Gruppe: [-bmb-]Rootserver
Beiträge: 192
Mitgliedsnummer.: 3
Mitglied seit: 2001-03-07




Hmmm, stimmt, man kann eine Socket Verbindung nur auf eine Domain machen, nicht direkt auf ein File ... mein fehler.
Also, hab Dein Script nurmal so überflogen ... Wenn ich es richtig verstehe, öffnest Du also eine Socket Verbindung, sendest eine 'quasi' web Site und fängst die Antwort ab und verarbeitest die Daten. Hast Du das so schon eingebaut ? Scheint dann ja wirklich zu funktionieren. Aber mir fehlt da die
socket_set_timeout Zeile. Das wäre ja gerade die wichtige gewesen. Die Angabe im fsockopen ist doch nur für den Timeout während des Verbindungsaufbau.

Zu Martin : prinzipiell sollte es so gehen. Ähnlich funktionieren ja auch die lustigen Zeilen : Diese Datei wurde in XY Sekunden runtergeladen. Aber praktisch ... ??  :P
PMEmail PosterUsers WebsiteICQAOLYahoo
Top
Tekbaron
Geschrieben am: Donnerstag, 19.Juni 2003, 13:46 Uhr


Leader
********

Gruppe: [-bmb-]Admin
Beiträge: 2385
Mitgliedsnummer.: 12
Mitglied seit: 2001-03-07




so geändert  :D

Ajo falls jemand das für andere sachen braucht UCL 1on1 oder 2on2 oder was weiss ich ECL habe ich auch, ULD bin ich ebent dran. Naja falls halt jemand son dring braucht sacht mal hier  ;)



--------------------
mfg Tekbaron Leader [-bmb-] Clan

user posted image

user posted image

user posted image
PMUsers WebsiteICQ
Top
stAchELbeeR
Geschrieben am: Donnerstag, 19.Juni 2003, 16:11 Uhr


Rampage
******

Gruppe: [-bmb-]Rootserver
Beiträge: 684
Mitgliedsnummer.: 10
Mitglied seit: 2002-04-08




UCL 2on2 ist könnte ich gebrauchen


--------------------
--
Nur die Ungläubigen glauben, dass es keinen Gott gibt.
PMEmail PosterUsers WebsiteICQ
Top
Tekbaron
Geschrieben am: Donnerstag, 19.Juni 2003, 16:47 Uhr


Leader
********

Gruppe: [-bmb-]Admin
Beiträge: 2385
Mitgliedsnummer.: 12
Mitglied seit: 2001-03-07






--------------------
mfg Tekbaron Leader [-bmb-] Clan

user posted image

user posted image

user posted image
PMUsers WebsiteICQ
Top
Tekbaron
Geschrieben am: Donnerstag, 19.Juni 2003, 17:22 Uhr


Leader
********

Gruppe: [-bmb-]Admin
Beiträge: 2385
Mitgliedsnummer.: 12
Mitglied seit: 2001-03-07




Und für alle anderen nicht auf bmbnet.com gehosteten leute mal das beispiel mit details.

Code

<?
/*
UCL Platz-Skript made by: [-bmb-tekbaron-]
Updates verfügbar unter: http://www.bmb-clan.de

Zum einbinden einfach die Schriftart und Farben
anpassen und per PHP / oder SSI in die eigene HP
einbinden.
Beispiel: <!--#include virtual="statusucl.php" -->

sollte irgendwas nicht funzen gibt's hier hilfe:
http://www.bmb-clan.de/cgi-bin/ikonboard/ikonboard.cgi
*/

//***********************************************
//************** Konfiguration ******************
//***********************************************

//Schriftart:
$font = "Tahoma";

//Schrifgröße::
$fontsize = "1";

//Farbe des Textes:
$tcol = "#999999";

//Textfarbe der Plazierungen
$pcol= "#F4cb00";

//Clan Nummer
$clan= "1076";

//Mod
$mod= "CTF";

//***********************************************
//******* Ab hier nichts mehr ändern ! **********
//***********************************************

//create a string with all the posted data...

foreach ($HTTP_POST_VARS as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

//create headers...

$header .= "GET http://www.myucl.de/clan/clandetail.php?edit=($clan)&mod=($mod) HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= 'Content-Length: ' . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.myucl.de', 80, $errno, $errstr, 30);

if (!$fp) {
// ERROR
//  echo "$errstr ($errno)"; #debug
echo "<p>UCL down\n";
} else {

//put the data..
fputs ($fp, $header . $req);
while (!feof($fp)) {
socket_set_timeout($fp, 2);
//read the data returned...
  $res = fgets ($fp, 1024);
   if (ereg ("Aktueller Rang:</td><td bgcolor=\"#F0D7CA(.*)</td>", $res, $out)) {
       $res = $out[1];
       if (ereg ("\">(.*)</td></tr><tr><td bgcolor=\"#CEA590\">MOD", $res, $out2)){
        $rng = $out2[1];
    echo("<font face=\"$font\" color=\"$tcol\" size=\"$fontsize\"> <b>Rang <a href=\"http://www.myucl.de/clan/liga.php?mod=CTF\" target=\"_blank\">UCL CTF :</b></font></a>
        <font face=\"$font\" color=\"$pcol\" size=\"$fontsize\"><b>   $rng</b></font><br>");
       }
       if (ereg ("Win/Lost:</td><td bgcolor=\"#F0D7CA\">(.*)", $res, $out3)){
        $stnd = $out3[1];
        $gwn = substr($stnd, 0, strpos($stnd, ":"));
        $vln = substr($stnd, strpos($stnd, ":")+1);
        echo("<font face=\"$font\" color=\"$tcol\" size=\"$fontsize\"><b>Siege: </b></font>
        <font face=\"$font\" color=\"$pcol\" size=\"$fontsize\"><b>$gwn</b></font><br>");
        echo("<font face=\"$font\" color=\"$tcol\" size=\"$fontsize\"><b>Niederlagen: </b></font>
        <font face=\"$font\" color=\"$pcol\" size=\"$fontsize\"><b>$vln</b></font><br>");
       }
       break;
   }

}
fclose ($fp);
}
?>


--------------------
mfg Tekbaron Leader [-bmb-] Clan

user posted image

user posted image

user posted image
PMUsers WebsiteICQ
Top
stAchELbeeR
Geschrieben am: Donnerstag, 19.Juni 2003, 23:49 Uhr


Rampage
******

Gruppe: [-bmb-]Rootserver
Beiträge: 684
Mitgliedsnummer.: 10
Mitglied seit: 2002-04-08




danke.

Und wie geht das mit 1on1? Kann das leider nicht übertragen.

Warum kommen denn diese Schrägstriche zwischen = und " ?
Code
<font face=\"$font\" color=\"$pcol\" size=\"$fontsize\">




--------------------
--
Nur die Ungläubigen glauben, dass es keinen Gott gibt.
PMEmail PosterUsers WebsiteICQ
Top
Tekbaron
Geschrieben am: Freitag, 20.Juni 2003, 10:28 Uhr


Leader
********

Gruppe: [-bmb-]Admin
Beiträge: 2385
Mitgliedsnummer.: 12
Mitglied seit: 2001-03-07




gugst du hier
:hf:

" müssen mit einem \ maskeriert werden sonst erkennt php die dinger als Steuerzeichen, und bricht ab. Also Praktisch denkt er dann das iss php und versucht damit was anzufangen, es soll ja aber eigentlich html sein.


--------------------
mfg Tekbaron Leader [-bmb-] Clan

user posted image

user posted image

user posted image
PMUsers WebsiteICQ
Top
stAchELbeeR
Geschrieben am: Donnerstag, 14.August 2003, 22:59 Uhr


Rampage
******

Gruppe: [-bmb-]Rootserver
Beiträge: 684
Mitgliedsnummer.: 10
Mitglied seit: 2002-04-08




könnte man das Script eventuell so erweitern, dass es die Webseite nur einzweimal am Tag abfragt und die Abfrage zwischen speichert ( in eine Datei?)?



--------------------
--
Nur die Ungläubigen glauben, dass es keinen Gott gibt.
PMEmail PosterUsers WebsiteICQ
Top

Topic OptionsSeiten:12 Reply to this topicStart new topicStart Poll