Funktion link() funktioniert nicht

Hallo Leute!

Bei meinem Webserver speichere ich hochgeladene Dateien unter einem zufällig generierten Dateinamen. Wenn diese Dateien jedoch wieder runtergeladen werden sollen, soll für den Nutzer natürlich der ursprüngliche Name zur Verfügung stehen. Beide Namen speichere ich in einer Datenbank.
Nun zu meinem Problem. Ich habe die hierfür sehr praktische Funktion link() gefunden, die laut selfphp ab PHP3 und PHP4>=4.0b1 funktionieren soll. Tut sie aber nicht. Ich möchte den Leuten eben keinen Link wie /files/Tk9KLhp0uLokk1SmDMR.html anbieten…wäre doch etwas zuviel verlangt, wenn man jedesmal das File erst umbenennen müsste…

So, ich wäre für jede halbwegs brauchbare Antwort dankbar! Ich zähl auf Euch…:smile:)

Schönen Tag noch
hergl

Hallo !

Hallo Leute!

Nun zu meinem Problem. Ich habe die hierfür sehr praktische
Funktion link() gefunden, die laut selfphp ab PHP3 und
PHP4>=4.0b1 funktionieren soll. Tut sie aber nicht. Ich
möchte den Leuten eben keinen Link wie
/files/Tk9KLhp0uLokk1SmDMR.html anbieten…wäre doch etwas
zuviel verlangt, wenn man jedesmal das File erst umbenennen
müsste…

So, ich wäre für jede halbwegs brauchbare Antwort dankbar! Ich
zähl auf Euch…:smile:)

Schönen Tag noch
hergl

Link erzeugt harte Links im Dateisystem des Servers, das ist sicher nicht das, was du willst.
Per gesendeten Redirect geht das nicht, du must das File per PHP ausgeben (fpassthru, etc.). Dazu dann vorher die entsprechenden Haeder setzen (Content-Type, Content-Disposition, etc.), siehe RFC 2183, 822.

Link erzeugt harte Links im Dateisystem des Servers, das ist
sicher nicht das, was du willst.
Per gesendeten Redirect geht das nicht, du must das File per
PHP ausgeben (fpassthru, etc.). Dazu dann vorher die
entsprechenden Haeder setzen (Content-Type,
Content-Disposition, etc.), siehe RFC 2183, 822.

hmmm…da habe ich wohl doch etwas zuviel Wissen vorgetäuscht…:smile:)
Naja…im Endeffekt ist ein harter Link vielleicht doch das, was ich will, bin mir da nicht so sicher. Aber ich versuch das halt mal mit fpassthru, obwohl mir das mit link() einfacher erscheint…*gg*
ok…vielen Dank erstmal.
Ciao, hergl

hmmm…da habe ich wohl doch etwas zuviel Wissen
vorgetäuscht…:smile:)

Hoffe das ist jetzt einfacher :smile:

Naja…im Endeffekt ist ein harter Link vielleicht doch das,
was ich will, bin mir da nicht so sicher. Aber ich versuch das
halt mal mit fpassthru, obwohl mir das mit link() einfacher
erscheint…*gg*

Links funktionieren nur unter Linux/Unix.
Unix kann für ein und dieselbe Datei mehrere Verzeichniseinträge (sprich Dateinamen) verwalten, jeder erzeugter Link ist einfach ein weiterer Dateiname / Verzeichniseintrag für die Datei.
link braucht als Parameter einen Ffad auf der Serverplatte, keine URL. Nach dem Anlegen des Links kannst du dann per Redirect (Header(„Location: http://…“)) auf diese Datei umleiten.

Mit dem Anlegen eines Links handelst du dir aber andere Probleme ein… erstens muss der Link irgendwann mal wieder weg, wenn er nicht mehr gebraucht wird (das geht nicht im gleichen Script, der der Request für das File erst hinterher kommt), und zweitens kannst du dann auch gleich die Originaldateinamen beim Hochladen verwenden, kommt auf das gleiche raus, da du ja mit dem Link wieder den Originaldateinamen auf Platte erzeugst.

Zur vorhergehenden Antwort (mit dem fpassthru): die RFC’s finden sich .zB. unter ietf.org, im Prinzip brauchst du nur
Header(„Content-Type: application/octed-stream\nConent-Disposition: attachment; filename=“$dateiname""); und danach per fopen, fpassthru, fclose das File senden.

Alex

Heyho!

Zur vorhergehenden Antwort (mit dem fpassthru): die RFC’s
finden sich .zB. unter ietf.org, im Prinzip brauchst du nur
Header(„Content-Type:
application/octed-stream\nConent-Disposition: attachment;
filename=“$dateiname""); und danach per fopen, fpassthru,
fclose das File senden.

Vielen Dank nochmal…n Freund hat mir das gezeigt und im Endeffekt hab ich’s jetzt fast genauso gemacht…richtig elegant, wie ich finde…*gg*

Na, vielleicht passierts ja mal, daß ich bei irgendwas helfen kann…hehe…

tschö auf jeden Fall
hergl