PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

13-12-2006, 23:26
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 64
|
|
File aus Verzeichnis lesen, ändern und in anderes Verzeichnis schreiben
Liebe PHP-Spezialisten
Ich habe ein Verzeichnis "xml", aus dem von jeder Datei den Inhalt lesen und ein Wort mit einem anderen Wort ersetzen (bei allen Dateien handelt es sich um das gleiche Wort). Wenn dieses Wort in jeder Datei ersetzt wurde, will ich die Dateien in ein neues Verzeichnis "xmlneu" schreiben.
Mein Ansatz sieht bisher so aus:
PHP-Code:
// aktuelles Verzeichnis oeffnen
$dh=opendir('./'); // dh = directory handle
// . und .. ueberspringen - werden immer als erstes aufgelistet
readdir($dh); readdir($dh);
// Dateiname fuer Dateiname durchgehen
while (false !== $fn=readdir($dh)) { // fn = filename
// Wenn Dateiname mit .php endet, dann...
if (substr($fn, -4)=='.xml') {
// ...Inhalt einlesen und bearbeiten
$fc=join('', file($fn)); // fc = file content
$fc=str_replace('titel', 'neuer titel', $fc);
// Datei mit neuem Inhalt speichern
$fh=@fopen($fn, 'w'); // fh = file handle
if ($fh) {
fwrite($fh, $fc);
fclose($fh);
echo "+ $fn<br />";
}
else {
echo "- $fn<br />";
}
}
}
Im Moment erhalte ich beim Aufruf der PHP-Seite mit obrigen Code einfach nur eine Liste auf der alle Dateien aufgeführt sind. Jedoch wird der Inhalt nicht geändert.
Und wie ich dann diese Dateien in ein neues Verzeichnis schreiben kann, ist mir auch nicht ganz klar.
Vielen Dank für eure Hilfe
|

13-12-2006, 23:31
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
|
|
Wer Fehler sucht, sollte Fehlermeldungen nicht unterdrücken. Weg mit dem @, error_reporting aufgedreht und Debugausgaben eingebaut!
|

13-12-2006, 23:40
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Re: File aus Verzeichnis lesen, ändern und in anderes Verzeichnis schreiben
Zitat:
Original geschrieben von Fanello
PHP-Code:
// aktuelles Verzeichnis oeffnen
// . und .. ueberspringen - werden immer als erstes aufgelistet
readdir($dh); readdir($dh);
|
Es ist üblich, '.' und '..' in der Schleife "herauszufiltern", indem der nächste Schleifendurchlauf eingeleitet wird, sobald eins von beiden auftaucht:
PHP-Code:
while (FALSE !== ($entry = readdir($handle)))
{
if ($entry == '.' || $entry == '..')
{
continue;
}
}
|

13-12-2006, 23:41
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 64
|
|
tatsächlich...
jetzt bringt es mir wenigstens eine Fehlermeldung, was zu diesem Zeitpunkt absolut konstruktiv ist.
Warning: fopen(einzelori.xml) [function.fopen]: failed to open stream: Permission denied in /srv/www/websites/anzeiger/xml/xmltest.php on line 18
- einzelori.xml
Diese Fehlermeldung kommt 6x, also für jede Datei die in diesem Verzeichnis ist.
Aber dieses "Permission denied" ist mir nicht ganz klar. Das Verzeichnis in dem die Files liegen hat die Rechte auf 777 gesetzt.
|

13-12-2006, 23:43
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Und die Dateien selbst auch?
|

14-12-2006, 00:08
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 64
|
|
Zitat:
Original geschrieben von Griecherus
Und die Dateien selbst auch?
|
jetzt habe ich zuerst mal die Verzeichnisse '.' und '..' rausgefiltert, und das hat schon einiges gebracht. Bei 4 von 6 Dateien ist was passiert. Bei 2 Dateien ist weiterhin die "Permission denied"-Fehlermeldung da.
Bei den Dateien bei denen es funktioniert hat, sind die Rechte auf "-rwxrwxrwx" gesetzt, bei den anderen auf "-rwxr--r--". Habe jetzt auch bei den letzten beiden die Rechte auf "rwxrwxrwx" gesetzt, und es klappte jetzt bei allen.
Ist es irgendwie möglich dass bei jeder Datei schon von Anfang an die richtigen Rechte gesetzt sind?
Und wie kann ich jetzt diese Dateien in ein anderes Verzeichnis kopieren?
|

14-12-2006, 00:15
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Schau dir im Manual mal die Funktion chmod() an. Damit kannst du die Zugriffsrechte von Dateien ändern. Und copy() hilft dir beim Kopieren.
|

14-12-2006, 04:03
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
@topicstarter
Wenn du immer Dateien mit derselben Dateiendung verabeiten willst, dann würde ich dir glob() empfehlen
PHP-Code:
//Verzeichnis auslesen
$dateien = glob($_SERVER['DOCUMENT_ROOT'].'/xml/*.xml');
// Dateiname fuer Dateiname durchgehen
foreach($dateien as $wert){
// ...Inhalt einlesen und bearbeiten
$inhalt = str_replace('titel','neuer Titel',file_get_contents($wert));
$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/neuxml/'.basename($wert),'w');
// Datei mit neuem Inhalt speichern
if($fp) {
fwrite($fp, $inhalt);
fclose($fp);
}else{
die('Fehler beim Öffnen der Datei');
}
}
Gruss
tobi
|

14-12-2006, 14:59
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
@jahlives: Ich habe letztens erst im Hardened-PHP Project Forum gelesen, dass glob() einen Bug haben soll, der wohl noch nicht gefixt worden sei:
Zitat:
... glob() can still fetch all filenames in a directory not owned by the same UID as the user, if just the first file in the directory (or more specific, the glob-pattern) happens to be owned by the same user as the PHP-script.
|
Hat jemand irgendwelche Erfahrungen damit gemacht?
|

14-12-2006, 15:16
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 64
|
|
@jahlives
ist scho kurios.. habs jetzt mit glob() gemacht und am Anfang kamen auch wieder Meldungen wegen Fehlermeldungen.. und dann auf einmal nicht mehr. Um sicher zu gehen habe ich alle dateien aus dem Verzeichnis "xml" gelöscht und wieder neue reinkopiert. Und es funktionierte von Anfang an...
Ich beobachte es mal noch weiter....
Auf jeden Fall vielen Dank an alle die mir bisher geholfen haben!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
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.
|
|
|
|
PHP News
|