Problemen met download script.
Hallo, ik heb een download script gemaakt wat niet schijnt te werken, daarom de vraag of er iemand naar wil kijken.
In firefox krijg ik dan de volgende melding: blabla, kon niet worden opgeslagen omdat het bronbestand niet gelezen kon worden.
Iemand weet wat ik fout doe?
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
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
<?php
include("include/basis.php");
$id = $_GET["id"];
$module = $mysqli->query("SELECT * FROM admin_file_manager WHERE id = $id") or $mysqli->error;
if ($module->num_rows > "0")
{
$res = $module->fetch_array();
if ( ! function_exists ( 'mime_content_type ' ) )
{
function mime_content_type ( $f )
{
return trim ( exec ('file -bi ' . escapeshellarg ( $f ) ) ) ;
}
}
$file = "admin/data/".$res["bestand"];
if (file_exists($file)) {
$mysqli->query("UPDATE admin_file_manager SET hits=hits+1 WHERE id=$id") or $mysqli->error;
$ext = substr($file, -3);
$mtype = mime_content_type($file);
header('Content-Description: File Transfer');
header('Content-Type: '.$mtype.'');
header('Content-Disposition: attachment; filename='.basename($res["naam"].".".$ext).'');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: '.filesize($file).'');
ob_clean();
flush();
readfile($file);
exit;
}
else
{
echo 'bestand bestaat niet';
}
}
else
{
header("Location: ".$_SERVER["HTTP_REFERER"]);
die;
}
?>
include("include/basis.php");
$id = $_GET["id"];
$module = $mysqli->query("SELECT * FROM admin_file_manager WHERE id = $id") or $mysqli->error;
if ($module->num_rows > "0")
{
$res = $module->fetch_array();
if ( ! function_exists ( 'mime_content_type ' ) )
{
function mime_content_type ( $f )
{
return trim ( exec ('file -bi ' . escapeshellarg ( $f ) ) ) ;
}
}
$file = "admin/data/".$res["bestand"];
if (file_exists($file)) {
$mysqli->query("UPDATE admin_file_manager SET hits=hits+1 WHERE id=$id") or $mysqli->error;
$ext = substr($file, -3);
$mtype = mime_content_type($file);
header('Content-Description: File Transfer');
header('Content-Type: '.$mtype.'');
header('Content-Disposition: attachment; filename='.basename($res["naam"].".".$ext).'');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: '.filesize($file).'');
ob_clean();
flush();
readfile($file);
exit;
}
else
{
echo 'bestand bestaat niet';
}
}
else
{
header("Location: ".$_SERVER["HTTP_REFERER"]);
die;
}
?>
In firefox krijg ik dan de volgende melding: blabla, kon niet worden opgeslagen omdat het bronbestand niet gelezen kon worden.
Iemand weet wat ik fout doe?
Gewijzigd op 01/01/1970 01:00:00 door Bart van Asselt
ob_clean() & flush() zou niet nodig moeten zijn. Denk ook dat daar het probleem ligt, er worden headers verstuurd waarna je deze pushed naar de gebruiker voordat het bestand word gelezen.
Dat was het probleem dus, nu een ander probleem, als er spaties in de bestandsnaam zitten, download ij het bestand wel alleen stopt de naam bij een spatie oftewel: hallo wereld.doc veranderd in hallo.doc
Ik dacht aan rawurlencode() dan gaat het wel goed alleen zijn dan de spaties veranderd in %20
Ik dacht aan rawurlencode() dan gaat het wel goed alleen zijn dan de spaties veranderd in %20
http://nl.php.net/htmlspecialchars al geprobeert ?
Spaties horen ook niet in een bestandsnaam.




