Php als .txt
Pimmeläffchen
- php
0 fastix®0 Pimmeläffchen
0 hotti
Hi,
eine vermutlich, hoffentlich, einfache Frage:
Ich habe eine Php-Datei, die eine DB-Tabelle ausliest. Die Daten werden so dargestellt:
Mitglied1 Telefonnummer
Mitglied2 Telefonnummer
Mitglied3 Telefonnummer
Mitglied4 Telefonnummer
Also eigentlich alles gut. Die Datei mit dieser Ausgabe brauche ich jetzt aber als .txt. Wie stelle ich das denn an?
Danke!
Moin!
Die Datei mit dieser Ausgabe brauche ich jetzt aber als .txt. Wie stelle ich das denn an?
Nun, das ist wesentlich einfacher als die Ausgabe zu einer HTML-Datei zu ergänzen zu formatieren. Es ist sogar absolut trivial. Hast Du denn schon mal versucht, den Quelltext Deiner php-Datei zu lesen und zu ändern?
Wenn Du das nicht hinbekommst, dann empfehle ich Dir dringend die Grundkenntnisse zu erwerben oder jemanden zu beauftragen, der es kann.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
» Wenn Du das nicht hinbekommst, dann empfehle ich Dir dringend die Grundkenntnisse zu erwerben oder jemanden zu beauftragen, der es kann.
Über eine entsprechende Quelle, wo dieses Problem erläutert wird, würde ich mich sehr freuen.
Über eine entsprechende Quelle, wo dieses Problem erläutert wird, würde ich mich sehr freuen.
Google einfach danach.
Php text in datei schreiben
Gruß, Friedhelm
Moin!
Über eine entsprechende Quelle, wo dieses Problem erläutert wird, würde ich mich sehr freuen.
So lange Du nicht sagst, was dabei genau Dein Problem, ist kann ich nur auf das PHP-Handbuch verweisen. Übrigens eines das beste mir bekannte Online-Handbücher zu einer Programmiersprache überhaupt.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
» So lange Du nicht sagst, was dabei genau Dein Problem, ist kann ich nur auf das PHP-Handbuch verweisen.
Ich dachte, dass das klar wäre, weil das Problem doch »absolut trivial
ist?!
Ich muss sagen, dass ich kein Fachmann bin, das hat man aber vermutlich schon gemerkt :-). Ich habe eine Liste, die ich mit MySQL und PHP ausgeben kann. Das kann ich mittlerweile, wie gesagt, ich mache das ein bisschen als Hobby. Die Liste wird als Php-Datei so ausgegeben wie bereits erwähnt, also
Name des Mitglieds 1 Handynummer
Name des Mitglieds 2 Handynummer
Name des Mitglieds 3 Handynummer
Name des Mitglieds 4 Handynummer
wenn ich datei.php aufrufe.
Das sieht im Quelltext natürlich nicht so schön klar aus, da das durch <br> verursacht wird.
Mein Kumpel, für den ich das mache, hätte die Ausgabe gerne als datei.txt, damit er das irgendwo importieren kann. Und wie das geht, weiß ich nicht. Ich bin die Grundlagen mit fopen etc. schon mal durchgegangen und habe damals bei meinen Anfängen auch ein kleines Gästebuch damit erstellt. Allerdings fällt mir die Übertragung von dem MySQL-Übertrag und der entsprechenden Speicherung schwer. Nein, das fällt nicht schwer, ich weiß überhaupt nicht, wie das gehen soll.
Moin!
<?php # keine Leerzeile vorher!
$csv_trennzeichen=';';
$csv_zeilenende='\r\n'; # Für Windows...
$csv_stringbegrenzer='"';
$senden=false;
$speichern=true;
$filename="./telefonliste.csv";
# Verbindungsaufnahme zur Datenbank
# Bauen der Query
# Senden der Query. Resultat nach $result
$arCSV=array();
while while ($row = mysql_fetch_array($result)) {
$arCSV[]=$csv_stringbegrenzer.$row[0].$csv_stringbegrenzer.$csv_trennzeichen.$csv_stringbegrenzer.$row[0].$csv_stringbegrenzer;
}
if ($senden) {
header("Content-type: text/csv");
header('Content-Disposition: attachment; filename="telefonliste.csv"');
print implode($csv_zeilenende, $arCSV);
}
if ($speichern) {
if (file_put_contents($filename, implode($csv_zeilenende, $arCSV))) {
print "in $filename wurden ".count($arCSV)." Zeilen gespeichert.");
} else {
print: "Du Depp! Du musst einen Ordner angeben, in welchem eine Datei gespeichert werden darf. Untersuche die Konfiguration Deines Skriptes!<br>Abbruch wegen fatalen Fehlers beim Schreiben von $filename";
}
}
?>
1. Was bitte ist hieran nicht trivial?
2. Wie kann man in der Lage sein, eine Datenbank abzufragen - aber nicht dazu, die Ergebnisse in der Form abzulegen oder zu senden, wie man sie braucht. Das steht in jedem Handbuch und ist mit Google jederzeit auffindbar.
3. Der 20-Zeiler ist aus dem Stegreif geschrieben. Finde und entferne Typos selbst.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi!
$arCSV[]=$csv_stringbegrenzer.$row[0].$csv_stringbegrenzer.$csv_trennzeichen.$csv_stringbegrenzer.$row[0].$csv_stringbegrenzer;
Und was ist mit den Stringbegrenzungszeichen und Zeilenumbrüchen, die Bestandteil der Daten sind? Wenn man sich nicht selbst darum kümmern möchte, kann man die für das Erzeugen von CSV-Zeilen vorgesehene Funktion fputcsv() verwenden. Allerdings schreibt diese nur in Dateien und ein String erzeugendes Pendant dazu gibt es nicht. Man kann aber auch mit den üblichen Datei-Funktionen (in dem Fall braucht man fopen) ohne das Anlegen Datei auskommen, wenn man den Memory-Wrapper nimmt. Auf der verlinkten Seite ist (anhand des Temp-Wrappers) ein Beispiel zu sehen, wie man diese Pseudodatei wieder auslesen kann.
- Was bitte ist hieran nicht trivial?
Anscheinend mal wieder die Beachtung des Kontextwechsels.
Lo!
Moin!
$arCSV[]=$csv_stringbegrenzer.$row[0].$csv_stringbegrenzer.$csv_trennzeichen.$csv_stringbegrenzer.$row[0].$csv_stringbegrenzer;
Und was ist mit den Stringbegrenzungszeichen und Zeilenumbrüchen, die Bestandteil der Daten sind?
1. Wie konnte ich nur vergessen, dass Namen und Telefonnummern REGELMÄßIG Stringbegrenzungszeichen und vor allem Zeilenumbrüche enthalten.
2. Zeilenumbrüche innerhalb von Stringbegrenzungszeichen sollen eigentlich beim Einlesen von CSV ignoriert werden.
- Was bitte ist hieran nicht trivial?
Anscheinend mal wieder die Beachtung des Kontextwechsels.
Oh ja. Der K O N T E X T W E C H S E L !
Zur hilfreichen Kritik fehlt Dir dann aber die Korrektur:
In Konfigurationsteil einfügen:
$csv_maskierungszeichen='\\'; # Ein Backslash (maskiert, damit man ihn als String übergeben kann.)
Diese Zeile ändern:
$arCSV[] = $csv_stringbegrenzer . str_replace($csv_stringbegrenzer, $csv_maskierungszeichen.$csv_stringbegrenzer, $row[0]) . $csv_stringbegrenzer .$csv_trennzeichen. $csv_stringbegrenzer . str_replace($csv_stringbegrenzer, $csv_maskierungszeichen . $csv_stringbegrenzer, $row[1]) . $csv_stringbegrenzer;
Das das zweite $row[0] eigentlich $row[1] heißen müsste ist Dir aber nicht aufgefallen. Du lässt nach.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi!
- Wie konnte ich nur vergessen, dass Namen und Telefonnummern REGELMÄßIG Stringbegrenzungszeichen und vor allem Zeilenumbrüche enthalten.
Natürlich. Es kommt nicht nur auf das regelmäßig an, sondern auch auf die Ausnahmen.
- Zeilenumbrüche innerhalb von Stringbegrenzungszeichen sollen eigentlich beim Einlesen von CSV ignoriert werden.
Ja, das war bereits durch die Begrenzer abgehandelt.
Das das zweite $row[0] eigentlich $row[1] heißen müsste ist Dir aber nicht aufgefallen.
Doch schon, aber das Typo-Finden hast du ja gnädigerweise dem Probleminhaber überlassen. Das heißt, du postest mal wieder Lösungen, die du nicht mal getestet hast. Da ist übrigens auch noch ein while zu viel.
Lo!
Moin!
Natürlich. Es kommt nicht nur auf das regelmäßig an, sondern auch auf die Ausnahmen.
Nun, das Problem mit den vielen Personen, die "Willam O'Haras" heißen war ja schon durch die Auswahl des Doublequota erschlagen. Es geht, wie vom Fragenden beschrieben, um eine Namen - Telefonliste die bereits gespeichert ist. Ob weitere Probleme auftreten können muss er wissen, denn er weiß (oder müsste wissen) wo die Daten herkommen.
Ja, das war bereits durch die Begrenzer abgehandelt.
THX. In allgemeinen CSV - Dateien kann allerdings was anderes gelten, wenn (warum auch immer dieser von jemand dieser schlechte Weg begangen werden sollte) keine Stringbegrenzer verwendet werden. Insofern hast Du mit dem Verweis auf die fehlende Maskierung der Zeilenumbrüche nicht gänzlich unrecht.
Das heißt, du postest mal wieder Lösungen, die du nicht mal getestet hast.
Diese Aussage ist korrekt. Ich sehe darin jedoch keinen Fehler - zumal ich ausdrücklich darauf hinweise. Wie ich schon mal gesagt habe: Ich poste den Code weil ich in dem Augenblick der Meinung bin, dass ein andere Form des Ausdruckes schlicht sehr viel mehr Aufwand (zu tippender Text) machen würde. Deshalb finden sich ja auch die Stellen in denen ich "nicht ganz unwesentliche" Programmteile durch Kommentare (wie: "# Verbindung zur Datenbank") darstelle.
PHP ist als Skriptsprache "menschen- und maschinenlesbar". Warum sollte ich den Umstand nicht nutzen? Man kann sich so sehr eindeutig ausdrücken.
Da ist übrigens auch noch ein while zu viel.
Stimmt. Asche auf mein ohnehin graues Haupt.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Danke für die ausführlichen Antworten.
Für einen Laien ist die Sache in der Tat nicht trivial. Die Zeit, sich mit der Thematik zu befassen, ist bei einem Hobby begrenzt.
Ich weiß nicht, ob man sich dann mit Aussagen wie "was ist daran nicht trivial?" profilieren will, der angeschlagene Ton ist jedenfalls unhöflich. Es kann nicht davon ausgegangen werden, dass jeder Expertenwissen mitbringt.
Bevor ich die Keule abbekomme ich mir unterstellt wird, dass ich fertige Lösungen serviert bekommen möchte, möchte ich dem hiermit gleich entgegen wirken. Davon war nie die Rede.
Dennoch nochmals vielen Dank für die Hilfe. Ich werde versuchen, dass mit diesen Ansätzen zu lösen.
Moin!
Du wolltest Hilfe. Trotz der konkreten und ZWEITEN Nachfrage woran Du gescheitert bist hast Du schlicht Deine Gesamtfrage wiederholt ohne darzustellen woran _genau_ Deine Bemühungen gescheitert sind, statt dessen irgendetwas von wegen unschönem <br> gelabert - und das müsste man nun wirklich nur weglassen. Durch die weit daneben gehende Antwort hast Du das Antworten unnötig erschwert, weil triviale und Dir sehr wahrscheinlich bekannte Sachen mit erklärt werden mussten. Das heißt aber auch: Durch die Verweigerung einer Antwort hast Du Anlass dazu gegeben Dich für unwissend und unhöflich zu halten.
Und ja - gegenüber dem Holen der Daten aus einer Quelle und dem Darstellen als HTML ist das Schreiben einer Textdatei oder das Senden der Daten als als Text wirklich ausgesprochen trivial.
Beides sind zudem Grundlagen und die speziellen Geschichten mit dem header sind an sich sogar unnötig, weil Dein Freund auch mit gesendeten Mime-Typ "text/html" gesendete Text-Daten als Text-Datei speichern (Datei -> Speichern unter) und dann in seine Anwendung importieren kann.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Schäm Dich und bessere Dich
'ǝɯɐu$ ıɥ
dito
ssnɹƃ
ʍopɐɥs
Hallo,
Die Zeit, sich mit der Thematik zu befassen, ist bei einem Hobby begrenzt.
im Gegenteil: Gerade wenn man ein Thema als Hobby betreibt, hat man doch beliebig viel Zeit dafür. Begrenzt ist die Zeit höchstens, wenn man das als Beruf macht und der Chef drängelt: "Ich brauch' das fertige Script bis heute mittag!"
Dennoch nochmals vielen Dank für die Hilfe. Ich werde versuchen, dass mit diesen Ansätzen zu lösen.
Gut. Viel Erfolg dabei!
Ciao,
Martin
Hi!
Ob weitere Probleme auftreten können muss er wissen, denn er weiß (oder müsste wissen) wo die Daten herkommen.
Warum soll man das wissen müssen und vor allem stets im Hinterkopf behalten, wenn sich mal irgendwas ändert? Gleich richtig machen ist ein kleiner Aufwand mit dem Nutzen, dass es für alle Fälle passt.
Das heißt, du postest mal wieder Lösungen, die du nicht mal getestet hast.
Diese Aussage ist korrekt. Ich sehe darin jedoch keinen Fehler - zumal ich ausdrücklich darauf hinweise.
Warum postest du überhaupt Code, bei dem du in Kauf nimmst, dass er nicht läuft? Pseudo-Code oder eine genaue Ablaufbeschreibung tuts doch in eigentlich auch, um einen möglichen Lösungsweg aufzuzeigen. Üblicherweise wollen wir™ hier ja, dass der Probleminhaber auch etwas lernt und nicht nur zu kopieren braucht. Wenn er den Pseudocode auch nach Erklärung nicht umzusetzen versteht, kann man anschließend immer noch Codebeispiele bringen.
Wie ich schon mal gesagt habe: Ich poste den Code weil ich in dem Augenblick der Meinung bin, dass ein andere Form des Ausdruckes schlicht sehr viel mehr Aufwand (zu tippender Text) machen würde.
Probier es mal mit Pseudo-Code, der ist noch kürzer :-)
Lo!
Hi!
$csv_zeilenende='\r\n'; # Für Windows...
Hier brauchst übrigens die doppelten Anführungszeichen, sonst ergibt das keinen Zeilenumbruch.
Lo!
hi,
Mitglied1 Telefonnummer
Mitglied2 Telefonnummer
Mitglied3 Telefonnummer
Mitglied4 TelefonnummerAlso eigentlich alles gut. Die Datei mit dieser Ausgabe brauche ich jetzt aber als .txt. Wie stelle ich das denn an?
Am Einfachsten leitest Du die Ausgabe vom Script einfach in eine Datei um:
myscript.php > datei
Fertisch,
Horst