CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
09.07.2005, 22:51:02
|
Anfänger
|
|
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
|
|
Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
Hallo!
Ich hoffe, ihr könnt mir hier weiter helfen. Ich möchte ein sprach file auslesen um es online editeren zu können. also ich habe ein Sprachfile das in etwas so aussieht:
Code:
define("PFL_adm_accessrights" ,"Access right");
define("PFL_adm_accessrights_of_gr" ,"Access rights for this group");
define("PFL_adm_accessrights_to_boards" ,"Access rights to the boards");
define("PFL_adm_account_created" ,"Account created");
define("PFL_adm_activate_notify" ,"Aktivate email notification")
Natürlich viele mehr
jetzt möchte ich das zeilenweise durchsuchen und für jede Zeile die jeweiligen defines, also bei zeile 1 zb
"PFL_adm_accessrights" und den wert "Access right"
Auslesen um ein editier formular auf zu bauen.
Beim speichern, soll er dann umgekehrt die entsprechende Zeilen wieder überschreiben und dabei den neuen Wert anstatt den alten (bei Zeile 1 Access right) an der richtigen Stelle wieder einfügen.
Geht das überhaupt mit php? - ich beis mir dran die Zähne aus. jede Zeile ist ja unterschiedlich lang.
Danke für jeden tipp
Gruß: Swishy
|
09.07.2005, 23:13:32
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
Die Datei kannst du mit file() zeilenweise in ein Array lesen. Anschließend durchläufst du das Array mit einer foreach() und filterst sowohl Namen als auch Wert der Konstanten mit einem regulären Ausdruck heraus:
PHP-Code:
<?php
$regex = '#^define\("(.*)"\s*,\s*"(.*)"\);#';
$arr = file($file);
$i = 0;
if($arr !== false) {
foreach($arr as $line) {
$line = trim($line);
preg_match($regex, $line, $matches);
$key = $matches[1];
$val = $matches[2];
print 'Name: <input type="text" name="key[' . $i . ']" value="' . htmlentities($key) . '" />';
print 'Wert: <input type="text" name="val[' . $i . ']" value="' . htmlentities($val) . '" />';
$i++;
}
}
?>
Nach dem Versenden des Formulars setzt du den neuen Inhalt mit Hilfe eine foreach-Schleife zusammen und speicherst diesen in der Datei:
PHP-Code:
<?php
$content = array();
foreach($_POST['key'] as $i => $key) {
$content[] = 'define("' . strip_tags($key) . '", "' . strip_tags($_POST['val'][$i]) . '");';
}
$fp = fopen($file, 'w');
fwrite($fp, implode("\n", $content));
fclose($fp);
?>
Unter Windows sind zwei kleine Änderungen notwendig:
- beim Schreiben in die Datei muss diese vorher zusätzlich noch mit der Option b (binär) geöffnet werden: $fp = fopen($file, 'wb');
- beim Zusammensetzen des Inhaltes geschieht der Zeilenumbruch durch \r\n statt \n: fwrite($fp, implode("\r\n", $content));
|
09.07.2005, 23:54:33
|
Anfänger
|
|
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
|
|
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
Wow - Das war ja mal eine echt schnelle antwort, und es klappt exakt so - Vielen Vielen Dank!
Jetzt hab ich nur noch ein Problem, das die php tags am Anfang und Ende der Datei gelöscht werden, und natürlich auch alle Comments die drin sind
Kann man dem noch sagen irgendwie, das er diese Zeilen überspringt?
Ansonsten zeigt er für diese Zeilen auch felder ohne inhalt und beim speichern sind alle diese Zeilen weg.
Hoffe da gibts auch eine Lösung.
Es ist echt der Hammer was Ihr Profies so drauf habt, da wäre ich nie drauf gekommen.
Greetz: Swishy
|
10.07.2005, 00:15:34
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
Zitat:
Zitat von swishy
Kann man dem noch sagen irgendwie, das er diese Zeilen überspringt?
|
Wenn du preg_match() mit einer if-Abfrage kombinierst, kannst du diese Zeilen überspringen:
PHP-Code:
foreach($arr as $line) {
$line = trim($line);
if(preg_match($regex, $line, $matches)) {
$key = $matches[1];
$val = $matches[2];
print 'Name: <input type="text" name="key[' . $i . ']" value="' . htmlentities($key) . '" />';
print 'Wert: <input type="text" name="val[' . $i . ']" value="' . htmlentities($val) . '" />';
}
$i++;
}
Damit die PHP-Tags später auch wieder in der Datei gespeichert werden, kannst du die Zeilen zum Speichern entsprechend modifizieren:
PHP-Code:
<?php
$content = "<?php\n" . implode("\n", $content) . "\n?>";
fwrite($fp, $content);
?>
|
10.07.2005, 00:21:05
|
Anfänger
|
|
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
|
|
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
Du bist echt der hammer, so hat es geklappt mit den php tags. Nur mit den comments zwischen den zeilen nicht leider:
damit du weist welche ich meine
Code:
//V
define("PFL_adm_view" ,"View");
define("PFL_adm_voluntare_data" ,"Optional user infos");
//W
define("PFL_adm_write_mess_to_user" ,"Write message to user");
define("PFL_adm_write" ,"write");
define("PFL_adm_writer" ,"Writer");
define("PFL_adm_worung_filetype" ,"Wrong file type!");
//X
//Y
define("PFL_adm_yes","Ja");
define("PFL_adm_you_should_indi_file","a file is required to proceed!");
//Z
also die lehren Zeilen und kommentare - kann man die in hidden fields irgendwie sichern - sorry, das ich Dich so löchere, aber wenn ich schon einen finde, der so extrem drauf is mit Wissen -
Wär toll, wenn Du mir da auch noch einen tipp geben kannst:
Danke : Swishy
|
10.07.2005, 00:38:04
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
Achso, jetzt verstehe ich. Dann speichere einfach die Zeilen, die nicht Definitionen von Konstanten darstellen in einer Session zwischen und hole sie dir hinterher wieder:
PHP-Code:
$_SESSION['comments'] = array();
foreach($arr as $line) {
$line = trim($line);
if(preg_match($regex, $line, $matches)) {
$key = $matches[1];
$val = $matches[2];
print 'Name: <input type="text" name="key[' . $i . ']" value="' . htmlentities($key) . '" />';
print 'Wert: <input type="text" name="val[' . $i . ']" value="' . htmlentities($val) . '" />';
} else {
$_SESSION['comments'][$i] = $line;
}
$i++;
}
Allerdings musst du so auch noch einmal Änderungen beim Speichern der Zeilen vornehmen:
PHP-Code:
<?php
// Maximum ermitteln
$max = 0;
// Maximum $_POST
$keys = array_keys($_POST['keys']);
rsort($keys);
$max = $keys[0];
// Maximum $_SESSION
$keys = array_keys($_SESSION['comments']);
rsort($keys);
if($keys[0] > $max)
$max = $keys[0];
$content = array();
for($i = 0; $i < $max; $i++) {
if(array_key_exists($i, $_POST['keys'])) {
$content[] = 'define("' . strip_tags($key) . '", "' . strip_tags($_POST['val'][$i]) . '");';
} else {
$content[] = $_SESSION['comments'][$i];
}
}
// und dann so weiter wie im 1. Beispiel
?>
|
10.07.2005, 01:00:12
|
Anfänger
|
|
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
|
|
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
also ich hab das jetzt dann beim speichern so:
Code:
// Maximum ermitteln
$max = 0;
// Maximum $_POST
$keys = array_keys($_POST['keys']);
rsort($keys);
$max = $keys[0];
// Maximum $_SESSION
$keys = array_keys($_SESSION['comments']);
rsort($keys);
if($keys[0] > $max)
$max = $keys[0];
$content = array();
for($i = 0; $i < $max; $i++) {
if(array_key_exists($i, $_POST['key'])) {
$content[] = 'define("' . strip_tags($key) . '", "' . strip_tags($_POST['val'][$i]) . '");';
} else {
$content[] = $_SESSION['comments'][$i];
}
}
$fp = fopen($file, 'w');
fwrite($fp, implode("\n", $content));
fclose($fp);
und beim erfassen so:
Code:
function showLanguage($file) {
$file = stripslashes($file);
$f=fopen($file,"r");
$content = fread($f, filesize($file));
$content = htmlspecialchars($content);
$regex = '#^define\("(.*)"\s*,\s*"(.*)"\);#';
$arr = file($file);
$i = 0;
if($arr !== false) {
$_SESSION['comments'] = array();
foreach($arr as $line) {
$line = trim($line);
if(preg_match($regex, $line, $matches)) {
$key = $matches[1];
$val = $matches[2];
print '<tr>';
print '<td width="20%" class="left">' . htmlentities($key) . ' <input type="hidden" name="key[' . $i . ']" value="' . htmlentities($key) . '" /></td>';
print '<td class="left"><input size="100" type="text" name="val[' . $i . ']" value="' . htmlentities($val) . '" /></td>';
print '</tr>';
}else{
$_SESSION['comments'][$i] = $line;
echo "<tr><th colspan=2>$line</th></tr>";
}
$i++;
}
}
}
aber er speichert nix ab von den Änderungen - aber er liest wie du gesagt hast die comments extra aus
Hab ich was irgendwo falsch?
Danke: Swishy
|
10.07.2005, 01:03:40
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
Pack mal folgende Zeilen direkt vor die for-Schleife:
PHP-Code:
<?php
print '<pre>';
var_dump($max);
print_r($_POST);
print_r($_SESSION);
print '</pre>';
?>
Wie sieht die Ausgabe aus?
Nachtrag: Du kannst dir auch $content vor fwrite() mal mit print_r() anzeigen lassen.
Geändert von xabbuh (10.07.2005 um 01:04:35 Uhr)
|
10.07.2005, 01:05:14
|
Anfänger
|
|
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
|
|
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
Zurück - ich bin Depp - is wohl schon zu spät, hab die falsche Zieldatei angegeben - jetzt klappt es!
Du bist echt ein php Gott - Danke - das hat mir voll weitergeholfen - Jetzt kann ich alles fertig machen dank dir. soll ich dich irgendwo im code erwähnen als mithelfer? - was sollt ich dann reinschreiben über dich?
Danke Danke Danke: Swishy
|
10.07.2005, 01:07:40
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren
Zitat:
Zitat von swishy
soll ich dich irgendwo im code erwähnen als mithelfer? - was sollt ich dann reinschreiben über dich?
|
Nene, lass mal. :-)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 10:40:33 Uhr.
|