File öffnen mit gleichen Namen wieder abspeichern

F

Fanello

Guest
hallo Leute
ich hab auf meinem Webserver ein Verzeichnis mit dutzenden von Files. Ich hätte nun gerne mit PHP eine Automatisierung die alle Files öffnet und in ein anderes Verzeichnis speichert. Dabei sollen diese Files eine neue Datei-Endung kriegen. Also z.B. statt .inc neu .php
Wäre ich da mit "fopen" auf dem richtigen Weg?

Danke und Gruss
 
Hallo,

das Alleine wird nicht reichen, dazu muss man etwas basteln ;-)
Kleiner Tipp: Du muss eine Funktion schreiben, die sich selber wieder aufruft in den einzelnen Unterverzeichnissen und als Gundlage dazu muss Du auf die Verzeichnissteuerung [1] zurückgreifen und in diesem Fall noch auf die copy Funktion.

Irgendwo habe ich auch noch ein solches Script, was nur leicht angepasst werden müsste, doch das kann ich nicht heute noch raussuchen.


MfG Sascha Ahlers

[1] http://www.php.net/manual/de/ref.dir.php
 
QUOTE Kleiner Tipp: Du muss eine Funktion schreiben, die sich selber wieder aufruft


Dies nennt sich eine rekursive Funktion.
wink.gif
Pass nur auf, dass du damit nicht in einer Endlosschleife landest!
tongue.gif


Mach etwas wie das:


CODE
function getFilesArray($dir) {
$files = array();
$fileHandler = fopen($dir);
while($file = readfile($fileHandler)) {
if(is_dir($dir."/".$file) && $file != "." && $file != "..") { // Wenn Datei ein Ordner ist dann durchsuche auch diesen
$files = array_merge($files,getFilesArray($dir."/".$file));
} else {
$files[] = $dir."/".$file;
}
}
return $files;
}



Damit erhältst du alle Dateinamen innerhalb eines Ordners und all dessen Unterordner.
Nun kannst du über den zurückgelieferten Array mit den Dateinamen iterieren und mit den Dateien machen, was du willst.
smile.gif


Um die Dateiendung zu ändern kannst du


CODE
$filenameWithoutExtension = filename($filename);
$newFilename = $filenameWithoutExtension.".php"; // Ändere Dateiendung zu .php



verwenden.

Grüsse
Josh

PS: Habe obigen Code nicht selbst getestet, aber sollte vom Prinzip her funktionieren.
wink.gif
 
danke Jungs, werde mal alles ein wenig durchtesten.
 
QUOTE (Josh @ Do 28.7.2005, 7:59)
CODE
function getFilesArray($dir) {
$files = array();
$fileHandler = fopen($dir);
while($file = readfile($fileHandler)) {
if(is_dir($dir."/".$file) && $file != "." && $file != "..") { // Wenn Datei ein Ordner ist dann durchsuche auch diesen
$files = array_merge($files,getFilesArray($dir."/".$file));
} else {
$files[] = $dir."/".$file;
}
}
return $files;
}




hallo Josh
sorry jetzt komm vielleicht eine etwas blöde Frage...
rolleyes.gif

Wie weiss diese Funktion um welches Verzeichnis es sich handelt?
Kann ich am Anfagn einfach
$dir = "meinverzeichnis";
schreiben?
Wird der Inhalt des Verzeichnisses mit return $files; gezeigt oder muss ich noch einen print-Befehl ausführen?

Vielen Dank
ein "Ichweissdassicheinanfängerbinundmöchtedochschonalleskönnen".
smile.gif
 
wink.gif
Naja, mach dich mal etwas schlau über Funktionen:

Functions Tutorial (weiss nicht ob das gut ist, habs nur kurz über Google gefunden)

QUOTE Wie weiss diese Funktion um welches Verzeichnis es sich handelt?

Übergib beim Aufrufen einfach den Pfad zum Ordner per Parameter:


CODE getFilesArray("pfad/zum/ordner/");


Die Funktion gibt nix aus. Sie gibt nur ein Array zurück mit allen Dateinamen. Diesen kannst du in eine Variable speichern und weiterverwenden:


CODE $files = getFilesArray("pfad/zum/ordner/");


Klaro?
smile.gif
 
QUOTE (Josh @ Do 28.7.2005, 9:22) Die Funktion gibt nix aus. Sie gibt nur ein Array zurück mit allen Dateinamen. Diesen kannst du in eine Variable speichern und weiterverwenden:


CODE $files = getFilesArray("pfad/zum/ordner/");


Klaro?
smile.gif


ja, eigentlich schon. Aber es funktioniert nicht. Ich sollte doch auch ein Array ausgeben können, oder?
Z.B. mit
echo $files[];

