Autor Beitrag
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mo 24.12.07 15:29 
Moin,
ich hab mal wieder ein großes Problem:
Ich möchte eine Datei downloaden, von meinem Server (der ist eigentlich von Funpic, aber egal). Dort habe ich auch eine Datenbank, in der die Daten gespeichert sind. Wenn ich nun die Download-Datei aufrufe, dann übergebe ich dieser eine Variabel $did=<Nummer>. Alles ganz gut. Anhand der Vaiable lese ich aus meiner Tabelle den Dateiname aus. Der sieht dann zum Beispiel so aus: "0.zip". Nun füge ich noch das Verzeichnis hinzu und schon sollte es gehen.
$filename sieht dann so aus: "progrs/0.zip". Die Datei wird auch geöffnet, allerdings ist sie nach dem Herunterladen defekt und kann nicht geöffnet werden. Was mach ich falsch?
ausblenden volle Höhe SQL-Anweisung
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:
 
if (Isset($_GET['did'])) {
 $did = mysql_real_escape_string($_GET['did']);
 
$satz = mysql_query("SELECT * FROM download WHERE id LIKE '".$did."'"OR die("$fehlercode");
$row = mysql_fetch_array($satz);

$basedir = "progs/";

$filename = $basedir.$row[1];
$bool = File_Exists("$filename");

// Einbruchsversuch abfangen.
if ($bool) Die Datei existiert nie.
{
//Zaehler erhöhen
$zaehler = $row[2];
$zaehler++;
$satz = mysql_query("Update download SET zaehler='$zaehler' WHERE id LIKE '$did'");

// Passenden Datentyp erzeugen.
header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="'.$filename.'"');

// Datei ausgeben.
readfile($filename);

exit;
}
echo $fehlercode.'<br>';
 
 }
 else {
 echo $fehlercode;
 }
DarkHunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 477

Win XP
D3 Prof, D2005 PE
BeitragVerfasst: Di 25.12.07 23:58 
An deinem Code kann ich keine Fehler erkennen, habe ihn aber auch nicht getestet. Ich habe jedoch zwei Anmerkungen:

1. Warum nutzt du die numerischen Indizes für $row[] ?
die funktion mysql_fetch_array indexiert auch alphanumerisch (bsp: $row['title']).
Evtl ist der dateiname nicht die 2. Spalte in der Datenbanktabelle, dann ist klar warum das Script nicht läuft.
Außerdem ist der Code deutlich besser zu lesen, weil man nicht die Struktur der Tabelle kennen muss um zu wissen, was da zugewiesen wird.

2. Ich zitiere das PHP-Manual zur Funktion readfile:
Zitat:
If you are trying to force a download from a script and you're having corrupted files, but the download was successful, just make sure you don't have spaces or news lines before and/or after <? script ?>

You can check this by opening your download with a text editor. If you see empty lines or spaces at the top, then that's the problem.

Übersetzt heißt es soviel wie: "Stelle sicher, dass keine Leerzeilen oder -zeichen vor oder hinter <? script ?> sind.
Dies kann man durch prüfen der Datei in einem Texteditor herausfinden, wenn leere Zeilen zu sehen sind, dann ist es das Problem.

_________________
I believe that every human has a finite number of heart-beats. I don't intend to waste any of mine running around doing exercises.
- Neil Armstrong
Regan Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mi 26.12.07 10:34 
OK. Ich habe das ganze mal angepasst. Allerdings geht es immer noch nicht :sad: .
Hier mal mein Quelltext. Das ausgequotete ist die Variante, die ich zur Zeit verwende. Dabei sieht der Nutzer aber den Pfad und das will ich ja verhindern.
ausblenden volle Höhe Quelltext
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:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
<?
$fehlercode='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Startmenu.de.vu - Download Fehler</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<meta name="author" content="Regan">
<meta name="generator" content="TxtPad">
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
</head>
<body>
<div id="mainbody">
<p class="error">Beim Herunterladen ist ein Fehler aufgetreten.</p>
<a href="index.php">Zur Startseite</a>
</div>
</body>
</html>';
$stellen=5;
require("_mysql.php");

if ($did==8) {
if (gmmktime()<gmmktime(23,59,59,7,24,2007)) {
echo($fehlercode);
 exit;
 }
}
/* Die andere Lösung
 $did = mysql_real_escape_string($_GET['did']);
 if (Isset($_GET['did'])) {


 $did = mysql_real_escape_string($_GET['did']);
 $satz = mysql_query("SELECT * FROM startmenu_down WHERE id LIKE '".$did."'") OR die("$fehlercode");
$row = mysql_fetch_array($satz);
$zaehler = $row[2];
$zaehler++;
$satz = mysql_query("Update startmenu_down SET zaehler='$zaehler' WHERE id LIKE '$did'");
header("Location: http://04regan.04.funpic.de/pstartmenu/files/$row[1]");

exit;
}

 else {
 echo $fehlercode;
 }*/
 if (Isset($_GET['did'])) {
 $did = mysql_real_escape_string($_GET['did']);
 
$satz = mysql_query("SELECT * FROM download WHERE id LIKE '".$did."'") OR die("$fehlercode");
$row = mysql_fetch_array($satz);

$basedir = "progs/";

$filename = $basedir.$row['datei'];
$bool = File_Exists("$filename");

// Einbruchsversuch abfangen.
if ($bool) //Die Datei existiert nie.
{
//Zaehler erhöhen
$zaehler = $row['zaehler'];
$zaehler++;
$satz = mysql_query("Update download SET zaehler='$zaehler' WHERE id LIKE '$did'");

// Passenden Datentyp erzeugen.
header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="'.$filename.'"');

// Datei ausgeben.
readfile($filename);

exit;
}
echo $fehlercode.'<br>';
 
 }
 else {
 echo $fehlercode;
 }
?>


Moderiert von user profile iconChristian S.: Sql- durch Code-Tags ersetzt
DarkHunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 477

Win XP
D3 Prof, D2005 PE
BeitragVerfasst: Mi 26.12.07 14:19 
ich habe leider gerade keine zeit es ausführlicher zu testen, aber versuche evtl nochmal ein paar mehr header informationen zu senden. je umfangreicher die header-informationen, desto besser können die browser das verarbeiten
zb header('Content-Length: ' . filesize($filename));

_________________
I believe that every human has a finite number of heart-beats. I don't intend to waste any of mine running around doing exercises.
- Neil Armstrong
Regan Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mi 26.12.07 15:32 
Es geht ja nicht darum, dass die Datei nicht heruntergeladen werden könnte, sondern die Datei soll nie existieren, obwohl sie das tut. Ich hab mir dazu schon $filename ausgeben lassen und das dann in die Browser-Zeile eingegeben. Und da kann er es herunterladen.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 26.12.07 15:42 
Hallo!

Schau Dir mal im PHP-Manual die Kommentare zu file_exists Funktion. Da stehen einige wertvolle Hinweise, z.B. bezüglich Safe Mode oder der Frage, ob Du vielleicht den tatsächlichen Pfad auf dem Server benutzen musst.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Regan Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mi 26.12.07 15:58 
OK. ich habe mich jetzt belesen. Und zwar hier, hier und hier. Aber es hat nichts gebracht. Es ist weiterhin so, dass die Datei nicht existieren soll, obwohl sie existiert.

Edit: Ich hoste die Dateien bei Funpic.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 26.12.07 18:18 
Haste es mal lokal bei XAMPP probiert? Denn XAMPP ist im Normalfall wesentlich unsicherer konfiguriert. Wenn es da klappt, musste mal gucken, welche Befehle funpic deaktiviert hat.
Regan Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mi 26.12.07 19:14 
user profile iconHeiko hat folgendes geschrieben:
Haste es mal lokal bei XAMPP probiert? Denn XAMPP ist im Normalfall wesentlich unsicherer konfiguriert. Wenn es da klappt, musste mal gucken, welche Befehle funpic deaktiviert hat.

XAMPP? Ich hab nur Win XP Home SP2, kann also keinen Server installieren. Die Funktion file_exists kann auf jeden Fall verwendet werden. Ich verwende die selber schon in anderen php-Dateien. Deshalb frage ich mich ja, warum das nicht geht. Wenn ich eine Abfrage mache, ob die Downlaoddatei existiert, dann sagt er mir, dass sie existiert.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 26.12.07 19:18 
user profile iconRegan hat folgendes geschrieben:
user profile iconHeiko hat folgendes geschrieben:
Haste es mal lokal bei XAMPP probiert? Denn XAMPP ist im Normalfall wesentlich unsicherer konfiguriert. Wenn es da klappt, musste mal gucken, welche Befehle funpic deaktiviert hat.

XAMPP? Ich hab nur Win XP Home SP2,
Etwas Off topic: XAMPP sollte auch auf XP Home laufen, ich wüsste nicht, was dagegen spricht.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 26.12.07 19:20 
user profile iconRegan hat folgendes geschrieben:
XAMPP? Ich hab nur Win XP Home SP2, kann also keinen Server installieren.

Warum kannst du unter XP keinen Server installieren? Man kann selbst aus einem Win95-Rechner etc. einen Server machen - man braucht nur die entsprechende App. Und XAMPP ist genau so eine App!!

PS: Im Normalfall reicht die Lite-Version ;)
Regan Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Fr 28.12.07 14:43 
OK. Ich werd das mal ausprobieren und dann meld ich mich mal. Wird aber erst nächstes Jahr :wink: .