Page 1 of 1

PHP Script in einem Portal-Block

Posted: 15. July 2008 08:08
by Cyberspace
Ein freundliches Hallo an alle,

ich würde gerne in einem Portal-Block ein PHP Script rennen lassen. Ist das möglich? habe schon vieles versucht, aber leider ohne Ergebnis. Was ich möchte ist einen Server online/offline Status abfragen. Hier ist das Script was ich nutzen möchte. Lief unter phpBB2 1a. Hat jemand bitte einen Tipp für mich, wie ich das zum laufen bekomme?

Code: Select all

<?php
$ip = "adresse"; // this is the host of the monitored server
$onlinetext = "Server ist On" ; // this is the on-line message
$offlinetext = "Server ist Off" ; // this is the off-line message
$port = "5901"; // this is the port that you check
if(@fsockopen($ip,$port,$errno,$errstr,1)) {
echo"<a href='http://www.XXXXXX.XX/' target='_blank'><img src='serveron.png' width='17' height='17' border='0'></a>  $onlinetext";
} else {
echo"<img src='serveroff.png' width='17' height='17' border='0'> $offlinetext";
}
?>
Wäre nett, wenn jemand von Euch mir etwas unter die Arme greifen kann.

Tausend Dank
Horst

Re: PHP Script in einem Portal-Block

Posted: 15. July 2008 09:23
by Kevin
Öffne portal.php

suche:

Code: Select all

// output page
page_header($user->lang['PORTAL']);
füge davor ein:

Code: Select all

include($phpbb_root_path . 'portal/block/server_status.'.$phpEx);

erstelle eine neue Datei, namens server_status.php, speichern in portal/block/ - Inhalt:

Code: Select all

<?php

if (!defined('IN_PHPBB') || !defined('IN_PORTAL'))
{
exit;
}

    $ip = "adresse"; // this is the host of the monitored server
    $onlinetext = "Server ist On" ; // this is the on-line message
    $offlinetext = "Server ist Off" ; // this is the off-line message
    $port = "5901"; // this is the port that you check
      if(@fsockopen($ip,$port,$errno,$errstr,1)) 
      {
         $onlinestatus = $onlinetext;
         $onlineimage = serveron.png;
      }
      else
      {
         $onlinestatus = $offlinetext;
         $onlineimage = serveroff.png;
      }

   $template->assign_vars(array(
       'ONLINESTATUS' => $onlinestatus,
       'ONLINEIMAGE' => $onlineimage,
    
    ));
?>
(natürlich die Parameter anpassen)

erstelle eine neue Datei, namens server_status.html, speichern in \styles\prosilver\template\portal\block\ - Inhalt:

Code: Select all

    <div class="panel">
       <div class="inner">
          <span class="corners-top"><span></span></span>
             <h3>Serverstatus</h3>
               <a href='http://www.XXXXXX.XX/' ><img src='{ONLINEIMAGE}' width='17' height='17' border='0'></a>
               <br /> 
               {ONLINESTATUS}
          <span class="corners-bottom"><span></span></span>
       </div>
    </div>
    <br style="clear:both" />
Das wäre dann ein seitlicher Block. Ggf. noch den Pfad zu den On- / Offline Bildern anpassen.

Öffne styles\prosilver\template\portal\portal_body.html

suche:

Code: Select all

		<!-- IF S_DISPLAY_MAINMENU -->
		<!-- INCLUDE portal/block/main_menu.html -->
		<!-- ENDIF -->
füge danach ein:

Code: Select all

<!-- INCLUDE portal/block/server_status.html -->

Das sollte es gewesen sein - ohne Gewähr - nicht getestet!
Ist ein Schnellschuß von der Arbeit aus. ;)

Re: PHP Script in einem Portal-Block

Posted: 15. July 2008 20:12
by Cyberspace
Hi Kevin,

danke für deine Antwort. Also der Status kommt, aber ich habe ne Fehlermeldung, weiß leider nix mit ihr anzufangen.

Code: Select all

