bijlage downloaden die eerder in db is geüpload
Een bijlage is geüpload in de database en deze heb ik ook gedownload zonder probleem, maar dat is in de test omgeving nu heb ik dit in mijn software geprobeerd alles werkt prima behalve downloaden gaat mis met openen van het bestand ik krijg onleesbare tekst bestanden als ik txt bestand download krijg gewoon de getypte tekst te zien zonder download dialoog venster optie en als pdf download of foto krijg ik onleesbare tekst te zien terwijl dit in de test omgeving wel werkt zonder probleem. Hierbij is mijn download pagina kan iemand zien waar de fout zit?
Quote:
Code (php)
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
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
<?php
if (isset($_GET['aanvraag_id']))
{
$id = $_GET['aanvraag_id'];
$idb = $_GET['bestand_id'];
mysql_connect("--","--","--!") or die (mysql_error());
mysql_select_db("--") or die (mysql_error());
$sql = "select *FROM upload where aanvraag_id = '$id' AND bestand_id='$idb'";
$result = @mysql_query($sql);
$content = @mysql_result($result, 0, "content");
$fileName = @mysql_result($result, 0, "name");
$fileSize = @mysql_result($result, 0, "size");
$fileType = @mysql_result($result, 0, "type");
header("Content-type: $fileType");
header("Content-length: $fileSize");
header("Content-Disposition: attachment; name=$fileName");
header("Content-Description: PHP Generated Data");
header("Content-Type: application/octet-stream");
header("Content-transfer-encoding: binary");
echo "$content";
}
echo "<br><a href='javascript:' onclick='history.go(-1); return false'><b>Vorige pagina</a>";
?>
if (isset($_GET['aanvraag_id']))
{
$id = $_GET['aanvraag_id'];
$idb = $_GET['bestand_id'];
mysql_connect("--","--","--!") or die (mysql_error());
mysql_select_db("--") or die (mysql_error());
$sql = "select *FROM upload where aanvraag_id = '$id' AND bestand_id='$idb'";
$result = @mysql_query($sql);
$content = @mysql_result($result, 0, "content");
$fileName = @mysql_result($result, 0, "name");
$fileSize = @mysql_result($result, 0, "size");
$fileType = @mysql_result($result, 0, "type");
header("Content-type: $fileType");
header("Content-length: $fileSize");
header("Content-Disposition: attachment; name=$fileName");
header("Content-Description: PHP Generated Data");
header("Content-Type: application/octet-stream");
header("Content-transfer-encoding: binary");
echo "$content";
}
echo "<br><a href='javascript:' onclick='history.go(-1); return false'><b>Vorige pagina</a>";
?>
Toevoeging op 06/02/2013 16:19:12:
Ik krijg naast de onleesbare tekst de volgende foutmelding
Warning: Cannot modify header information - headers already sent by (output started at/download.php:1) in /download.php on line 16
Warning: Cannot modify header information - headers already sent by (output started at /download.php:1) in /download.php on line 17
Warning: Cannot modify header information - headers already sent by (output started at /download.php:1) in /download.php on line 18
Warning: Cannot modify header information - headers already sent by (output started at /download.php:1) in /download.php on line 19
Warning: Cannot modify header information - headers already sent by (output started at /download.php:1) in /download.php on line 20
Warning: Cannot modify header information - headers already sent by (output started at/download.php:1) in /download.php on line 21
%PDF-1.4 %äüöß 2 0 obj <> stream xœÅ[Mó¸ ¾Ï¯Èy¤–dY000™I½-0À^ô¶m t/ýûå‡>(Év¬wÅy31E‘”øè!ånêòß·ÿ\¦Ëßl°7}ñ³ºùËûí—Ë¿ùü÷Ç?ßîßovGÎÍ üýûå/OuQúòý÷Ißÿz{|¿ýÚPÚ]Ün–åõ%€ø”¿Ú÷I¯J¿Of½Â缪é}²ëUÁ÷iYgüéªà/·º÷ÉÓ ëž~¬ >ï4€??Wó>}ÑWG"4õ$A3ðÔÏÕÖãâüô‡šÖ+¨•ZΆ“Z”ÔðtÒ*šTéÕäÑ ùgƒ&ãtW—Õ. +XpýÛ÷_7ÃiÕh_O4=ü.éì9œ:‚!£Ù¡?Š/σd0ÅC . g…w9^Nš°°XÇzifRȪÔf€r ÎåÀ2“NˆZ‘”Õ˜v1OcrîÌOÌ]¨KÛErLÌžIü<[ñÁû@×x1ÿN HÑ¡=r8‹ÍyžÅB‡ÀŠ¢nXñ“½Ÿ}ÝWÚ{SÄô÷¯C"IÙ$>0Ågéú®w‰“PõréB×J¤ZKKè«å¬]Ø–”ÉÃg?R‹²ýmRÒ&øâ˜xz¤0ì2ãËâó¼0í8×SêŠ4ˆðg™³ AͼµC]mÈò" kEHazÎÃ_TÄž=6<`zä"—£?‹ïàLTðE¤A.¡`^Q„ëwBëF0Ta“ÇQim•Ã°^¡b¨-¬ÁÞî% AæÔm¹ýÓ'h8Ý j,EPÆŽ¢¹Šû³çº‰S£ß1é¼"ĦŒ(M‡ú^v¤rÕ¹Õ²æg!iÁð&”oöQ…ýÉ¥ºè\zÅÀá«KiÝË‘÷ÈFêGùLšŽÐÓӞ̳
Ten aanzien van je code:
Zet error-reporting aan.
Je kopieert 2 variabelen. Je controleert nergens of ze beide bestaan en of ze voldoen aan de eisen die er aan gesteld worden.
'or die' is geen (goede) foutafhandeling.
Variabelen buiten quotes.
Je query is lek -> gevoelig voor sql-injectie. Met alle risico's.
Je mist foutafhandeling bij je query.
Het gebruik van @ wordt afgeraden; daarmee onderdruk je foutmeldingen. Zorg voor goede foutafhandeling.
In PHP wordt ' aanbevolen (voor echo) en in HTML " (regel 25).
nu zonder de foutmelding maar de tekst blijft onleesbaar en ik krijg geen windows dialoog venster om de bijlge
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
ob_start();
error_reporting(0);
if (isset($_GET['aanvraag_id']))
{
$id = $_GET['aanvraag_id'];
$idb = $_GET['bestand_id'];
mysql_connect("--","--","--!") or die (mysql_error());
mysql_select_db("--") or die (mysql_error());
$query = mysql_query("select *FROM upload where aanvraag_id = '$id' AND bestand_id='$idb'");
$row=mysql_fetch_assoc($query);
header("Content-Type: ".$row['type']);
header("Content-length:".$row['size']);
header("Content-Disposition: attachment; filename=".$row['name']);
header("Content-Description: PHP Generated Data");
header("Content-Type: application/octet-stream");
header("Content-transfer-encoding: binary");
echo($row['content']);
}
mysql_free_result($query);
mysql_close();
ob_start();
error_reporting(0);
if (isset($_GET['aanvraag_id']))
{
$id = $_GET['aanvraag_id'];
$idb = $_GET['bestand_id'];
mysql_connect("--","--","--!") or die (mysql_error());
mysql_select_db("--") or die (mysql_error());
$query = mysql_query("select *FROM upload where aanvraag_id = '$id' AND bestand_id='$idb'");
$row=mysql_fetch_assoc($query);
header("Content-Type: ".$row['type']);
header("Content-length:".$row['size']);
header("Content-Disposition: attachment; filename=".$row['name']);
header("Content-Description: PHP Generated Data");
header("Content-Type: application/octet-stream");
header("Content-transfer-encoding: binary");
echo($row['content']);
}
mysql_free_result($query);
mysql_close();
Waarom heb je een ob_start() aan het begin staan?
Dus een doc, pdf of gif of wat dan ook.
Is dat niet
header("Content-Type: ".$row['type']); want deze dezelfde type wat ik in mijn db opgeslagen heb?
Toevoeging op 07/02/2013 12:45:17:
Kan ik ook het eerder geüploade bestand in db van db halen en in een directory opslaan en dan dit pas downloaden? Als dat zo is Hoe ?
Kan dit te maken hebben dat mijn software in een webserver draait anders dan localhost want met localhost heb ik dit probleem niet. Als dat zo is wat is de oplossing hiervoor?
Code (php)
Code (php)
Quote:
Code (php)
Ik had een server draaien bij 000webhost.com en daar had ik geen last van het probleem. Op mijn localhost wel. Je kunt dit ergens aanpassen in de PHPconfig files dacht ik maar beter is om dat niet te doen en gewoon ervoor zorgen dat er geen output komt voor de 'header();'.
Gewijzigd op 08/02/2013 11:53:25 door Albert de Wit
Maar waar zie je nu mijn echoën op bovenstaande download pagina?
Die zie ik niet, maar kijk eens naar voorbeeld 3.
Quote:
Deze is mijn upload pagina en ik heb geen include of iets dergelijk en toch krijg ik Cannot modify header information - headers already sent by (output started at
Kun je deze nakijken en misschien zie je echoen voor de headers die ik niet zie
Kun je deze nakijken en misschien zie je echoen voor de headers die ik niet zie
Code (php)
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
81
82
83
84
85
86
87
88
89
90
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
81
82
83
84
85
86
87
88
89
90
<?php
if ($_POST['upload'] && $_FILES['userfile']['size'] > 0)
{
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$file_err = $_FILES['userfile']['error'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
}
$intDb=mysql_connect("","","") or die (mysql_error());
mysql_select_db("--", $intDb) or die (mysql_error());
if ($_FILES["userfile"]["type"])
{
if (file_exists($fileName))
{
die( '<td>Sorry <b>'. $fileName . '</b> already exists</td>');
}
$query="INSERT INTO upload (aanvraag_id, name, size, type, content ) VALUES ('$id','$fileName', '$fileSize', '$fileType', '$content')";
if (!mysql_query($query)) {
echo "Het bijwerken van de database is mislukt!";
}
echo "<td>De bijlage is toegevoegd</td>\n";
}
}
}else
{
print"<form method=post enctype=multipart/form-data>";
print"<table width='350' border='0' cellpadding='1' cellspacing='1' class='box' bgcolor=$color[5]>";
print'<tr>';
print '<td width="246">';
print'<input type="hidden" name="MAX_FILE_SIZE" value="2000000">';
print'<input name="userfile" type="file" id="userfile">';
print '</td>';
print '<td width="80"><input name="upload" type="submit" class="box" id="upload" value="upload"></td></tr>';
}
mysql_connect("","","!") or die (mysql_error());
mysql_select_db("") or die (mysql_error());
$sql = "SELECT * FROM upload WHERE aanvraag_id='$id'";
// die(sql);
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
print"<table width='350' border='0' cellpadding='1' cellspacing='1' class='box' >";
echo " <tr>\n";
echo " <th align='left'>Bestandsnaam </th>\n";
echo " <th align='left'>Type </th>\n";
echo " <th align='left'>Size </th>\n";
echo " <th align='left'>Opties</th>\n";
echo " </tr>\n";
while ($rows = mysql_fetch_object($result))
{
echo " <tr>\n";
echo "<td align='left'>$rows->name</td>\n";
echo "<td align='left'>$rows->type</td>\n";
echo "<td align='left'>$rows->size</td>\n";
echo "<td align='left'><a href='download.php?aanvraag_id=$id&bestand_id=$rows->bestand_id'' target='_blank'>Download</a>/";
echo "<a href='verwijderen.php?aanvraag_id=$id&bestand_id=$rows->bestand_id'>verwijderen</a></td>\n";
echo "</tr>\n";
}
print "</table>\n";
mysql_free_result($result);
mysql_close($intDb);
echo "<tr>\n";
echo "<td align='left'><a href='javascript:' onclick='history.go(-1); return false'><b>Vorige pagina</a></td>\n";
echo "</tr>\n";
print "</td>\n";
print "</tr>\n";
print "</table>\n";
print "</FORM>\n";
?>
if ($_POST['upload'] && $_FILES['userfile']['size'] > 0)
{
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$file_err = $_FILES['userfile']['error'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
}
$intDb=mysql_connect("","","") or die (mysql_error());
mysql_select_db("--", $intDb) or die (mysql_error());
if ($_FILES["userfile"]["type"])
{
if (file_exists($fileName))
{
die( '<td>Sorry <b>'. $fileName . '</b> already exists</td>');
}
$query="INSERT INTO upload (aanvraag_id, name, size, type, content ) VALUES ('$id','$fileName', '$fileSize', '$fileType', '$content')";
if (!mysql_query($query)) {
echo "Het bijwerken van de database is mislukt!";
}
echo "<td>De bijlage is toegevoegd</td>\n";
}
}
}else
{
print"<form method=post enctype=multipart/form-data>";
print"<table width='350' border='0' cellpadding='1' cellspacing='1' class='box' bgcolor=$color[5]>";
print'<tr>';
print '<td width="246">';
print'<input type="hidden" name="MAX_FILE_SIZE" value="2000000">';
print'<input name="userfile" type="file" id="userfile">';
print '</td>';
print '<td width="80"><input name="upload" type="submit" class="box" id="upload" value="upload"></td></tr>';
}
mysql_connect("","","!") or die (mysql_error());
mysql_select_db("") or die (mysql_error());
$sql = "SELECT * FROM upload WHERE aanvraag_id='$id'";
// die(sql);
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
print"<table width='350' border='0' cellpadding='1' cellspacing='1' class='box' >";
echo " <tr>\n";
echo " <th align='left'>Bestandsnaam </th>\n";
echo " <th align='left'>Type </th>\n";
echo " <th align='left'>Size </th>\n";
echo " <th align='left'>Opties</th>\n";
echo " </tr>\n";
while ($rows = mysql_fetch_object($result))
{
echo " <tr>\n";
echo "<td align='left'>$rows->name</td>\n";
echo "<td align='left'>$rows->type</td>\n";
echo "<td align='left'>$rows->size</td>\n";
echo "<td align='left'><a href='download.php?aanvraag_id=$id&bestand_id=$rows->bestand_id'' target='_blank'>Download</a>/";
echo "<a href='verwijderen.php?aanvraag_id=$id&bestand_id=$rows->bestand_id'>verwijderen</a></td>\n";
echo "</tr>\n";
}
print "</table>\n";
mysql_free_result($result);
mysql_close($intDb);
echo "<tr>\n";
echo "<td align='left'><a href='javascript:' onclick='history.go(-1); return false'><b>Vorige pagina</a></td>\n";
echo "</tr>\n";
print "</td>\n";
print "</tr>\n";
print "</table>\n";
print "</FORM>\n";
?>
Gewijzigd op 08/02/2013 15:54:08 door Murtada Helo
Kijk nou eens goed naar je error.
Warning: Cannot modify header information - headers already sent by (output started at/download.php:1) in /download.php on line 16
Even basis ontleding
Warning:
Waarschuwing (duh)
Cannot modify header information
Kan header informatie niet modificeren
headers already sent by (output started at/download.php:1)
Headers zijn al verzonden op download.php op lijn 1
in /download.php on line 16
error komt op download.php lijn 16
Jouw code vanaf regel 14:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
header("Content-Type: ".$row['type']);
header("Content-length:".$row['size']);
header("Content-Disposition: attachment; filename=".$row['name']);
header("Content-Description: PHP Generated Data");
header("Content-Type: application/octet-stream");
header("Content-transfer-encoding: binary");
echo($row['content']);
?>
header("Content-Type: ".$row['type']);
header("Content-length:".$row['size']);
header("Content-Disposition: attachment; filename=".$row['name']);
header("Content-Description: PHP Generated Data");
header("Content-Type: application/octet-stream");
header("Content-transfer-encoding: binary");
echo($row['content']);
?>
Wat denk je nu dat er volgens de error verkeerd gaat?
Hint: headers already sent by (output started at/download.php:1)
Het probleem gaat niet om de foutmelding of de waarschuwing. Het probleem is dat in de download.php wordt de inhoudt van het bestand in een onleesbare tekst geopen en ik ben nu dagen bezig om dit op te lossen maar dit krijg ik niet met elkaar.
Want dan denk ik dat je raw data van je afbeelding in ASCII karakters ziet.
Die code zorgt ervoor dat dat omgezet wordt naar een afbeelding.
- SanThe - op 06/02/2013 16:50:29:
Je zal ook in de headers moeten aangeven wat voor bestand het is.
Dus een doc, pdf of gif of wat dan ook.
Dus een doc, pdf of gif of wat dan ook.
header("Content-Type: ".$row['type']); want deze dezelfde type dat bij bestand_id hoort dat van mysql wordt opgehaald?
Wat staat er in $row['type']?
localhost zonder enkel probleem dus deze huidige header werkt zonder probleem met localhost als test omgeving.
Maar als deze script in mijn applicatie die met een andere webserver draait dan wordt bij het kliken op download de inhoud van het bestand pdf,png, maak niet out van welke type is als vreemde tekst op download pagina gedisplayed hoe kan ik dat het bestand bij kliken op download het betreffenderdt bestand wordt gewoon gedownload zoals ik dat in testomgeving ook dit doet graag uw hulp
Lees dan ook wat ik eerder heb gezegd over de headers...
- SanThe - op 08/02/2013 17:27:02:
Wat staat er in $row['type']?
Murtada Helo op 08/02/2013 18:53:38:
Het type dat bij bestand_id hoort.
Maar echo dat eens.
Dat zal waarschijnlijk niet goed zijn.
Heb het geechoed en krijg de bijbehoorende type dus deze is goed