php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Dateien beim Download umbenennen?


 
The_Light
18-04-2005, 10:12 
 
Hallo Zusammen,


ich bin mir zwar nicht sicher, ob meine Frage nicht schon irgendwo beantwortet wurde, aber meine Suche ergab keine Treffer.

Vorab: eingesetzt wird PHP 4 und Mysql

Folgendes Problem möchte ich lösen:
Ich benötige eine Download-Verwaltung, ähnlich einer Bilder-Gallerie.
Es sollen Kategorien erstellbar sein und in diesen Kategorien soll es Alben geben, in denen sich die entsprechenden Downloads befinden.

Kategorien und Alben sind kein Problem, das kann ich, aber ich habe ein paar kleine Probleme dabei.

Da sich die Dateien für die Downloads alle im gleichen Verzeichnis befinden und mehrere Personen Downloads bereitstellen sollen, muss ich sicherstellen, daß die sich nicht gegenseitig ihre Dateien überschreiben.
Klar, eine Prüfung mit File_exists würde das schon lösen, ich möchte das aber gerne anders lösen und zwar so:

Datei Test.zip wird hochgeladen und dabei umbenannt in z.B. load1.18042005

Die Dateien erhalten also eine eindeutige, einzigartige Kennung als Dateinamen, wodurch ein Dateiname auf dem Server nur einmal auftreten kann. Überschreiben ausgeschlossen.
Das Problem:

Wie nenne ich die Datei wieder um, wenn jemand sie downloaden will?
Schließlich möchte ein User die Datei Test.zip erhalten und nicht load1.18042005.

Das nächste Problem wäre das Bereitstellen des Downloads, also das Uploaden der Dateien.
Ich habe hier das Beispiel aus Self_PHP genommen. Leider funktioniert der Upload damit nicht, wenn die Dateien sehr groß sind.
Wie kann ich z.B. Uploads realisieren von Dateien, die größer sind als 5 MB ?

Kennt zufällig jemand ein (wenns geht kostenlos) Script o.ä., daß mein Problem schon löst?
Wäre auch schön, wenn dieses Script mit einem VBulletin-Board zusammen arbeitet.

Vielen Dank im Voraus

Gruss

The_Light

 
onemorenerd
18-04-2005, 11:09 
 
Beim Hochladen einer Test.zip benennst du um in xxxxxxxxxxxx.Test.zip wobei xxx der aktuelle Unix-Timestamp ist. Der sollte eindeutig sein und da er eine feste Länge hat, kanns du den Originalnamen beim Download durch simples substr() wieder ermitteln.

 
The_Light
18-04-2005, 14:53 
 
Ok, das ist soweit recht einfach.

Wie aber erkläre ich dem Bowser, das die Datei nicht xxxx.test.zip heisst, sondern test.zip?

Wenn ich das über einen normalen Link mache:

<a href="xxxx.test.zip">test.zip</a>

Dann bekommt der User die Datei mit den xxxx vorne dran.

Also müsste ich ein Script entwerfen, was mir erst die Datei umbenennt, und dann an den Browser schickt.

Den Part mit dem Umbenennen kann ich, wie aber schicke ich das dann an den Browser?

 
onemorenerd
18-04-2005, 16:09 
 
Links auf den Seiten zeigen nicht auf xxxxxxxx.Test.zip sondern auf download.php?file=xxxxxxxx.Test.zip.
Dieses Script sendet dann die richtigen Header, (insbesondere den, der dem Browser sagt, wie die Datei heißt, die er nach den Headern empfangen wird) sowie den Inhalt von xxxxxxx.Test.zip.

Such mal im Forum, du bist nicht der erste, der sowas braucht.

 
The_Light
18-04-2005, 16:15 
 
:D

Thx, habs gefunden.

Macht zwar noch einige Probleme, aber die dürften ja dann wohl auch hier irgendwo beschrieben sein.


Gruss

The_Light

 
The_Light
18-04-2005, 16:56 
 
Ok, ich packs nicht alleine, sorry, brauch nochmal hilfe:

folgendes habe ich gebaut:


$_PATH='./downloads/';
$_NAME='test.pdf';

$_DL_NAME='HP.pdf';

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Type: application/pdf');
header('Expires: 0');
header('Content-Length: ' . filesize($_PATH.$_NAME));
header('Pragma: public');
header('Content-Disposition: attachment; filename="' . $_DL_NAME . '"');

readfile ($_PATH.$_NAME);



E_ALL ist an und bringt keine Fehler.

Was passieren soll:
Ich klicke auf den Link , es öffnet sich der Download-Dialog, der mir erklärt, daß die Datei HP.pdf gespeichert werden kann usw.
Danach wird die Datei sauber downgeloaded.

Was wirklich passiert:
Ich klicke auf den Link.
Ein Fenster öffnet sich.
Der DL-Dialog erscheint und erklärt mir, die Datei download.php wäre zu downloaden.
Ich klicke auf speichern und er will den Speicherort für HP.pdf wissen.
Die Datei wird gedownloaded.

Es steht also die falsche Datei im DL-Dialog.
Nur warum?
Ich gebe ihm doch den richtigen Dateinamen per Header mit.

Bitte hilfe.

Danke im Voraus.

-archiv-

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:50 Uhr.