[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3630: Cannot modify header information - headers already sent by (output started at /portal/block/server_status.php:1)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3631: Cannot modify header information - headers already sent by (output started at /portal/block/server_status.php:1)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3632: Cannot modify header information - headers already sent by (output started at /portal/block/server_status.php:1)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3633: Cannot modify header information - headers already sent by (output started at /portal/block/server_status.php:1)
Habe schon einiges versucht und geändert aber nix passiert. So sieht es jetzt aus:

Code: Select all

<?php

    if (!defined('IN_PHPBB') || !defined('IN_PORTAL'))
    {
    exit;
    }

        $ip = "dzfserver.dyndns.org"; // this is the host of the monitored server
        $onlinetext = "Server ist On" ; // this is the on-line message
        $offlinetext = "Server ist Off" ; // this is the off-line message
        $port = "5901"; // this is the port that you check
          if(@fsockopen($ip,$port,$errno,$errstr,1)) 
          {
             $onlinestatus = $onlinetext;
             $onlineimage = 'serveron.png';
          }
          else
          {
             $offlinestatus = $offlinetext;
             $offlineimage = 'serveroff.png';
          }

       $template->assign_vars(array(
           'ONLINESTATUS' => $onlinestatus,
           'ONLINEIMAGE' => $onlineimage,
        
        ));
?>
Ausserdem ist die Portal schrift jetzt riesig und die Umlaute stimmen nicht mehr. http://www.digital-zone.de

hast Du noch eine Idee?

Danke Horst


EDIT: Hab es gefunden, sorry nicht gesehen das in der server_status.php vor <?php noch ein Leerzeichen war. Jetzt geht alles. Tausend Dank.
Gruß Horst

Re: PHP Script in einem Portal-Block

Posted: 15. July 2008 20:55
by Cyberspace
Habe noch eine Frage. Was muß ich machen wenn ich noch einen zweiten und dritten Status abfragen möchte? Geht das auch in einem Block?

Gruß Horst

P.S. Muss mich leider revidieren. Der Status steht immer auf off auch wenn der Server online ist. Habe es schon mit einem anderen Port versucht, aber nix geht. Kann ich überhaupt statt der IP auch eine xxxx.dyndns.org abfragen? Sollte doch gehen. Also Ping geht.

Gruß Horst

EDIT:
wenn ich die IP meines vServers abfrage und Port 80 dann geht das Script. Ich müsste wohl irgendwie noch den Queryport abfragen.
Also, ich habe über die Seite http://www.tuts.net/~titulaer/status/ meinen Status abgefragt (vom Game-Server)
Port 5901
Queryport 25601
und der Status wird angezeigt. Warum geht das script also nicht? Kann es sein das mein VServer die Abfrage nicht zulässt? Wobei wenn ich wie oben schon erwähnt den VServer abfrage dann geht es! Komisch. Brauche bitte noch etwas Unterstützung.

Danke Horst

Re: PHP Script in einem Portal-Block

Posted: 16. July 2008 08:26
by Cyberspace
Guten Morgen,

habe jetzt noch etwas getestet und mal die Fehler ausgegeben. Bekomme immer diese Meldung:

Code: Select all

[phpBB Debug] PHP Notice: in file /portal/block/server_status.php on line 18: fsockopen() [function.fsockopen]: unable to connect to dzfserver.dyndns.org:5901 (No route to host)
Aber es funktioniert, denn hier ist alles bestens Server Test. Gibt es für "fsockopen" auch eine QueryPort abfrage? Habe schon gesucht, aber leider nichts gefunden.

MfG
Horst

Re: PHP Script in einem Portal-Block

Posted: 16. July 2008 11:30
by Kevin
Moin Horst,

erstmal erfreulich das der grundsätzliche Blockaufbau scheinbar läuft.
Cyberspace wrote:Habe noch eine Frage. Was muß ich machen wenn ich noch einen zweiten und dritten Status abfragen möchte? Geht das auch in einem Block?
Ja, das sollte gehen. Du müsstest halt neue Variablen erstellen und ans Template übergeben.

Zu der Fehlermeldung:
Das Script scheint Wert auf eine IP Adresse zu legen. Wenn das Script mit der IP funktioniert, liegt das nahe.
Ansonsten müsstest du das Script so weit aufbohren, das erstmal die IP über DynDNS aufgelöst wird, und erst dann der fsock direkt mit der IP kommt.
Hier eine Möglichkeit mit einer PHP Funktion: http://de3.php.net/manual/de/function.gethostbyname.php
Sprich:

Code: Select all

$ip = "dzfserver.dyndns.org"; // this is the host of the monitored server
ersetzen durch:

Code: Select all

$ip = gethostbyname('dzfserver.dyndns.org'); // this is the host of the monitored server
Gruß

Kevin

Re: PHP Script in einem Portal-Block

Posted: 18. July 2008 12:42
by Cyberspace
Hallo Kevin,

sorry bin erst heute dazu gekommen das zu testen. Geht leider auch nicht. Ich kann den Status bei jedem Online Dienst Anbieter abfragen, ohne Probleme nur das Script funzt einfach net. Ich bin leider nicht der Crack was php und html angeht, aber ich verstehe schon so einige Sachen nur das geht mir nicht in die Birne.

Du sagtest was vom aufblasen? Mhh das ist natürlich nicht so klasse, aber vielleicht gibt es ja ein Javascript was das macht, nur leider habe ich nichts gefunden. Suche ja schon seit Wochen nach einer Lösung. Anbieter die das machen gibt es genug, nur ist das bei denen auch immer so aufgeblasen und für ne Box einfach nicht passabel.

Trotzdem Danke für deine Hilfe und falls Du noch eine Idee hast wäre es cool wenn Du sie mich wissen lässt.

Gruß
Horst