Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Datei via Php downloaden

Hallo an alle,

ich habe folgendes Problem: in einem Ordner liegen zwei Dateien: index.php und referat.htm.
Nun möchte ich, dass beim Aufrufen der index.php die Datei referat.htm vom Browser mithilfe des Download-Dialoges downloaden kann.

Ich würde mich über Vorschläge freuen ;)

Mfg Tim

Hier gehts zum Orginal Eintrag "Datei via Php downloaden" im Forum

Antworten

vl. indem du einen attachment-header sendest!?


2.

@wormsworldparty:
Davon habe ich auch schon etwas gelesen, aber wie geht das genau?

Mfg Tim


3.

Code:                   In Zwischenablage kopieren (nur IE)
1">

und bevor du fragst: wenn die Fehlermeldung kommt "header already sent..."

dann hast du vorher schon ausgabe erfolgen lassen, was unzulässig ist, wenn du headers sendest.
damit meine ich ein einfach <html> tag oder ne echo ausgabe oder ne einfach leerzeile. also den code ganz am anfang der datei einfügen.


4.

Wieso einfach, wenn es kompliziert geht? Was spricht gegen eine "normale" Verlinkung von referat.htm, meinetwegen noch mit dem (eigentlich obsoleten) Hinweis "zum Download bitte mit der RECHTEN Maustaste auf den Link klicken und "Ziel speichern unter..." auswählen.

Diese komischen Downloadfragen habe ich noch nie begriffen - ich dachte immer, das entscheidet der Endanwender frei...


5.

tja, aber wenn er das so möchte...


6.

er hat aber doch extra danach gefragt und ich finde das einfache verlinken von dateien die zum download angeboten werden auch nicht so toll.

PS: und was ist daran wirklich komplziert?


7.

*recht geb*


8.

>er hat aber doch extra danach gefragt und ich finde das einfache verlinken von dateien die zum download angeboten werden auch nicht so toll.

Und warum nicht? Das ist doch der Sinn von Links - und die gab es schon, bevor es PHP gab. Ich sag ja: warum einfach, wenn es kompliziert geht.


9.

is halt ansichtsache. müssen wir uns ja nicht drüber streiten,oder? ;)


10.

wollt ihr wohl mal mit dem streiten aufhören? böse - ganz böse. *ggg*


11.

>is halt ansichtsache. müssen wir uns ja nicht drüber streiten,oder?

Nööö - streiten nicht, drüber diskutieren. Es ist ja nicht so, dass der Download via PHP total sinnlos ist - im Gegenteil, es gibt durchaus sinnvolle und praktische Anwendungsbeispiele: Daten, die dynamisch erstellt werden (Standardfall), oder geschützte Werke (obwohl man die genauso einfach via .htaccess und Passwort schützen kann) - aber eben gerade so ein "doofes" statisches referat.htm - da ist (meiner bescheidenen Meinung nach) einfach der Spatz mit der Kanone erlegt worden.


12.

wie wärs wenn ihr das in einem chat diskutiert!?


13.

Gut, das funktioniert auch soweit, vielen Dank!

Nun möchte ich aber nicht nur Textdateien, sondern z. B. Bilder, ZIP-Archive etc. auf die gleiche Weise downloaden. Logischerweise muss sich dazu ja der Content-Type im Header ändern. Auf www.php.net habe ich etwas über die Funktion mime_content_type() gelesen, welche bei mir jedoch folgenden Fehler zurückliefert:

Code:                   In Zwischenablage kopieren (nur IE)
2">

Noch als Anmerkung: Laut phpinfo(); habe ich die PHP-Version 4.3.10 installiert, laut der PHP-Referenz sollte diese Funktion ab 4.3.0 verfügbar sein!

Mfg Tim


14.

wenn du dich schon im manual rumtreibst dann lies dir doch direkt noch die Kommentare durch. da ist einer dabei der Zeigt wie man die Mimetypen feststellt:

Zitat:
aarondunlap.com
28-Dec-2004 11:17
I just made a function to allow a file to force-download (for a script to disallow file links from untrusted sites -- preventing mp3/video leeching on forums), and I realized that a script like that could potentially be very dangerous.

Someone could possibly exploit the script to download sensitive files from your server, like your index.php or passwords.txt -- so I made this switch statement to both allow for many file types for a download script, and to prevent certain types from being accessed.

<?php

function dl_file($file){

//First, see if the file exists
if (!is_file($file)) { die("<b>404 File not found!</b>"); }

//Gather relevent info about file
$len = filesize($file);
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename,"."),1));

//This will set the Content-Type to the appropriate setting for the file
switch( $file_extension ) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
case "mp3": $ctype="audio/mpeg"; break;
case "wav": $ctype="audio/x-wav"; break;
case "mpeg":
case "mpg":
case "mpe": $ctype="video/mpeg"; break;
case "mov": $ctype="video/quicktime"; break;
case "avi": $ctype="video/x-msvideo"; break;

//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
case "php":
case "htm":
case "html":
case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;

default: $ctype="application/force-download";
}

//Begin writing headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");

//Use the switch-generated Content-Type
header("Content-Type: $ctype");

//Force the download
$header="Content-Disposition: attachment; filename=".$filename.";";
header($header );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$len);
@readfile($file);
exit;
}

?>

This works in both IE and Firefox.




15.

>wie wärs wenn ihr das in einem chat diskutiert!?

Nö, wieso? Wenn's Dich nicht interessiert: es zwingt Dich niemand (auch ich bin weit entfernt davon), hier weiter zu lesen. Du mußt lediglich Deine Neugier in den Griff bekommen - sicher nicht einfach und ganz sicher nicht meine Aufgabe.


16.

Zitat:
Rana postete
>wie wärs wenn ihr das in einem chat diskutiert!?

Nö, wieso? Wenn's Dich nicht interessiert: es zwingt Dich niemand (auch ich bin weit entfernt davon), hier weiter zu lesen. Du mußt lediglich Deine Neugier in den Griff bekommen - sicher nicht einfach und ganz sicher nicht meine Aufgabe.
Hat super gefunzt, vielen Dank für den Manual-Auszug :)

bezüglich des Zitats oben: einfach cool bleiben und nicht streiten ;)


17.

genau..., rana hat mich wohl irgendwie falsch verstanden...


Hier gehts zum Orginal Eintrag "Datei via Php downloaden" im Forum
 
phpforum.de | Impressum | Handy Bundles