Einen Pointer zu $GLOBALS in ein Array speichern

Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 22:25:36 von Gofixs

Hallo,
ich bin gerade dabei mir einen Error_Heandler zu schreiben und will die
Fehler in XML form speichern.

in der XML Datei möchte ich neben dem Error auch noch die aktuellen
stände der variablen $_GET, $_POST, $_COOKIE, $_SESSION, $_FILES und
$GLOBALS speichern.

Nur leider macht mein PHP code nix mehr seit dem ich die variable $
GLOBALS in das Array $error laden will.

Also keine ausgabe mehr mit echo oder sonstiges. Einfach nur ein
WhiteScreen.

function array_to_xml($arr, $level =3D 0)
{
$xml =3D '';
foreach ($arr as $key =3D> $value)
{
// emptys
if (empty($value))
$xml .=3D str_repeat(' ',$level).'<'.$key.' />'."\n";
else
{
// open
$xml .=3D str_repeat(' ',$level).'<'.$key.'>';
// value
if (is_array($value))
$xml .=3D "\n".array_to_xml($value, $level+1);
else
$xml .=3D $value;
// close
if (is_array($value))
$xml .=3D str_repeat(' ',$level).''."\n";
else
$xml .=3D ''."\n";
}
}
return $xml;
}
function error_save($file, $message)
{
$error['error']['file'] =3D $file;
$error['error']['mkTime'] =3D time();
$error['error']['date'] =3D date('r');
$error['error']['message'] =3D $message;
$error['error']['variables']['get'] =3D &$_GET;
$error['error']['variables']['post'] =3D &$_POST;
$error['error']['variables']['cookie'] =3D &$_COOKIE;
$error['error']['variables']['session'] =3D &$_SESSION;
$error['error']['variables']['files'] =3D &$_FILES;

$error['error']['variables']['globals'] =3D &$GLOBALS; // hiermit hat er
probs

echo array_to_xml($error);
}
error_save('index.php', 'prob mit fopen');

echo 'test';
?>
Die ausgebe soll später in etwa so aussehen

index.php
1162934514
Tue, 07 Nov 2006 22:21:54 +0100
prob mit fopen


1
10000
1
127.0.0.1






Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 22:44:09 von Rudi Menter

-0800 schrieb Marcus Raub:

> Nur leider macht mein PHP code nix mehr seit dem ich
> die variable $ GLOBALS in das Array $error laden will.

Vielleicht das Schlüsselwort, $GLOBALS ist ohne Anstrich,
wie etwa $_FILES. Deshalb würde ich mal was anderes
versuchen in $error['error']['variables']['globals'] = &$GLOBALS;

z.B. $error['error']['variables']['_something_globals'] = &$GLOBALS;

fG
--

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 22:50:29 von Rudi Menter

-0800 schrieb Marcus Raub:

> Nur leider macht mein PHP code nix mehr seit dem ich die variable
> $GLOBALS in das Array $error laden will.

$GLOBALS oder $_GLOBALS?

fG
--

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 23:01:48 von Rudi Menter

-0800 schrieb Marcus Raub:

> Nur leider macht mein PHP code nix mehr seit dem ich die variable
> $GLOBALS in das Array $error laden will.


Vielleicht tut es

function error_save($file, $message)
{
global $GLOBALS;
...
}

Oder was passiert, wenn du mal die beiden Zeilen vertauschst...

$error['error']['variables']['get'] = &$_GET;
...
...
$error['error']['variables']['globals'] = &$GLOBALS;

Oder so ein internes Schlüsselwortproblem der Umgebung,
schreib doch mal z.B. ...

$error['error']['variables'][100] = &$GLOBALS;


fG
--

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 23:06:16 von Gofixs

Rudi Menter schrieb:
> function error_save($file, $message)
> {
> global $GLOBALS;
> ...
> }
^^ get nicht

> Oder was passiert, wenn du mal die beiden Zeilen vertauschst...
^^ Geht auch nicht (passiert immer dasselbe wie vorher)

Aber eigenartig ich habe gerade von PHP 5.0.4 auf PHP 4.4.0 gewechselt
und jetzt geht es
Weis einer warum?
und weis einer wie ich meinen Code unter PHP 5 zum laufen bringe.

ach ja ich meine diese $GLOBALS
http://www.php.net/manual/de/reserved.variables.php#reserved .variables.glob=
als


ps.: im Grunde genommen brauche ich die var $GLOBALS gar nicht mehr da
sie mir viel zu viele Infos enthält.
Aber währe dennoch schön zu wissen warum wieso weshalb ...

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 23:20:54 von Holger Pollmann

