array aufgeschlüsselt in txt schreiben
Airwolf89
- php
Hi,
mal ne Frage, will ne Art log funktion einbauen, also dass verschiedene Sachen, die auf der seite passiert sind, gespeichert werden. Wie kann ich denn ein array so aufschlüsseln und in ne datei schreiben dass ich in dieser Datei eine Struktur habe wie ich sie habe wenn ich mir das array per print_r ausgeben lasse?
Danke im voraus.
Wie kann ich denn ein array so aufschlüsseln und in ne datei schreiben dass ich in dieser Datei eine Struktur habe wie ich sie habe wenn ich mir das array per print_r ausgeben lasse?
Ein Blick in die Dokumentation von php (jene von print_r) wird dich schnell darauf bringen. Tipp: es ist nicht var_dump()
.
dann nehm ich mal an es ist var_export, macht von der Erklärung her auch Sinn.
habe jetzt folgenden Code:
$LogBar = "logBar.txt";
$Handle = fopen($LogBar, 'ab');
var_export($_POST, true);
$loggedData = $_POST;
fwrite($Handle, $loggedData);
fclose($Handle);
Allerdings werden mir in meiner Datei immer noch lauter Array angezeigt, aber nit das was drin ist...
Allerdings werden mir in meiner Datei immer noch lauter Array angezeigt, aber nit das was drin ist...
Welche Dinge hast du zur Fehlersuche unternommen? Kontrollausgaben z.B.?
hmm, gerade eben, gibt auch damit nur den string array zurück. Hätte eigentlich gedacht dass es damit geht.
Hmm, kriegs ums verrecken nicht hin. Muss doch irgendwie mögliche sein das array aufgeschlüsselt in ne Textdatei zu packen.
Oder gibts schon ne art vorgefertigte Funktion in php womit aufgezeichnet wird was rein kommt und was raus geht?
Oder gibts schon ne art vorgefertigte Funktion in php womit aufgezeichnet wird was rein kommt und was raus geht?
Du meinst den Ausgabepuffer, aber das ist in deinem Fall der Overkill.
print_r() und var_export() sind bei weitem ausreichend, jenachdem welche Struktur du abbilden willst (menschenlesbar, oder durch PHP parsebar).
Ich will das menschenlesbar machen.
Mag ja sein dass das reicht, wäre ich ja auch froh darüber, aber wie gesagt, ich habs ausprobiert und bei entweder hat er mir nur array in das file geschrieben oder mir gleich den inhalt des arrays in meinen response gepackt, ich will ja keines von beiden, nur dass er das array mit seinen Bestandteilen in die textdatei schreibt.
Btw: Arbeite gerade an nem anderen Problem, ist aber eigentlich der gleiche Hintergrund: Wie kann ich jedes einzelne Element eines array prüfen ob es einen bestimmten Typ hat, beispielsweise integer werte? Wenn ich das ganze Array in ein is_numeric oder is_int packe dann krieg ich nen false weil das ja nen array ist. Wie mach ich das? Könnte natürlich jedes einzelne Element durchlaufen lassen, jedoch weiß ich ja nicht wie viele Elemente dieses Array jedes mal haben wird, außerdem gibt es mir ja nen true || false für jedes einzelne element zurück, wo ich dann wieder prüfen muss ob alle werte true sind. Geht das in irgendeiner weise für das gesamte array dass nur ein wert true || false zurückgegeben wird?
Geht das in irgendeiner weise für das gesamte array dass nur ein wert true || false zurückgegeben wird?
Ja es gibt eine Möglichkeit das zu tun - afaik aber keine Built-In-Funktion - ggf. reicht für diesen Zweck dann doch die für dein anderes Vorhaben ausgeschlossene Funktion.
Mahlzeit Airwolf89,
Mag ja sein dass das reicht, wäre ich ja auch froh darüber, aber wie gesagt, ich habs ausprobiert
Was genau hast Du ausprobiert? Hast Du Der Martins Hinweis bzgl. der von Dir gemachten Fehler überhaupt beachtet?
und bei entweder hat er mir nur array in das file geschrieben oder mir gleich den inhalt des arrays in meinen response gepackt,
Was genau hast Du an suits, Der Martins und dedlfix' Hinweisen auf den zweiten Parameter von "print_r()" nicht verstanden?
ich will ja keines von beiden, nur dass er das array mit seinen Bestandteilen in die textdatei schreibt.
MfG,
EKKi
OK, den zweiten Parameter muss ich irgendwie übersehen haben....
Gut, bin jetzt schon mal nen ganzes stück weiter. Das Zeug wird jetzt da rein geschrieben. Allerdings wird mein Bild welches geladen werden soll nicht mehr angezeigt. Es wird generiert und abgespeichert. Wird wahrscheinlich deswegen nicht angezeigt weil meine php Datei folgende Meldung zurückgibt:
<br />
<b>Parse error</b>: parse error in <b>C:\xampp\htdocs\Charts\logger.php</b> on line <b>4</b><br />
Mein Code sieht so aus.
var_export($_POST, true);
$logData = print_r($_POST, true);
$File = "log.txt";
$Handle = fopen($File, 'ab');
fwrite($Handle, $logData);
fclose($Handle);
Kann da keinen Fehler finden, woran liegts?
Nochmal danke.
Ahh, sorry, hatte nur durch nen anderes Problem dessen Code ich erstmal in Kommentare gesetzt habe, die rückgabe der Quelle ebenfalls in diesen Kommentar gesetzt, funktioniert jetzt komplett.
Allerdings (nur zur Schönheit), die Daten werden der Reihe nach in eine Zeile geschrieben, geht das nicht dass man dann im File dieselbe strukturierte Form hat als wie wenn man sich das ausgeben lassen würde?
Mahlzeit Airwolf89,
Allerdings (nur zur Schönheit), die Daten werden der Reihe nach in eine Zeile geschrieben,
Natürlich. Genau das tun die Anweisungen, die Du verwendest.
geht das nicht dass man dann im File dieselbe strukturierte Form hat als wie wenn man sich das ausgeben lassen würde?
1. kommt es darauf an, was Du unter "sich das ausgeben lassen würde" verstehst: meinst Du den Quelltext oder die Anzeige im Browser? Die Funktion "print_r()" liefert einen String zurück, wenn der zweite Parameter auf true steht. Schau Dir den String an.
2. musst Du anschließend ggf. das, was die Funktion zurückliefert, bearbeiten, bevor Du den dann "hübscheren" String in die Datei schreibst. Was genau Du haben willst bzw. als "schön" erachtest, kannst allerdings nur Du sagen.
MfG,
EKKi
Damit meine ich diese "schöne" Strukturierte
Ansicht die man hat wenn ich mir mit
print_r das array ausgeben lasse,
also die Ansicht die ich im Browser habe.
Wie müsste ich das dann bearbeiten?
Habe erst an <pre> gedacht, aber
das kann eigentlich nicht funktionieren
da das ja erst vom Browser verarbeitet wird,
da ich das aber in ne Datei reinschreiben
will fehlt ja die Interpretation durch den
Browser. Also wie muss ich das dann machen?
Gibts da so ne art formatierungsbefehl in php?
Mahlzeit Airwolf89,
Damit meine ich diese "schöne" Strukturierte
Ansicht die man hat wenn ich mir mit
print_r das array ausgeben lasse,
1. Was bedeutet "schön"?
2. Was bedeutet "ausgeben lassen"?
also die Ansicht die ich im Browser habe.
Aha.
Wie müsste ich das dann bearbeiten?
Schau Dir doch an, was "print_r()" zurückgibt. Was ist daran so schwer?
Habe erst an <pre> gedacht, aber
das kann eigentlich nicht funktionieren
Wieso nicht?
da das ja erst vom Browser verarbeitet wird,
Ja, na sicher. Es geht doch schließlich auch um die Ansicht, oder nicht?
da ich das aber in ne Datei reinschreiben
will fehlt ja die Interpretation durch den
Browser. Also wie muss ich das dann machen?
So langsam verstehe ich wirklich gar nichts mehr von Deinem Anliegen ... könntest Du jetzt bitte endlich mal die "Tipps für Fragende" beachten und Dein Problem so schildern, dass man Dich auch ohne Glaskugel versteht?
Gibts da so ne art formatierungsbefehl in php?
Es gibt viele "Formatierungsbefehle" in PHP - welchen davon Du auf welche Art einsetzen solltest, hängt davon, was genau Du konkret eigentlich willst. Und das habe zumindest ich bisher nicht verstanden. Offenbar.
MfG,
EKKi
hi $name,
So langsam verstehe ich wirklich gar nichts mehr von Deinem Anliegen ... könntest Du jetzt bitte endlich mal die "Tipps für Fragende" beachten und Dein Problem so schildern, dass man Dich auch ohne Glaskugel versteht?
ich glaube er möchte das print_r genauso "schön" in die datei geschrieben wird wie es in der browserausgabe zu sehen ist.
gruss
shadow
Genau so ist es. Ich hatte eigentlich gedacht dass ich mich deutlich ausgedrückt hatte, aber manchmal ist das halt nicht so einfach wenn man in der Problematik drinsteckt.
Also nochmal ganz von vorn.
Ich möchte dass der Input und der Output in eine txt datei geschrieben werden. das habe ich ja jetzt schon mit eurer ausdauerndern Hilfe geschafft. Danke dafür.
Jetzt stehen die ganzen Variablen und ihr wert aber in einer einzigen Zeile in dieser Textdatei, wie du sagtest ist das ohne weiteres bearbeiten auch richtig so gut.
Jetzt möchte ich dass in der Datei der Output so da steht als ob ich mir den Inhalt (von print_r) im Browser ausgeben lasse. Das steht dann so in der Form da: (das ist die schöne form die mir print_r im Browser ausgibt)
Array
(
[a] => Apfel
[b] => Banane
[c] => Array
(
[0] => x
[1] => y
[2] => z
)
)
(Hoffe das kommt auch in der Form im Forum an)
Ich hoffe du verstehst jetzt was ich meine. Ich hätte das da oben schon eher posten müssen. Sorry dass ich mich ein wenig unverständlich ausgedrückt habe.
Mahlzeit Airwolf89,
Jetzt stehen die ganzen Variablen und ihr wert aber in einer einzigen Zeile in dieser Textdatei, wie du sagtest ist das ohne weiteres bearbeiten auch richtig so gut.
Was genau steht denn in einer Zeile dieser Datei? Du solltest Dir den String, der letztlich in die Datei geschrieben wird, mal zum Debuggen ausgeben lassen.
Jetzt möchte ich dass in der Datei der Output so da steht als ob ich mir den Inhalt (von print_r) im Browser ausgeben lasse.
Was genau wird denn von "print_r()" ausgegeben - was steht also im Quelltext einer Seite? Wie unterscheidet es sich von der gerenderten Ansicht? Was bewirkt letztendlich einen Unterschied. Wenn Du das herausgefunden hast bzw. Dir das klar ist, dann weißt Du auch, was Du mit dem, was "print_r()" zurückgibt, machen musst, damit es in der Datei genauso aussieht.
Das steht dann so in der Form da: (das ist die schöne form die mir print_r im Browser ausgibt)
Array
(
[a] => Apfel
[b] => Banane
[c] => Array
(
[0] => x
[1] => y
[2] => z
)
)
Das heißt, der Browser erzeugt Zeilenumbrüche und Einrückungen, die Du gerne hättest? Dann schau nach, warum der Browser das macht. Sorge anschließend dafür, dass diese Zeilenumbrüche und Einrückungen auch in der Datei ankommen.
Ich hoffe du verstehst jetzt was ich meine. Ich hätte das da oben schon eher posten müssen. Sorry dass ich mich ein wenig unverständlich ausgedrückt habe.
Kein Problem.
MfG,
EKKi
echo $begrüßung;
Hmm, kriegs ums verrecken nicht hin. Muss doch irgendwie mögliche sein das array aufgeschlüsselt in ne Textdatei zu packen.
Das passiert immer, wenn man ein Array in einen Stringkontext bringen will. Dir wurde doch schon print_r() und var_export() empfohlen. Warum verwendest du die nicht?
Oder gibts schon ne art vorgefertigte Funktion in php womit aufgezeichnet wird was rein kommt und was raus geht?
Bitte artikuliere dich deutlicher, was du damit meinst.
echo "$verabschiedung $name";
Ja, print_r kannsch nit verwenden. Gibt mir zwar die richtige Form aus so wie ich sie haben will. Aber ich wills mir ja nicht anzeigen lassen sondern nur abspeichern. Problem ist dass ich nen ajax request benutze, der fängt nur mal alles auf was ich ausgebe. Ich brauche jedoch zwingend nur einen einzigen string, der die quelle für nen Bild enthält. Wenn da noch was anderes reinkommt gibts probleme.
var_export() habe ich ja schon ausprobiert, aber das hat leider auch nicht funktioniert, da habe ich dann auch nur den string array in meiner textdatei stehen. Dachte ja auch dass das die Lösung sein müsste, jedoch hats halt nit funktioniert.
Was ich mit der Logfunktion meine ist ob es ne vorgefertgite Funktion oder sowas gibt dass mir alle Variablen die an das php script gesendet werden in eine datei schreibt und alle variablen die wieder zurückgegeben werden ebenfalls in diese Datei schreibt. Einfach nur den in- und Output protokolliert.
echo $begrüßung;
Ja, print_r kannsch nit verwenden. Gibt mir zwar die richtige Form aus so wie ich sie haben will. Aber ich wills mir ja nicht anzeigen lassen sondern nur abspeichern.
Bitte informiere dich im PHP-Handbuch zu print_r(), besonders was den zweiten Parameter angeht.
var_export() habe ich ja schon ausprobiert,
Auch var_export() hat diesen zweiten Parameter.
aber das hat leider auch nicht funktioniert, da habe ich dann auch nur den string array in meiner textdatei stehen. Dachte ja auch dass das die Lösung sein müsste, jedoch hats halt nit funktioniert.
Meine Glaskugel sagt dazu, dass du da etwas falsch machst.
Was ich mit der Logfunktion meine ist ob es ne vorgefertgite Funktion oder sowas gibt dass mir alle Variablen die an das php script gesendet werden in eine datei schreibt und alle variablen die wieder zurückgegeben werden ebenfalls in diese Datei schreibt. Einfach nur den in- und Output protokolliert.
PHP stellt einige Werte, die es von der Umgebung (sprich dem Webserver und dem Betriebssystem) bekommt in diversen Arrays zur Verfügung ($_GET, $_POST, $_SERVER, $_ENV, usw.). Zurückgegeben von einem Script werden keine Variablen sondern nur dessen Ausgabe.
Wenn du wissen willst, welche Variablen zu einem bestimmten Zeitpunkt existieren, befrag das Array $GLOBALS. Darin sind allerdings keine Variablen enthalten, die lokal in einer Funktion existieren. An die kommt man meines Wissens nach nur umständlich über einen selbst geschriebenen Errorhandler.
echo "$verabschiedung $name";
Hallo,
dann nehm ich mal an es ist var_export, macht von der Erklärung her auch Sinn.
und was gefiel dir an print_r() nicht? Der zweite Parameter erscheint mir recht nützlich für das, was du beschreibst.
var_export($_POST, true);
"Wandle das Array $_POST in eine darstellbare Form um und wirf das Ergebnis weg."
$loggedData = $_POST;
"Und verwende dann doch lieber das Original-Array."
Allerdings werden mir in meiner Datei immer noch lauter Array angezeigt, aber nit das was drin ist...
Du hast nicht wirklich verstanden, was du da machst, stimmt's?
So long,
Martin
echo $begrüßung;
Wie kann ich denn ein array so aufschlüsseln und in ne datei schreiben dass ich in dieser Datei eine Struktur habe wie ich sie habe wenn ich mir das array per print_r ausgeben lasse?
Wenn dir die Ausgabe von print_r() gefällt, warum schreibst du sie dann nicht in die Datei?
echo "$verabschiedung $name";
Wenn dir die Ausgabe von print_r() gefällt, warum schreibst du sie dann nicht in die Datei?
Das ist natürlich die einfachste Möglichkeit, var_export() ist hingegen parsebar - das bietet bei der Logfileauswertung (sollte man denn eine benötigen) ein paar Vorteile.