Registrieren  •  Login 
  
 
im Forum


 FAQ   Mitgliederliste   Benutzergruppen   Teamseite   Suchen 

Downloadscript

 
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Daniel
Mitglied
Mitglied



Anmeldedatum: 02.08.2006
Geschlecht: Männlich
Beiträge: 406
Wohnort: Mellrichstadt (Bayern)

BeitragVerfasst am: 22.01.2007, 17:23    Titel: Downloadscript

Also ich habe gestern nun auf unserer Schulseite ein Downloadskript eingebaut.
Hier ist es in gebrauch: http://www.mpg-met.de/downloads/phase6/phase6.html

die dateien lassen sich wunderbar speichern, aber: mann kann sie nicht öffnen.
es wird dann angezeigt, dass die datei in den temporary Internet files nicht gefunden worden ist.

Die leute sollen es zwar speichern, aber wenn das öffnenn auch gehen würde wär es halt nochmal schöner.

download.php
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
//Downloadscript

define("ALLOW_INCLUDE"true);
include 
"downloads.php";

//Übergebene ID überprüfen
if (isset($_GET['id']) && preg_match("/[1234567890]+/"$_GET['id'])) {
    if (isset(
$downloads[$_GET['id']])) {
        
$filename substr($downloads[$_GET['id']], 
                    
strrpos($downloads[$_GET['id']], "/")+1);
        
$filesize = @filesize($downloads[$_GET['id']]);
        
        
//Counter
        //downloads/counter braucht CHMod 777
        
if (!file_exists("counter/$_GET[id].txt")) {
            
$fp fopen("counter/$_GET[id].txt""w");
            
fwrite($fp"0");
            
fclose($fp);
        }
        
$fp fopen("counter/$_GET[id].txt""r+");
        
$counter fread($fp255);
        
$counter++;
        
rewind($fp);
        
fwrite($fp$counter);
        
fclose($fp);
        
        
//Headerinformationen senden
        
header("Content-type: application/octet-stream");
        
header("Content-Disposition: attachment; filename=" $filename);
        if (
$filesizeheader("Content-Length: $filesize");
        
        
//Datei laden
        
readfile($downloads[$_GET['id']]);

    }
    else echo 
"Die gewünschte ID existiert nicht.";
}
else echo 
"Die gewünschte ID existiert nicht.";

?>


downloads.php
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
//Downloaddatei
if (!defined("ALLOW_INCLUDE")) die();

$downloads[1] = "phase6/eng/gln1/5e01ls_hello.txt";
$downloads[2] = "phase6/eng/gln1/5e02ls_friends.txt";
$downloads[3] = "phase6/eng/gln1/5e03ls_davidandrobert.txt";
$downloads[4] = "phase6/eng/gln1/5e04ls_robert.txt";
$downloads[5] = "phase6/eng/gln2/wf01_gln2_u1_intro_schoollife1.txt";
$downloads[6] = "phase6/eng/gln2/wf02_gln2_u1_intro+languagea_school_life2.txt";
$downloads[7] = "phase6/eng/gln2/wf03_gln2_u1_language_a+b_schoollife3.txt";
$downloads[8] = "phase6/eng/gln2/wf04_gln2_u1_competition1.txt";
$downloads[9] = "phase6/eng/gln2/wf05_gln2_u1_mocking.txt";
$downloads[10] = "phase6/eng/gln2/wf06a_gln2_u1_prepositions.txt";
$downloads[11] = "phase6/eng/gln2/wf06b_gln2_u1_workingwithlanguage1.txt";
$downloads[12] = "phase6/eng/gln2/wf06c_gln2_u1_waysofspeaking.txt";
$downloads[13] = "phase6/eng/gln2/wf07_gln2_focus1_halloween.txt";
$downloads[14] = "phase6/lat/prima6/prima6_01.txt";
$downloads[15] = "phase6/lat/prima6/prima6_02.txt";
$downloads[16] = "phase6/lat/prima6/prima6_03.txt";
$downloads[17] = "phase6/lat/prima6/prima6_04.txt";
$downloads[18] = "phase6/lat/prima6/prima6_05.txt";
$downloads[19] = "phase6/lat/prima6/prima6_06.txt";
$downloads[20] = "phase6/lat/prima6/prima6_07.txt";
$downloads[21] = "phase6/lat/prima6/prima6_08.txt";
$downloads[22] = "phase6/lat/prima6/prima6_09.txt";
$downloads[23] = "phase6/lat/prima6/prima6_10.txt";
$downloads[24] = "phase6/lat/prima6/prima6_11.txt";
$downloads[25] = "phase6/lat/prima6/prima6_12.txt";
$downloads[26] = "phase6/lat/prima6/prima6_13.txt";
$downloads[27] = "phase6/lat/prima6/prima6_14.txt";
$downloads[28] = "phase6/lat/prima6/prima6_15.txt";
$downloads[29] = "phase6/lat/prima6/prima6_16.txt";
$downloads[30] = "phase6/lat/prima6/prima6_17.txt";
$downloads[31] = "phase6/lat/prima6/prima6_18.txt";
$downloads[32] = "phase6/lat/prima6/prima6_19.txt";
$downloads[33] = "phase6/lat/prima6/prima6_20.txt";
$downloads[34] = "phase6/lat/prima6/prima6_21.txt";
$downloads[35] = "phase6/lat/prima6/prima6_22.txt";
$downloads[36] = "phase6/lat/prima8/prima8_43.txt";
$downloads[37] = "phase6/lat/prima8/prima8_44.txt";
$downloads[38] = "phase6/lat/prima8/prima8_45.txt";
$downloads[39] = "phase6/lat/prima8/prima8_46.txt";
$downloads[40] = "phase6/lat/prima8/prima8_47.txt";
$downloads[41] = "phase6/lat/prima8/prima8_48.txt";
$downloads[42] = "phase6/eng/gln1/5e05ls_school.txt";
$downloads[43] = "phase6/eng/gln1/5e06ls_picturesintheclassroom.txt";
$downloads[44] = "phase6/eng/gln1/5e07ls_thelesson.txt";
$downloads[45] = "phase6/eng/gln1/5e08ls_letscheck.txt";

?>


EDIT: Dieses Problem tritt nur im IE auf, nicht im Firefox
_________________
oda so...

10¤ Fotobuch-Gutschein von CEWE

Dieser Beitrag wurde insgesamt 2 mal geändert. Zuletzt von Daniel.
Nach oben
Benutzer-Profile anzeigen Daniel ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13997
Wohnort: Wien

BeitragVerfasst am: 22.01.2007, 17:33    Titel:

Das Problem liegt vermutlich am $filename.
Denn dieser darf keine Slahes enthalten:
PHP-Code:
1
2
3
<?php
$filename 
basename($value);
?>

Und du solltest mit dem Header den MIME-Typ mitsenden Wink

Hier gibt es noch ein paar Infos: https://www.forum.happytec.at/viewtopic.php?p=5938#5938


MfG Christian
_________________


Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von killerbees19.
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Daniel
Mitglied
Mitglied



Anmeldedatum: 02.08.2006
Geschlecht: Männlich
Beiträge: 406
Wohnort: Mellrichstadt (Bayern)

BeitragVerfasst am: 22.01.2007, 20:03    Titel:

wie hast du denn das Problem mit dem MIME-Type dann gelöst?
weil darüber schreibst du dann ja nichts mehr...

des basename werde ich mal einfügen, dürfte aber keine Veränderungen bringen, da der Dateiname ($filename) keine slashes enthält

edit: ja, keine Verbesserung
_________________
oda so...

10¤ Fotobuch-Gutschein von CEWE

Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von Daniel.
Nach oben
Benutzer-Profile anzeigen Daniel ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13997
Wohnort: Wien

BeitragVerfasst am: 23.01.2007, 09:50    Titel:

Kann ich dir gerne zeigen, wie ich gelöst habe:
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
if (strstr($file'.zip') OR strstr($file'.ZIP'))
{
  
$header 'application/zip';
}
elseif (
strstr($file'.txt') OR strstr($file'.txt'))
{
  
$header 'text/plain';
}
elseif (
strstr($file'.mp3') OR strstr($file'.MP3'))
{
  
$header 'audio/mpeg';
}
elseif (
strstr($file'.jpeg') OR strstr($file'.jpg') OR strstr($file'.jpe') OR strstr($file'.JPEG') OR strstr($file'.JPG') OR strstr($file'.JPE'))
{
  
$header 'image/jpeg';
}
elseif (
strstr($file'.gif') OR strstr($file'.GIF'))
{
  
$header 'image/gif';
}
elseif (
strstr($file'.png') OR strstr($file'.PNG'))
{
  
$header 'image/png';
}
elseif (
strstr($file'.pdf') OR strstr($file'.PDF'))
{
  
$header 'application/pdf';
}
elseif (
strstr($file'.doc') OR strstr($file'.dot') OR strstr($file'.DOC') OR strstr($file'.DOT'))
{
  
$header 'application/msword';
}
elseif (
strstr($file'.ppt') OR strstr($file'.ppz')OR strstr($file'.pps')OR strstr($file'.pot') OR strstr($file'.PPT') OR strstr($file'.PPZ') OR strstr($file'.PPS') OR strstr($file'.POT'))
{
  
$header 'application/mspowerpoint';
}
elseif (
strstr($file'.chm') OR strstr($file'.hlp') OR strstr($file'.CHM') OR strstr($file'.HLP'))
{
  
$header 'application/mshelp';
}
elseif (
strstr($file'.xls') OR strstr($file'.xla') OR strstr($file'.XLS') OR strstr($file'.XLA'))
{
  
$header 'application/msexcel';
}
elseif (
strstr($file'.psd') OR strstr($file'.PSD'))
{
  
$header 'application/psd';
}
else
{
  
$header "application";
}


// $path = explode("/", $file);
// $filenew = $path[count($path) - 1];
$filenew basename($file);

header("Content-Disposition: attachment; filename = ".$filenew);
//header("Content-Disposition: filename=\"$file\""); // Dateiname 
header("Content-Length: ".filesize($file)); // Dateigröße 
header("Content-Type: ".$header); // MIME-Typ 
?>

Bei dieser Methode könnte es passieren, dass ein falscher MIME-Typ ausgegeben wird, wenn die Datei zum Beispiel datei.mp3.ich.txt. Dieses Problem könnte man mit preg_match() umgehen:
Code:
preg_match('/^(.*?)\.mp3$/', $var)

So ungefähr. Nur ist strstr um einiges schneller und ich habe nicht solche seltsamen Dateinamen Wink

Und falls keines der Dateitypen darauf zutrifft, tritt folgendes in Kraft:
Code:
else
{
  $header = "application";
}

Damit soll der Browser selber entscheiden wie es anzeigt Laughing
Aber man kann diese Liste natürlich immer erweitern.

Man könnte natürlich auch die Dateitypen aus einer Datenbank abfragen, so könnte man es über eine bestehnde Adminoberfläche wie bei mir praktisch pflegen.

Ich hoffe, ich konnte dir damit helfen Very Happy

EDIT:
Mir fällt gerade auf, dass das unnötig kompliziert ist. Wenn ich den Dateinamen in Kleinbuchstaben umwandle mit strtolower() brauche ich nur halb so viele Prüfungen Rolling Eyes

Neue, kleinere Version:
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
$file 
strtolower($file);

if (
strstr($file'.zip'))
{
  
$header 'application/zip';
}
elseif (
strstr($file'.txt'))
{
  
$header 'text/plain';
}
elseif (
strstr($file'.mp3'))
{
  
$header 'audio/mpeg';
}
elseif (
strstr($file'.jpeg') OR strstr($file'.jpg') OR strstr($file'.jpe'))
{
  
$header 'image/jpeg';
}
elseif (
strstr($file'.gif'))
{
  
$header 'image/gif';
}
elseif (
strstr($file'.png'))
{
  
$header 'image/png';
}
elseif (
strstr($file'.pdf'))
{
  
$header 'application/pdf';
}
elseif (
strstr($file'.doc') OR strstr($file'.dot'))
{
  
$header 'application/msword';
}
elseif (
strstr($file'.ppt') OR strstr($file'.ppz')OR strstr($file'.pps')OR strstr($file'.pot'))
{
  
$header 'application/mspowerpoint';
}
elseif (
strstr($file'.chm') OR strstr($file'.hlp'))
{
  
$header 'application/mshelp';
}
elseif (
strstr($file'.xls') OR strstr($file'.xla'))
{
  
$header 'application/msexcel';
}
elseif (
strstr($file'.psd'))
{
  
$header 'application/psd';
}
else
{
  
$header "application";
}
?>

Nicht vergessen: Du solltest vorher $file in eine andere Variable kopieren, denn sonst kannst du die Datei nicht mehr mit readfile() auslesen, wenn der Dateiname in Kleinbuchstaben konvertiert wurde Wink


MfG Christian
_________________


Dieser Beitrag wurde insgesamt 3 mal geändert. Zuletzt von killerbees19.
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Daniel
Mitglied
Mitglied



Anmeldedatum: 02.08.2006
Geschlecht: Männlich
Beiträge: 406
Wohnort: Mellrichstadt (Bayern)

BeitragVerfasst am: 23.01.2007, 16:37    Titel:

gut, danke, aber könnte ich auch es nicht auch so lösen:
PHP-Code:
1
2
3
4
5
6
7
8
<?php
$endung 
substr($downloads[$_GET['id']],  strrpos($downloads[$_GET['id']], ".")+1);
$end strtolower($endung);
if(
$end == "zip"$header "application/...";
elseif(
$end == "txt"$header "text/plain";
elseif(
$end == "..."$header "...";
...
?>

dann wird doch nur die letzte Endung genommen. kien Problem mehr mit so komischen Dingern wie datei.txt.avi.mp3
_________________
oda so...

10¤ Fotobuch-Gutschein von CEWE

Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von Daniel.
Nach oben
Benutzer-Profile anzeigen Daniel ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13997
Wohnort: Wien

BeitragVerfasst am: 23.01.2007, 18:39    Titel:

Du könntest es auch mit explode() und count() lösen um an das letzte Stückchen zu kommen Wink
Deine Version habe ich noch nicht ausprobiert, sieht aber interessant aus...


MfG Christian
_________________
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht teilnehmen.
Du kannst Dateien in diesem Forum nicht hochladen.
Du kannst Dateien in diesem Forum nicht herunterladen.

 

Alle Zeiten sind GMT + 2 Stunden (Sommerzeit)
Aktuelles Datum und Uhrzeit: 03.06.2020, 13:06
Nach oben
Valid HTML 4.01 Transitional
Valid CSS!
Software based on work from the phpBB-Group  •  Deutsche Übersetzung von phpBB.de

netcup - Internetdienstleistungen
 
 
[ happytec.at | forum.happytec.at | blog.happytec.at | esports.happytec.at | event.happytec.at ]