"Marcus Raub" schrieb:

>> function error_save($file, $message)
>> {
>> global $GLOBALS;
>> ...
>> }
> ^^ get nicht

Ist ja auch Unsinn. $GLOBALS ist superglobal, also automatisch in jedem
Scope präsent.

> Aber eigenartig ich habe gerade von PHP 5.0.4 auf PHP 4.4.0
> gewechselt und jetzt geht es
> Weis einer warum?
> und weis einer wie ich meinen Code unter PHP 5 zum laufen bringe.

Hmmm... ich weiß nicht, ob das stimmt, meine aber mal gelesen zu haben,
daß es im $GLOBALS-Array auch einen Eintrag namens 'GLOBALS' gibt, der
den Inhalt von $GLOBALS hat...

--
( ROT-13 if you want to email me directly: uvuc@ervzjrexre.qr )
"Das saarl. VwVfG läßt eine Interpretation deutscher Gesetze nur dann
zu, wenn sie nicht eindeutig sind." Manfred Saar, Präsident
Apothekerkammer d. Saarlandes. heute-journal v. 8. August 2006.

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 23:35:00 von Rudi Menter

-0800 schrieb Marcus Raub:
> Rudi Menter schrieb:

>> function error_save($file, $message)
>> {
>> global $GLOBALS;
>> ...
>> }
> ^^ get nicht
>
>> Oder was passiert, wenn du mal die beiden Zeilen vertauschst...
> ^^ Geht auch nicht (passiert immer dasselbe wie vorher)
>
> Aber eigenartig ich habe gerade von PHP 5.0.4 auf PHP 4.4.0 gewechselt
> und jetzt geht es

> Weis einer warum?

> und weis einer wie ich meinen Code unter PHP 5 zum laufen bringe.

Welchen code? Kann man dein Beispiel einfach so (weil es vollständig
ist) in ein reinkopieren und starten? Ja oder nein?

(Wenn nicht, brings mal, dann sehen wir ob es bei uns geht... )

> ach ja ich meine diese $GLOBALS
> http://www.php.net/manual/de/reserved.variables.php#reserved .variables.globals
>
> ps.: im Grunde genommen brauche ich die var $GLOBALS gar nicht mehr da
> sie mir viel zu viele Infos enthält.
> Aber währe dennoch schön zu wissen warum wieso weshalb ...


Ja, also eventuell auch ein overflow, ich habe gerade mal probiert:

define ('error', 1);
define ('variables', 1);
define ('globals', 1);

$error['error']['variables']['globals'] = &$GLOBALS;

print_r($error);

Und das geht richtig ab, da kann intern vieles schiefgehen...

Ach so, hast du mal verifiziert, daß deine Subscripts ok sind?

Also etwa:

$test = 'globals';
echo "DEBUG: [$test]
";

fG
--

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 23:41:44 von Johannes Vogel

Hi Marcus

Marcus Raub wrote:
> ich bin gerade dabei mir einen Error_Heandler zu schreiben und will die
> Fehler in XML form speichern.
> in der XML Datei möchte ich neben dem Error auch noch die aktuellen
> stände der variablen $_GET, $_POST, $_COOKIE, $_SESSION, $_FILES und
> $GLOBALS speichern.
> Nur leider macht mein PHP code nix mehr seit dem ich die variable $
> GLOBALS in das Array $error laden will.
> Also keine ausgabe mehr mit echo oder sonstiges. Einfach nur ein
> WhiteScreen.

$GLOBALS ist superglobal und somit überall verfügbar.
$GLOBALS enthält sich selbst, ist also rekursiv. Siehe dazu die Ausgabe
von print_r($GLOBALS).
Und genau hier wird auch dein Problem liegen.

Wozu willst du alle Variablen einzeln speichern? Speichere die Ausgabe
von print_r($GLOBALS).

HTH, Johannes

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 23:46:37 von Rudi Menter

schrieb Holger Pollmann:

>>> function error_save($file, $message)
>>> {
>>> global $GLOBALS;
>>> ...
>>> }
>> ^^ get nicht


> Ist ja auch Unsinn.

Nein, nicht wenn man versucht z.B. einen "Internal Compiler Error"
aufzuspüren oder etwas ähnliches (derartiges war immer unvergeßlich).

Ist genau wie "Gott". Alle Welt lebt, als ob es nichts sichereres
gäbe als diesen. Huh, aber die Welt ist leider verblödet und Technik
ist total unsicher und fehlbar! Und du erst recht, du wirkst naiv bis
dumm, wenn man sich diese Meinungsfreiheit noch erlauben darf, vor
einem abgebrochenen Juristen wie dir.

