PHP: Variablen funktionieren nicht überall in der Datei

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Wuppi_o_L

PHP: Variablen funktionieren nicht überall in der Datei

Beitrag von Wuppi_o_L »

Hi

etwas kurios ... habe das tool CoolMon und möchte nun mittels PHP stats auf einer HP anzeigen lassen (lokal):

So sieht die .php aus:

Code: Alles auswählen

<html><title>System-Stats</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
<body><body bgcolor="#000000" text="#FF0000">

<?
$func_name="system_stats";

function system_stats() {

$file = "http://istdochegal"; // change this
$parser = xml_parser_create();
$data = implode(" ", file($file));
xml_parse_into_struct($parser, $data, $d_ar, $i_ar);
$i=0;
foreach($d_ar as $element) {
if (!preg_match("/^s+$/", $element[$value])) {
$tag = $element[tag];
$stats[$i][strtolower($tag)] = $element[value];
} elseif (isset($element[attributes])) {
$stats[$i][id] = $element[attributes][ID];
$i++;
}
}
?>

<h1 align="center">&Uuml;bersicht</h1>
<p>&nbsp;</p>
<table width="560" border="1" cellspacing="0" cellpadding="0" align="center" bordercolor="#333333">
<tr> 
<td width="139">Dein Browser und OS</td>
<td width="421"><? echo "$HTTP_USER_AGENT" ?></td>
</tr><tr> 
usw. usw.

Was nicht geht: <? echo "$HTTP_USER_AGENT" ?> (ob mit oder ohne "" und ; am ende) und auch andere variablen ... ABER wenn ich diesen Tag VOR dem 1. PHP-Bereich, also direkt UNTER <body> setze, wird es ausgeben. Naja dann hab ich mal im oberen Bereich, unter body <? $test = "blabla"; ?> gesetzt und unten, anstatt <? echo "$HTTP_USER_AGENT" ?> halt <? echo "$test"?> (habs mit und ohne "" probiert!) gesetzt - und auch diese Variable wurde NICHT angezeigt.

Ich vermute das in der function system_stats() irgendwas ist, was es verbietet nachträglich variablen anzuzeigen/zu parsen ...

Ebenfalls kurios weiter unten hab ich <? echo @getHostByAddr($REMOTE_ADDR);?> stehen, dieses klappt!! Remote_Addr alleine, aber ebenfalls nicht -- also die Variblen werden wohl ausgelesen, aber nicht geparsed ...

Ähnliches Problem hab ich dann auch noch bei einigen (nicht allen!) Variablen die aus der Funktion resultieren

<? echo urldecode($stats['0']['temperature_2']); ?> <- Funktioniert;
<? echo urldecode($stats['0']['PageFree']); ?> <- Funktioniert nicht, aufruf aber richtig - vermute mal das diese Problem mit dem Problem was ich mit normalen Vars hab zu tun hat ...

Jemand ne idee woran das liegt und wie ich das gefixt bekomme?

Bis denne
Patrick

PS: global-register ist in der php.ini ON
PPS: meine alte statistikseite ist ähnlich aufgebaut: html-php-html-php usw. und hier klappt es wunderbar
Wuppi_o_L

Beitrag von Wuppi_o_L »

Hi

nen bissel bin ich schon weitergekommen.

Auf dem ersten blick fehlt da ne }

Daher hier mal ne Code-Übersicht:


HTML
PHP mit der Funktion 3x { und 2x } !
HTML mit Browser-Ausgabe und CoolMon-Stats
PHP mit 1x } und funktions-aufruf ($func_name(); )

Bei der Lösung hab ich nen paar CoolMon-Stats aber keine anderen Variablen.

HTML
PHP mit Funktion und 3x { und }
HTML mit Browser-Ausgabe und CoolMon-Stats
PHP mit Funktionsaufruf ($func_name(); )

=> Jetzt hab ich die Sonstigen Stats, aber KEINE CoolMons mehr