oder liege ich da falsch. Ich muss nämlich die Dateinamen tatsächlich weiterverwenden. Ich wollte nicht von Anfang an mein ganzes Problem aufführen, weil ich mich schrittweise selber (und mit eurer Hilfe natürlich) der Endlösung nähern wollte.

Also, alle xml-Dateien aus dem Verzeichnis x müssen in html umgewandelt werden und ins Verzeichnis y abgelegt werden.
Die Umwandlung einer einzelnen Datei funktioniert bestens.



CODE <?php
$xh=xslt_create();

xslt_set_error_handler($xh, xslt_trap_error);
xslt_process($xh,'test1.xml','xml2html.xsl','test2.html');
xslt_free ($xh);

function xslt_trap_error($proc, $errorno, $level, $fields) {
$text="XSLT-Fehler: ".$errorno."<br />";
if(is_array($fields)) {
while(list($key, $value) = each($fields)) {
$text .= "<br>$key: $value";
}
}
}
?>


Jetzt will ich eigentlich test1.xml und test2.html mit den Dateien des xml-Ordners und des Ziel-Html-Ornders ersetzen. Und ich finde der Weg wäre ja nicht mal so falsch..

Gruss
Fanello
 
QUOTE Ich sollte doch auch ein Array ausgeben können, oder?
Z.B. mit
echo $files[];


Arrays gibts du am beste so aus:


CODE foreach($files as $crntFile) {
echo $crntFile;
}


Bitte google nächstes Mal zuerst bei solch simplen Fragen...
dry.gif
 
QUOTE (Josh @ Do 28.7.2005, 12:59) Bitte google nächstes Mal zuerst bei solch simplen Fragen...
dry.gif


hab ich natürlich.. aber da gehen immer alle von eher profimässigem wissen aus..
und das ist oft auch das problem bei foren
dry.gif
 
QUOTE (Fanello @ Do 28.7.2005, 13:04)
QUOTE (Josh @ Do 28.7.2005, 12:59) Bitte google nächstes Mal zuerst bei solch simplen Fragen...
dry.gif


hab ich natürlich.. aber da gehen immer alle von eher profimässigem wissen aus..
und das ist oft auch das problem bei foren
dry.gif


Kleiner Tipp: bei solchen Fragen immer ein "Hab schon gegoogelt, aber leider nichts gefunden. Sorry" hinzufügen, dann kann dir niemand böse sein und alle denken "oooch, was für ein armer Junge, dem will ich als grosser Profi doch mal auf die Sprünge helfen"...
laugh.gif


PS: nützt auch, wenn man tatsächlich zu faul war, um erst zu googeln...
rolleyes.gif
 
QUOTE (Josh @ Do 28.7.2005, 13:15) PS: nützt auch, wenn man tatsächlich zu faul war, um erst zu googeln...
rolleyes.gif


an der Faulheit solls wirklich nicht liegen....
Ich trau mich jetzt fast nicht was zu fragen...
unsure.gif
aber warum zum Geier wird da überhaupt nix ausgegeben, nicht mal das echo "Files"; ???



CODE
<?
function getFilesArray($dir = "xmlqxp/") {
$files = array();
$fileHandler = fopen($dir);
while($file = readfile($fileHandler)) {
if(is_dir($dir."/".$file) && $file != "." && $file != "..") { // Wenn Datei ein Ordner ist dann durchsuche auch diesen
$files = array_merge($files,getFilesArray($dir."/".$file));
} else {
$files[] = $dir."/".$file;
}
}
return $files;

echo "Files:<br />";
foreach($files as $crntFile) {
echo $crntFile;
}
}
?>


Kann es sogar sein dass das Array leer ist?
 
Natürlich darfst du jederzeit alles fragen, was du willst, solange du erst kurz googelst und schaust, ob du die Antwort nicht auch so findest. Wollte dich nicht einschüchtern, sorry.
smile.gif


Wegen dem Code:
Mit diesem Code deklarierst du die Funktion nur, aber rufst sie nicht auf! Bitte mach dich schlau über Funktionen, hab dir oben ja einen Link zu einem Tutorial gepostet.

Danach machst du ganz einfach Folgendes:

CODE
<?php
function getFilesArray($dir) {
$files = array();
$fileHandler = opendir($dir);
while($file = readdir($fileHandler)) {
if($file != "." && $file != "..") {
if(is_dir($dir."/".$file)) { // Wenn Datei ein Ordner ist dann durchsuche auch diesen
$files = array_merge($files,getFilesArray($dir."/".$file));
} else {
$files[] = $dir."/".$file;
}
}
}
return $files;
}

$files = getFilesArray("files"); // Den abschliessenden Schrägstrich braucht's an sich nicht, aber ich füge den immer hinzu um gleich erkennen zu können, ob es sich beim Pfad um einen Datei- oder Ordnerpfad handelt

foreach($files as $crntFile) {
echo "$crntFile<br>";
}
?>

 
Zurück
Oben