Dateiupload unterscheiden nach lokal und URL

rapier

Grünschnabel
Hallo alle zusammen,
ich hab ein Upload Script, welches mir eine beliebige Datei hochläd und auf dem Server speichert. Zusätzlich wird Speicherort und Dateigröße in einer Datenbank gespeichert.

Jetzt muß ich das Script dahingehend ändern, daß zwar lokale Dateien hochgeladen und normal gespeichert werden, per URL eingegebene allerdings nicht. Bei denen soll statt des lokalen Speicherortes die URL selber eingetragen werden.

Da das jetzt glaub ich etwas wirr ist, mal ein Beispiel:
Die Datei /home/frank/file.pdf soll auf den Server gespeichert werden, als Speicherort steht dann z.B. download/file.pdf in der Datenbank
Bei Eingabe der Datei http://www.domain.de/file.pdf soll diese URL selber in der Datenbank stehen.

Eine zwischenzeitliche Speicherung in /tmp würde keinerlei Probleme bereiten, momentan speichert das Script jedoch auch die zweite Datei brav dauerhaft im Serverdateisystem ab, was vermieden werden muß (wg. Copyright - verlinken erlaubt, selbst anbieten verboten)

In $_FILES ist die Herkunft nicht mehr nachzuvollziehen, gibt es andere Möglichkeiten, die Dateien zu unterscheiden und somit unterschiedlich zu behandeln?

Vielen Dank im Voraus
Frank
 
Wäre es dann nicht simpel, einfach zu prüfen, ob am Anfang des Pfades in der DB entweder http:// steht - oder eben nicht - und dann entsprechend die Datei lokal zu verlinken oder den in der DB eingetragenen Link einfach auszugeben?
 
Mist, doch falsch ausgedrückt... ;)

In der DB steht anfangs gar nichts.
In einem größeren Formular gibt's die Möglichkeit, eine Datei hochzuladen. Will man das nicht, läßt man es einfach frei, andernfalls klickt man entweder auf Durchsuchen oder gibt die URL an.
In beiden Fällen läd sich das Script die Datei hoch, kopiert sie in ein Vorgegebenes Verzeichnis und macht eben diesen Eintrag in die Datenbank, damit andere Scripte die Datei finden können.

Die Änderung muß dahingehen, daß entsprechend dem Inhalt des <input...> Feldes mit der Information unterschiedlich umgegangen werden soll.
Im Falle eine beim Nutzer lokal vorliegenden Datei der o.g. Weg, im Falle einer URL nur den Eintrag in die Datenbank.

Ich weiß nur nicht, ob und wie ich auf den eingegebenen Wert im <input...> Feld zugreifen kann (type=file). Per $_FILES['feldname'] krieg ich ja leider keine Information, wo die Datei herstammt.

Viele Grüße
Frank
 
Da bleibt nur die Möglichkeit, zwei Felder in das Formular einzubauen: zum Einen das feld vom Typ "file", und zum Anderen ein Feld vom Typ "text", in das der Besucher die URL eingeben kann, sollte kein Dateiupload erwünscht sein. So musst Du nur prüfen, ob eine Datei hochgeladen wurde. Wenn nicht, nimm den Wert aus dem URL-Textfeld.

Das Formular kannst Du natürlich mit Javascript aufmotzen, indem Du Radiobuttons benutzt, mit denen der Benutzer aussuchen kann, welche Möglichkeit er nutzen will. Das jew. andere Feld kannst Du ja entsprechend disablen und leeren. Komfortsache, im PHP-Skript musst Du ja dennoch prüfen, ob wirklich etwas hochgeladen bzw. eine korrekte URL angegeben wurde.
 
Danke für die Antwort.
Ich hab gehofft, daß ich irgendeine Möglichkeit übersehen hatte, aber dann mach ich das halt mit den zwei Feldern.

Viele Grüße
Frank
 
Em, lass die Datei doch oben und dann überprüfst du mit 'nem Regex ob das ein http:// oder sonstwas dranstehen hat ($_FILES['formularfedl']['name']).
Wenn ja löscht du sie einfach([phpf]unlink[/phpf])
 
Das Problem ist jedoch, daß in 'name' nur der Dateiname steht, keinerlei Pfad/URL Angabe.
Code:
[arbeitsmaterial] => Array
        (
            [name] => test.zip
            [type] => application/x-zip
            [tmp_name] => /tmp/phpfIDOxU
            [error] => 0
            [size] => 5211
        )
 
Zurück