Wenn ich den funktionsaufruf direkt unter die Funktionsetze, bringt das auch nichts - keine coolmon-stats :(

Verzweifel langsam ;( Coolmon bietet leider nicht alle Vars die ich brauche, daher bedien ich mich halt noch anderen Vars ... daher muß ich so mischen ...

Was mach ich da falsch?! :(

Wuppi
Benutzeravatar
itst
Ehrenadmin
Beiträge: 7418
Registriert: 21.08.2001 02:00
Wohnort: Büttelborn bei Darmstadt
Kontaktdaten:

Beitrag von itst »

Poste doch mal einen Link auf die komplette Datei (bitte als .txt) und erklär genau, was Du erwartest und was aber statt dessen passiert.
Sascha A. Carlin,
phpBB.de Ehrenadministrator
:o
Wuppi_o_L

Beitrag von Wuppi_o_L »

Hi

http://patrick1977.bei.t-online.de/temp.txt <- T-Online ignoriert das es ne .txt ist und stellt den html-teil da, im quelltext ist aber ungeparstes PHP! (mein webhoster mit php parst JEDE Dateiendung - und phps stellt er nur zu 50% dar ...)

Da sieht man auch gleich wie es in etwa ausschauen sollte.

Das Proplem:
So wie die datei da jetzt ist, wird nen bissel der CoolMon-Variablen ausgeben (die sich das script über eine xml-datei besorgt) - leider nicht alles - warum weiß ich noch net, ABER es werden keine anderen Variablen geparsed: Z.b. $REMOTE_ADDR nix (@getHostByAddr($REMOTE_ADDR) geht aber) ... auch andere Variablen dieser Art gehen nicht - auch eigenen Variablen $testemich = "blablabla"; werden bei ner echo-Ausgabe nicht geparsed.

Jetzt hab ich aber schon nen bissel rausgefunden:
<? ?> html <? ?> <- das ist nicht sehr elegant ... die variablen verlieren wohl (wenn ich das richtig verstanden hab) ihren inhalt wenn mit ?> abgeschlossen wird.

Also mußte ich das anders machen: erstmal für beide Varianten die Funktion entfernen ... also deren gerüst/aufruf - der Inhalt bleibt.

1. Variante: ALLES in einen ECHO-Aufruf (echo "<html><body> ....."; usw. ) ... das klappt ... ABER a) mit HTML zu designen ist hier ziemlich stressig und b) klappen paar CoolMon-Variablen nicht (mehrfach überprüft ob richtig; eine variable wird als beispiel auch so angeben - kann also kein falscher aufruf sein!)

2. Variante: Gefiel mir ganz gut - war mir bisher neu:

Code: Alles auswählen

<?

hier stehen die Reste der function

<<<END
hier jetzt viel HTML und variablen rein (als wäre das ne einfache HTML-Datei; keine einschränkungen soweit)
END;
?>
Klappt, solang ich auf coolmon-Vars verzichte :( Eine coolmon-Variable bekomm ich nicht rein.

CoolMon-Vars sehen so aus:
$stats['0']['temperature_2']

Temp und Fan-Speed gehen, aber der rest nicht.

Was mir JETZT aber einfällt - kann man hier nicht tricksen?

Code: Alles auswählen

<<<END
<p>Die CPU-Temp liegt bei 
END;
echo $stats['0']['temperature_2'];
<<<END
Die System-Temp liegt bei .....
.... usw.
END;
Also ähnliches meines bisher umständlichen Systems <? ?>html<? ?>html<? ?>

Das werde ich als nächstens mal probieren

Mir hat noch jemand im Chat den Befehl:
print_r($stats) geschickt - und meinte dazu das ich das unter dem XML-Geparse setzen soll <- ???? Hab ich net so verstanden.

Bei print_r($stats) bekomm ich den inhalt der xml-Datei präsentiert - aber was mir das jetzt bringt? :(

Ich werde mal gucken ob ich die anderen beiden Varianten.txt-Files heute noch ins netz stellen kann (als Quelltext) ... bin net mehr zuhause ...
ansonsten morgen ~13 Uhr.

Bis denne
Wuppi
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Beitrag von Wuppi »

Hi

kanns im mom net hochladen ... also hierrein:

Die END-Variante:

Code: Alles auswählen

<html>
<title>System-Stats</title>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<body bgcolor="#000000" text="#FF0000">

<?


	$file = "http://172.20.5.250:8083";  //  change this

	$parser = xml_parser_create();
	$data = implode(" ", file($file));
	xml_parse_into_struct($parser, $data, $d_ar, $i_ar);

	$i=0;
	foreach($d_ar as $element) {
			if (!preg_match("/^s+$/", $element[$value])) {
					$tag = $element[tag];
					$stats[$i][strtolower($tag)] = $element[value];
			} elseif (isset($element[attributes])) {
					$stats[$i][id] = $element[attributes][ID];
					$i++;
			}
	}
print_r($stats['0']['temperature_2']); // 
echo <<<END
<h1 align="center">&Uuml;bersicht</h1>
<p>&nbsp;</p>
<table width="560" border="1" cellspacing="0" cellpadding="0" align="center" bordercolor="#333333">
  <tr> 

$SERVER_NAME <br>
// $stats['0']['temperature_2'] // geht nicht!
END;
?>
Am ende sieht man ja meinen Kommentar - geht nicht :(

Die 2. Variante - total unübersichtlich ...

Code: Alles auswählen

<? echo "<html>
<title>System-Stats</title>

<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'>
<body bgcolor='#000000' text='#FF0000'>";



   
	$file = "http://172.20.5.1:8082";  //  change this

	$parser = xml_parser_create();
	$data = implode(" ", file($file));
	xml_parse_into_struct($parser, $data, $d_ar, $i_ar);

	$i=0;
	foreach($d_ar as $element) {
			if (!preg_match("/^s+$/", $element[$value])) {
					$tag = $element[tag];
					$stats[$i][strtolower($tag)] = $element[value];
			} elseif (isset($element[attributes])) {
					$stats[$i][id] = $element[attributes][ID];
					$i++;
			}}

echo "<h1 align='center'>&Uuml;bersicht</h1>
<p>&nbsp;</p>
<table width='560' border='1' cellspacing='0' cellpadding='0' align='center' bordercolor='#333333'>
  <tr> 
    <td width='139'>Dein Browser und OS</td>
    <td width='421'>". $HTTP_USER_AGENT ."</td>
  </tr>
  <tr> 
    <td height='20'>Dein Host</td>
    <td height='20'>". @getHostByAddr($REMOTE_ADDR)."</td>
  </tr>
  <tr> 
    <td>Deine IP</td>
    <td>
      ". $REMOTE_ADDR ."
    </td>
  </tr>
</table>
<p>&nbsp;</p>
<table width='458' border='1' cellspacing='0' cellpadding='0' bordercolor='#333333' align='center'>
  <tr> 
    <td colspan='2'> 
      <div align='center'>Status <br>
        ". $SERVER_NAME ."
      </div>
    </td>
  </tr>
  <tr> 
    <td><b>CPU-Typ:</b></td>
    <td>Pentium 3-733 ("MHz") on Asus P3B</td>
  </tr>
  <tr> 
    <td><b>Speicher:</b></td>
    <td>640 MB (PC100) </td>
  </tr>
  <tr> 
    <td><b>Grafikkarte:</b></td>
    <td>Elsa Synergie ?</td>
  </tr>
  <tr> 
    <td><b>Datentr&auml;ger</b></td>
    <td>HD 1: IBM 10GB<br>
      HD 2: Maxtor 30GB<br>
      HD 3: Samsung 120GB<br>
      CD-R: Toshiba 12fach CD-R</td>
  </tr>
  <tr> 
    <td><b></b></td>
    <td>&nbsp;</td>
  </tr>
  <tr> 
    <td><b>Temperatur:</b></td>
    <td>CPU: 

      ". urldecode($stats['0']['temperature_2']) ."
      C / System: 
      ". urldecode($stats['0']['temperature_1']) ."
      C</td>
  </tr>
  <tr> 
    <td><b>L&uuml;fter:</b></td>
    <td>Fan1: 
       ". urldecode($stats['0']['fan_1']) ."
    </td>
  </tr>
  <tr> 
    <td> 
      <p><b>Diskspace: </b></p>
    </td>
    <td> 
      <p>C: Free / Max<br>
        D: Free / Max<br>
        E: Free / Max<br>
        F: Free / Max</p>
    </td>
  </tr>
  <tr> 
    <td><b>RAM</b></td>
    <td> 
      <p>RAM Free / Max 
        ". $stats['0']['RAMFree'] ."
        MB/640 MB<br>
        VRAM Free / Max 
        ". urldecode($stats['0']['PageFree']) ."
        MB/ 
        
        MB </p>
    </td>
  </tr>
  <tr> 
    <td> 
      <p><b></b></p>
    </td>
    <td>&nbsp;</td>
  </tr>
  <tr> 
    <td><b>CPU Load</b></td>
    <td> 
      
    </td>
  </tr>
  <tr> 
    <td><b>Prozesse</b></td>
    <td>&nbsp;</td>
  </tr>
  <tr> 
    <td><b>Threads</b></td>
    <td>&nbsp;</td>
  </tr>
  <tr> 
    <td><b>Top Task</b></td>
    <td>&nbsp;</td>
  </tr>
</table>
<p align='center'>&nbsp;</p>
<p>&nbsp;</p>
<p align='right'> 
   $SERVER_SOFTWARE ($SERVER_PROTOCOL/$GATEWAY_INTERFACE) 
</p>


</body>
";
 ?>
Die erstere wäre mir lieber ... nur wie bekommt man die lauffähig?

Bis denne
Wuppi
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Beitrag von Wuppi »

Hi

nachtrag

Die variante

echo <<<END
blabla
END;
echo $variable;
echo <<<END
blasülz
END;

klappt ;) ... ist zwar bestimmt immer noch net so elegant, aber halt notlösung ...

Nur jetzt brauch ich hilfe von jemanden der CoolMon mit Web-Ausgabe nutz ... die RAM-Ausgabe z.b. klappt immer noch nicht ...

Bis denne
Wuppi
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Beitrag von Wuppi »

Argh ... problem gelöst ...

Traue NIE einem Beispiel ... das Beispiel war falsch! Dort stand RAMFree ... es heißt aber ramfree ... case-sensitive das teil ... super ...

Bis denne
Wuppi
Antworten

Zurück zu „Coding & Technik“