Datei auf dem Server verschieben
Dennis
- php
Hi @all
ich bin gerade dabei, mir ein PHP-Gästebuch auf Textdate Basis zu schreiben.
Klappt auch alles wunderbar, jedoch bin ich jetzt bei meinem "Archiv" hängen
geblieben:
Man stelle sich von, ich habe einen Ordner A, der Ordner B und C als Unterordner
besitzt. Nun möchte ich mit einem Script in Ordner C, eine Datei aus dem
Ordner B nach C verschieben.
Gibt es da eine entsprechende Funktion für? Ich habe bei php.net nichts gefunden.
Oder müsste ich da die Datei rüberkopieren, und dann im Original löschen?
Ich dachte da schon mal an die Funktion copy, weiß aber leider nicht so richtig,
wie man sie verwendet, bzw. copy(Pfad Originaldatei, Zielpfad) tuts nicht.
Mein zweites Problem ist dann noch folgendes:
Für mein Archiv, möchte ich, dass in einer PHP-Datei alle vorhandenen Monate
(eine Textdatei == ein Monat) aufgelistet werden.
Wie mache ich das am geschicktesten mit PHP?
Anbei bemerkt: Mir wäre es lieb, wenn nicht die Dateiname aufgelistet werden, sondern
die ersten vier Buchstaben des Names (Jahr), und dann soll die Monatszahl durch den
Monatsname ersetzt werden. Das wäre allerdings leicht zu lösen.
MfG, Dennis.
Hallo Dennis,
... Nun möchte ich mit einem Script in Ordner C, eine Datei aus dem
Ordner B nach C verschieben.Gibt es da eine entsprechende Funktion für? Ich habe bei php.net nichts gefunden.
rename http://www.php.net/manual/de/function.rename.php
Mein zweites Problem ist dann noch folgendes:
Für mein Archiv, möchte ich, dass in einer PHP-Datei alle vorhandenen Monate
(eine Textdatei == ein Monat) aufgelistet werden.
$monat = array (
'Januar',
'Februar',
'März',
'April',
'Mai',
'Juni',
'Juli',
'August',
'September',
'Oktober',
'November',
'Dezember'
); // *scnr*
Wie mache ich das am geschicktesten mit PHP?
Geht bestimmt auch komplizierter :-)
Du möchtest allerdings eher aus der Liste der vorhandenen Dateien ermitteln, für welche Monate Textdateien existieren?
Initialisiere ein Array mit Einträgen für jeden Monat mit dem Wert false für jeden Eintrag
Für alle Dateien in Deinem Verzeichnis
Ermittle den Monatsanteil des Dateinamens
Setze einen entsprechenden Arrayeintrag von false auf true
Nächste Datei
Freundliche Grüsse,
Vinzenz
Hi Vinzenz
Gibt es da eine entsprechende Funktion für? Ich habe bei php.net nichts gefunden.
rename http://www.php.net/manual/de/function.rename.php
$quelle = '../admin/2004_03.txt';
$ziel = '2004/2004_03.txt';
if(file_exists($quelle)) {
if(rename($quelle, $ziel)) {
echo "Kopiert.";
}
}
=> Klappt nicht! Warnmeldung:
Warning: rename(../admin/2004_03.txt,2004/2004_03.txt) [function.rename]: No such file or directory in C:\_TPP_Engine\_base\apache_files\www\s4.cybton.com\gaestebuch\archiv\index.php on line 28
Du möchtest allerdings eher aus der Liste der vorhandenen Dateien ermitteln, für welche Monate Textdateien existieren?
Richtig.
Initialisiere ein Array mit Einträgen für jeden Monat mit dem Wert false für jeden Eintrag
Für alle Dateien in Deinem Verzeichnis
Ermittle den Monatsanteil des Dateinamens
Setze einen entsprechenden Arrayeintrag von false auf true
Nächste Datei
Da bin ich jetzt nicht ganz mitgekommen. Wie meinst du das?
Kannst du mir da mal noch etwas Code geben?
Bitte bedenke, dass es auch verschiedene Jahre gibt, also z.B. geht es um:
2003_05.txt
2003_06.txt
[...]
2004_04.txt
MfG, Dennis.
Hallo Dennis,
$quelle = '../admin/2004_03.txt';
$ziel = '2004/2004_03.txt';
Relative Pfade sind mit Vorsicht zu geniessen, sie sind relativ zum Skript.
Ich bevorzuge für meine Nutzdaten ein Datenverzeichnis ausserhalb der document-root und ausserhalb des Skriptbereiches.
if(file_exists($quelle)) {
if(rename($quelle, $ziel)) {
echo "Kopiert.";
}
}
=> Klappt nicht! Warnmeldung:
Warning: rename(../admin/2004_03.txt,2004/2004_03.txt) [function.rename]: No such file or directory in C:\_TPP_Engine\_base\apache_files\www\s4.cybton.com\gaestebuch\archiv\index.php on line 28
Sieht eigentlich gut aus, macht bei mir
Fedora Linux Core 2
Apache 2.0.49
PHP 4.3.4
(Standardkonfiguration der Installation) was es soll.
Unter Windows kann dies eventuell an fehlenden Löschrechten für die Datei liegen. Darf apache die Datei löschen?
Initialisiere ein Array mit Einträgen für jeden Monat mit dem Wert false für jeden Eintrag
Für alle Dateien in Deinem Verzeichnis
Siehe Beispiel bei http://www.php.net/manual/de/function.readdir.php
Ermittle den Monatsanteil des Dateinamens
mit substr() http://de.php.net/manual/de/function.substr.php
Setze einen entsprechenden Arrayeintrag von false auf true
$monate[$akt_monat] = true;
Nächste Datei
Da bin ich jetzt nicht ganz mitgekommen. Wie meinst du das?
Kannst du mir da mal noch etwas Code geben?
Siehe oben :-)
Bitte bedenke, dass es auch verschiedene Jahre gibt, also z.B. geht es um:
2003_05.txt
2003_06.txt
[...]
2004_04.txt
Möchtest Du für jedes Jahr eine entsprechende Übersicht?
Dann arbeite mit zweidimensionalen Arrays.
Extrahiere Jahr und Monat aus dem Dateinamen. Damit hast Du die Indizes Deines zweidimensionalen Arrays.
Freundliche Grüsse,
Vinzenz
Hi Vinzenz
Relative Pfade sind mit Vorsicht zu geniessen, sie sind relativ zum Skript.
Ich bevorzuge für meine Nutzdaten ein Datenverzeichnis ausserhalb der document-root und ausserhalb des Skriptbereiches.
Hm, wie soll ich es sonst machen? Außerhalt der document-root heißt wahrscheinlich in einem nicht öffentlichen Verzeichnis? Auf so eins hab ich leider keinen Zugriff.
Oder soll ich den Pfad vom Server-Root angeben? also von _ganz_ am Anfang an?
Warnmeldung:
Warning: rename(../admin/2004_03.txt,2004/2004_03.txt) [function.rename]: No such file or directory in C:\_TPP_Engine\_base\apache_files\www\s4.cybton.com\gaestebuch\archiv\index.php on line 28
Das spräche ja für das oben, er sagt ja im Prinzip, dass er in index.php keine Textdatei findet.
Unter Windows kann dies eventuell an fehlenden Löschrechten für die Datei liegen. Darf apache die Datei löschen?
Da bin ich mir jetzt nicht so ganz sicher, wie bzw. wo stellt man das denn ein?
Btw: Mit der Function Copy tuts es auch nicht, und da wird ja nichts gelöscht. Achso, und mit unlink Dateien zu löschen geht.
Siehe Beispiel bei http://www.php.net/manual/de/function.readdir.php
Gibt die function denn auch die Unterverzeichnisse aus, oder nur die Dateien? Welche Funkction gibt auch oder nur Unterverzeichnisse aus?
Möchtest Du für jedes Jahr eine entsprechende Übersicht?
Joa, das wäre nicht schlecht.
Dann arbeite mit zweidimensionalen Arrays.
Extrahiere Jahr und Monat aus dem Dateinamen. Damit hast Du die Indizes Deines zweidimensionalen Arrays.
Ich werds versuchen .... aber erst mogen *gähn*
MfG, Dennis.
Hi,
Ich bevorzuge für meine Nutzdaten ein Datenverzeichnis ausserhalb der document-root und ausserhalb des Skriptbereiches.
Hm, wie soll ich es sonst machen? Außerhalt der document-root heißt wahrscheinlich in einem nicht öffentlichen Verzeichnis? Auf so eins hab ich leider keinen Zugriff.
Relativ geht schon - wenn Du weißt, wo Du bist. ;-)
Ich hätte ansonsten noch eine Funktion anzubieten, die relative in absolute Pfade umwandelt (und meckert, wenn man das für einen Pfad macht, für den man es nicht machen darf). So kann man auch leicht einen relativen User-Pfad ...
Oder soll ich den Pfad vom Server-Root angeben? also von _ganz_ am Anfang an?
... in einen absoluten Server-Pfad umwandeln.
Warnmeldung:
Warning: rename(../admin/2004_03.txt,2004/2004_03.txt)
Erstellt rename() eigentlich auch selbst den ggf. fehlenden Pfad?
Ansonsten hätte ich noch eine Funktion anzubieten, die einen nicht existenten Pfad erstmal herstellt. Das wäre zumindest für ...
Btw: Mit der Function Copy tuts es auch nicht, und da wird ja nichts gelöscht. Achso, und mit unlink Dateien zu löschen geht.
... diese Variante sehr sinnvoll. ;-)
Gruß, Cybaer
PS: Funktionen bei Bedarf voraussichtlich Montag (oder wann auch immer ich wieder hier bin ... ;-))
Hi Cybaer
Ich hätte ansonsten noch eine Funktion anzubieten, die relative in absolute Pfade umwandelt (und meckert, wenn man das für einen Pfad macht, für den man es nicht machen darf). So kann man auch leicht einen relativen User-Pfad in einen absoluten Server-Pfad umwandeln.
Und die da wäre?
Erstellt rename() eigentlich auch selbst den ggf. fehlenden Pfad?
Gute Idee, ich habe es gerade mal ausprobiert.
Einmal schien es so, also hätte er einen Ornder erzeugt - Weitere Tests ergabe jedoch, dass dies vermutlich nicht so ist...
Ansonsten hätte ich noch eine Funktion anzubieten, die einen nicht existenten Pfad erstmal herstellt.
Die da wäre? *g*
Ich will ja nur den Ordner erstellen, keine Datei.
Btw: Mit der Function Copy tuts es auch nicht, und da wird ja nichts gelöscht. Achso, und mit unlink Dateien zu löschen geht.
MfG, Dennis.
Hi Dennis
Habs jetzt hingekriegt.
Danke nochmal an alle
und EOT.
MfG, Dennis.