> $GLOBALS ist superglobal, also automatisch in jedem Scope präsent.

Ja, und wenn man sich immer die Hände wäscht wird man nie krank.

Und wer brav ist kommt auch nicht vor Gericht,
sondern in den Himmel, joooo! ;)

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 23:49:17 von Rudi Menter

Johannes Vogel:

> $GLOBALS enthält sich selbst, ist also rekursiv.

Ja, absurd...

> Wozu willst du alle Variablen einzeln speichern?
> Speichere die Ausgabe von print_r($GLOBALS).

Perfekte Idee.

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 07.11.2006 23:55:31 von Rudi Menter

schrieb Holger Pollmann:

>>> function error_save($file, $message)
>>> {
>>> global $GLOBALS;
>>> ...
>>> }
>> ^^ geht nicht


> Ist ja auch Unsinn.

Nein, nicht wenn man versucht z.B. einen "Internal Compiler Error"
aufzuspüren oder etwas ähnliches (derartiges war immer unvergeßlich).

Ist genau wie "Gott". Alle Welt lebt, als ob es nichts sichereres
gäbe als diesen. Huh, aber die Welt ist leider verblödet und Technik
ist total unsicher und fehlbar! Und du erst recht, du wirkst naiv bis
dumm, wenn man sich diese Meinungsfreiheit noch erlauben darf, vor
einem abgebrochenen Juristen wie dir.

Beispielsweise sprengen sich, und werden deshalb auch, täglich
viele Menschen sinnlos umgebracht. Unsinn? Nun, keiner sagt,
daß das vernünftig ist, aber Fehler passieren, shit happens.

Man fragt sich wirklich, weshalb euerlei potenzielle Gnaden immer
so überheblich, hart, verbittert und radikal sein muß. Du schenkst
dir wirklich nix, du bist von morgens um 6 bis nachts um 12 und
schreibst pausenlos hier und in der Juristenabteilung herum.

Aber du willst ja nur motzen und die Zeit totschlagen, damit
du dich nicht mit deinem offenbar problembehafteten, schwarzen,
Innenleben befassen mußt, Zeitstrukturierung und Verdrängung.

Mensch schlaf dich mal aus, vielleicht macht dir dann das Leben
auch wieder mal ein wenig Spaß, kein Grund alles mit deinen
boshaften Stimmungen zu vergiften...

"Unsinn"...tst, hast du sonst noch was *konstruktives* beizutragen...

Schau dir lieber mal selbst ins Gesicht, und du wirst auf Jahre
beschäftigt sein, wenn du das überhaupt realisieren kannst, was
du da ... so siehst ;)

> $GLOBALS ist superglobal, also automatisch in jedem Scope präsent.

Ja, und wenn man sich immer die Hände wäscht wird man nie krank.

Und wer brav ist kommt auch nicht vor Gericht, sondern
in den Himmel, joooo! ;)

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 08.11.2006 00:22:11 von Johannes Vogel

Hi Rudi

Rudi Menter wrote a lot of bullshit.

Schon lange nicht mehr gesehen, wie offensiv sich jemand ins Out schoss.
Einige PLONKs hast du dir damit auf sicher verdient.

"Vergessen Sie niemals, dass auf der anderen Seite ein Mensch sitzt!"
Quelle: http://de.wikipedia.org/wiki/Netiquette

Johannes

Re: Einen Pointer zu $GLOBALS in ein Array speichern

am 08.11.2006 00:30:32 von Rudi Menter

Johannes Vogel:

> Hi Rudi

Oh.

> Rudi Menter wrote a lot of bullshit.

Hmm, denkst du...

> Schon lange nicht mehr gesehen, wie offensiv sich jemand
> ins Out schoss.

Das ist mein Ziel, dieses blöde Spielzeug kaputtmachen, nein,
kleiner Scherz... aber immerhin, was man dabei so erlebt... (!)

> Einige PLONKs hast du dir damit auf sicher verdient.

Das ist noch garnix, was glaubst du wie schlimm ich erst dran
bin, wenn die Leute gegen mich *betend* vorgehen. Aber so ist
der ZUstand der Welt, frag einen deiner Hellseher und Astrologen ;)

> "Vergessen Sie niemals, dass auf der anderen Seite ein Mensch sitzt!"
> Quelle: http://de.wikipedia.org/wiki/Netiquette

Das schon, tut mir leid...

> Johannes

fG
--