Dateien verschieben mit PHP
Harald
- php
Hi!
Wie kann ich eine Datei aus einem ordner per PHP in einen anderen verschieben? (beide Ordner haben bei den Zugriffsrechten 777)
Auf www.php.net fand ich leider nur move_uploaded_file und das passt ja nicht :-(
mfg
Harald
Hallo,
Wohl eher rename.
Gruß,
Severin
Hallo Wolke.
Hallo Severin,
Wohl eher rename.
Wie kommst du denn darauf?
Wohl weil es dem OP um das *Verschieben* von Dateien ging, wozu man obige Funktion nutzen kann. (Siehe auch das erste Beispiel.)
Einen schönen Freitag noch.
Gruß, Mathias
Hallo Matthias.
Wohl weil es dem OP um das *Verschieben* von Dateien ging, wozu man obige Funktion nutzen kann. (Siehe auch das erste Beispiel.)
Man lernt nie aus. War mir gar nicht bewusst, habe beim
Verschieben immer eine copy/unlink Kombi benutzt.
Danke für den Zaunpfahl.
Was mich allerdings jetzt interessieren würde,
inwieweit das sicher ist, bezüglich Script/Schleifenabruch.
Oder anders, findet hier wirklich ein Verschieben statt?
oder ist es technisch eine "Copy/Delete in One" Variante?
Gruss
Wolke
Hallo,
Oder anders, findet hier wirklich ein Verschieben statt?
oder ist es technisch eine "Copy/Delete in One" Variante?
Siehe mein Posting: Du änderst nur den "Dateinamen".
Gruß,
Severin
Hallo,
Siehe mein Posting: Du änderst nur den "Dateinamen".
Das ist auch der Grund, warum ein Umbennen (auch ausschneiden und einfügen) auf der selben Partition so schnell geht und ein Kopieren sehr lange dauert.
Gruß,
Severin
Hallo Severin,
Siehe mein Posting: Du änderst nur den "Dateinamen".
»»
Ja deine Erklärung war sehr gut und verständlich.
Kenne mich leider gar nicht mit Betriebssystemen und
deren interne Datenspeicherung aus.
Dann werde ich jetzt mal einige Scripte umschreiben müssen,
danke.
Gruss
Wolke
Hallo nochmal,
ich hätte da doch noch eine Frage.
Da ja rename logischerweise beim Verschieben
viel mehr Sinn macht als copy(), bemerkte ich
die bevorzugte Verwendung von copy, gerade
bei Uploads. Beispiel
Wenn nicht gerade move_uploaded_file() benutzt wird, was
natürlich zu bevorzugen wäre.
Also die Frage: Gibt es speziell bei Uploads einen berechtigten
Grund "copy()" anstatt "rename()" zu nutzen?
Moin!
Also die Frage: Gibt es speziell bei Uploads einen berechtigten
Grund "copy()" anstatt "rename()" zu nutzen?
move_uploaded_file() prüft ab, ob die betroffene Datei tatsächlich gerade erst hochgeladen wurde. copy() und rename() arbeiten mit allen existierenden Dateien, könnten also bei manipulierten Dateinamen auch Systemdateien an die falschen Orte verfrachten.
- Sven Rautenberg
Hi,
move_uploaded_file() prüft ab, ob die betroffene Datei tatsächlich gerade erst hochgeladen wurde. copy() und rename() arbeiten mit allen existierenden Dateien, könnten also bei manipulierten Dateinamen auch Systemdateien an die falschen Orte verfrachten.
Ja das ist soweit klar aber ich meinte:
Wenn nicht gerade move_uploaded_file() benutzt wird, was
natürlich zu bevorzugen wäre.Also die Frage: Gibt es speziell bei Uploads einen berechtigten
Grund "copy()" anstatt "rename()" zu nutzen?
Also warum bevorzugen viele copy() beim Upload gegenüber rename()?
Gibt es dafür einen trifftigen Grund, den ich beachten sollte?
Gruss
Wolke
echo $begrüßung;
Also warum bevorzugen viele copy() beim Upload gegenüber rename()?
Gibt es dafür einen trifftigen Grund, den ich beachten sollte?
Einfach Unwissen bzw. Unerfahrenheit. Sie kennen nicht das mit dem Upload verbundene Sicherheitsrisiko - sprich: die von Sven angesprochene Dateinamensproblematik.
Sie "bevorzugen" auch viele andere Sicherheitsrisiken, wie z.B. SQL-Injection. Programme sicher zu gestalten ist aufwendig und benötigt vor allem jede Menge Kenntnisse über die Missbrauchsmöglichkeiten und wirksame Gegenmaßnahmen.
echo "$verabschiedung $name";
Hallo,
Oder anders, findet hier wirklich ein Verschieben statt?
oder ist es technisch eine "Copy/Delete in One" Variante?
Weder/noch. Severin hat's zwar sehr anschaulich dargestellt, aber das trifft die physikalische Wahrheit noch nicht ganz. Tatsächlich ist es so, dass bei einem "move" der Verzeichniseintrag, der zur betroffenen Datei gehört, von einem Verzeichnis in das andere verschoben wird. Die Daten selbst bleiben aber wo sie sind, werden nicht auf der Platte verschoben.
Ciao,
Martin
Hallo,
Tatsächlich ist es so, dass bei einem "move" der Verzeichniseintrag, der zur betroffenen Datei gehört, von einem Verzeichnis in das andere verschoben wird. Die Daten selbst bleiben aber wo sie sind, werden nicht auf der Platte verschoben.
Was ist eigentlich ein "Verzeichnis"? Ich habe einmal schnell versucht zu googeln aber die Ergebnisse waren eher bescheiden (von "Wie erstelle ich ein Verzeichnis?" bis zu "Linux Verzeichnisstruktur") und wikipedia hat im Moment technische Schwierigkeiten.
Ich habe mich damit nie sehr genau beschäftigt, und mich einfach mit meiner Erklärung zufrieden gegeben.
Gruß,
Severin
Hi,
Tatsächlich ist es so, dass bei einem "move" der Verzeichniseintrag, der zur betroffenen Datei gehört, von einem Verzeichnis in das andere verschoben wird. Die Daten selbst bleiben aber wo sie sind, werden nicht auf der Platte verschoben.
Was ist eigentlich ein "Verzeichnis"?
Gute Frage. ;-)
Dazu sollte man sich wohl zunächst mal klarmachen, dass ein "Verzeichnis" und eine "Datei" eigentlich fast dasselbe sind, wenn man es mal auf einer niedrigen Abstraktionsebene betrachtet. Anders ausgedrückt: Verzeichnisse sind Dateien, die nur durch ein Flag (Attribut) eine besondere Bedeutung bekommen. Das Betriebssystem "weiß" nun, dass diese Dateien, die wir Verzeichnisse nennen, eine Liste von Einträgen enthält. Jeder dieser Einträge identifiziert dabei eine Datei (bzw. ein weiteres Verzeichnis).
Man kann sich das Ganze auch vorstellen wie ein System von Tabellen: Jeder Tabelleneintrag enthält einen Namen, Zeitstempel, Attribute etc. und verweist auf einen Nutzdatenblock (Datei) oder eine weitere Tabelle (Verzeichnis).
Ich habe einmal schnell versucht zu googeln aber die Ergebnisse waren eher bescheiden (von "Wie erstelle ich ein Verzeichnis?" bis zu "Linux Verzeichnisstruktur")
Kann ich mir vorstellen. Das liegt wohl nicht zuletzt daran, dass das Thema heutzutage kaum noch jemanden so genau interessiert - höchstens ein paar Low-Level-Programmierer, die einen Treiber für ein bestimmtes Dateisystem entwickeln müssen/wollen. Vor zwanzig Jahren hat man solches Insiderwissen noch in Hülle und Fülle in Computerbüchern gefunden.
und wikipedia hat im Moment technische Schwierigkeiten.
Oh. Ist mir noch gar nicht aufgefallen. *ausprobier* Yo, stimmt. Da stimmt was nicht. ;-)
Schönen Abend noch,
Martin
Hallo,
Wie kommst du denn darauf?
"Verzeichnisse" sind im Prinzip nur Erweiterungen des Dateinamen, die oft nicht angezeigt werden.
Die Datei "foo.txt" heißt in Wahrheit zum Beispiel "/home/user/foo.txt". Wenn du den Dateinamen jetzt in "/home/user/verzeichnis/foo.txt" änderst "verschiebt" diese Datei.
Darum heißt die passende PHP-Funktion zum verschieben rename und das Unix Kommando zum umbennenen von Dateien mv (für move).
Gruß,
Severin