Download alle file types
Ik probeer iets te maken dat mensen een bestand downloaden zonder dat ze zelf naar die link gaan dus voorbeeld:
Dit is de link waar ze het moeten downloaden: www.test.com/pages/download?downloadid=5
En waar het bestand staat is
www.test.com/uploads/1419360519.png
Die 5 bij link is getal uit DB en daar staat ook de URL in voor de download van het bestand.
In dit voorbeeld is het ook een PNG, maar het kan ELK soort bestand zijn.
Hopelijk snappen jullie wat ik bedoel
Toegevoegd:
Het is me al beetje gelukt maar ik heb nu een volgend probleem, dit is mijn code:
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
$dir = '../../uploads/'; //geef een map aan met eindslash (. voor deze map)
$bestand = substr($file_url, 14);
echo $dir.$bestand;
if(file_exists($dir.$bestand)) //en ?bestand=.. is ook nog eens een bestaand bestand is
{
header('Content-type: Application/octet-stream'); //zet de header dat het bestand gedownload moet worden
//en dat het dus niet in de browser afgespeeld kan worden
header('Content-Disposition: attachment; filename='.$bestand); //geef aan welk bestand gedownload moet worden
ob_clean();
flush();
readfile($dir.$bestand);
exit;
}
else //als het bestand niet bestaat
{
echo 'bestand bestaat niet'; //echo dat
}
} else {
echo "Er is iets fout gegaan, probeer het opnieuw.";
}
$bestand = substr($file_url, 14);
echo $dir.$bestand;
if(file_exists($dir.$bestand)) //en ?bestand=.. is ook nog eens een bestaand bestand is
{
header('Content-type: Application/octet-stream'); //zet de header dat het bestand gedownload moet worden
//en dat het dus niet in de browser afgespeeld kan worden
header('Content-Disposition: attachment; filename='.$bestand); //geef aan welk bestand gedownload moet worden
ob_clean();
flush();
readfile($dir.$bestand);
exit;
}
else //als het bestand niet bestaat
{
echo 'bestand bestaat niet'; //echo dat
}
} else {
echo "Er is iets fout gegaan, probeer het opnieuw.";
}
Maar als ik dat doe echo't hij het bestand zelf, daarmee bedoel ik dat ik dit krijg:
Code (php)
1
PNG IHDRV@\sRGBgAMAa pHYsodIDATx^gazmM&,`lr(@DE@%r3s749}oh$mihUWWWWO]r%K~vFmA . ne]y]E 2+eUw_we(|"WRku}@wu#_'{Hwc3y=F)=@#-O3zwAMOLMOb7?n[m/>8@h}[x~o_2Ncuw @@"\N?<{9-yI2, dUF_= {_9<RWa/uiu!^p-ku{Mp5{-yMocZK=rZcw'6 'x-,uO^{}|_P}hGzFFJ8=9,/$b|[nHxzxM~n _Yt;_=S.s)[w[Fo-@//{qG[_<#Z]~PAu#|T^{I_=*#W# _NK=!{-WXQR UvU~Uj2I1V5Id_K%{#E*K@*VfCXo*WWWJX_53o$a"{;[vvv~Mn}
Gewijzigd op 02/01/2015 08:19:17 door Kevin J
Probeer eens: base64_encode($dir.$bestand);
Wat is dat voor gedoe met ob_clean()? Als ik dat lees gaan mijn haren al overeind staan.
en die ob_clean() had ik van tutorial want ik weet 0,0 van iets downloaden en dus ging het google
ik geef wel het volledige bestand:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
session_start();
include '../../include/config.php';
if (!isset($_SESSION['login'])) {
echo "Zou u willen inloggen voordat u dit bestand download.</div></div>";
exit;
}
$vote = $_REQUEST['vote'];
if ($vote == 0) {
echo "<B>Bestand word niet gedownload.</b>";
} elseif ($vote == 1) {
$did = $_SESSION['did'];
$sql3 = mysqli_query($db, "SELECT * FROM downloads WHERE id='$did'");
$data22 = mysqli_fetch_array($sql3);
$file_url = $data22['url'];
$path = $file_url;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($path) . "\"");
readfile($path);
}
?>
session_start();
include '../../include/config.php';
if (!isset($_SESSION['login'])) {
echo "Zou u willen inloggen voordat u dit bestand download.</div></div>";
exit;
}
$vote = $_REQUEST['vote'];
if ($vote == 0) {
echo "<B>Bestand word niet gedownload.</b>";
} elseif ($vote == 1) {
$did = $_SESSION['did'];
$sql3 = mysqli_query($db, "SELECT * FROM downloads WHERE id='$did'");
$data22 = mysqli_fetch_array($sql3);
$file_url = $data22['url'];
$path = $file_url;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($path) . "\"");
readfile($path);
}
?>
Gewijzigd op 02/01/2015 10:09:05 door Kevin J
Kopieer de code eens in notepad/kladblok en sla het daarin eens opnieuw op?
Toevoeging op 02/01/2015 10:23:41:
Ik heb even wat gestest ik heb het volgende weg gehaald:
Code (php)
1
2
3
2
3
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($path) . "\"");
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($path) . "\"");
Doet hij het zelfde geen foutmelding of iets, dus hij doet alleen readfile uitvoeren, en outputen op page
Gewijzigd op 02/01/2015 10:24:59 door - Ariën -
Okay en hoe kan ik dan het beste doen?
Zie mijn post van 10:14.
Dat zag ik maar welke code bedoel je?
Dus iig je script die je hierboven laat zien en config.php
Gewijzigd op 02/01/2015 12:37:01 door Frank Nietbelangrijk
download2.php
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
session_start();
include '../../include/config.php';
if (!isset($_SESSION['login'])) {
echo "Zou u willen inloggen voordat u dit bestand download.</div></div>";
exit;
}
$vote = $_REQUEST['vote'];
if ($vote == 0) {
echo "<B>Bestand word niet gedownload.</b>";
} elseif ($vote == 1) {
$did = $_SESSION['did'];
$sql3 = mysqli_query($db, "SELECT * FROM downloads WHERE id='$did'");
$data22 = mysqli_fetch_array($sql3);
$file_url = $data22['url'];
$path = $file_url;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($path) . "\"");
readfile($path);
}
?>
session_start();
include '../../include/config.php';
if (!isset($_SESSION['login'])) {
echo "Zou u willen inloggen voordat u dit bestand download.</div></div>";
exit;
}
$vote = $_REQUEST['vote'];
if ($vote == 0) {
echo "<B>Bestand word niet gedownload.</b>";
} elseif ($vote == 1) {
$did = $_SESSION['did'];
$sql3 = mysqli_query($db, "SELECT * FROM downloads WHERE id='$did'");
$data22 = mysqli_fetch_array($sql3);
$file_url = $data22['url'];
$path = $file_url;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($path) . "\"");
readfile($path);
}
?>
die $_REQUEST['vote'] is 1 of 0
en in de config staat alleen de mysql_connect met variable $db
En voor de duidelijkheid ik probeer nu een PNG bestand op te roepen
Gewijzigd op 02/01/2015 12:41:06 door Kevin J
Sommige editors, zoals Notepad++ kunnen ze zelf ook verwijderen door hem expliciet op te slaan als de jusite encoding zonder B-O-M.
maar geprobeerd zojuist en het werkt niet
Ikzelf gebruik nog wat extra headers die hier beschreven staan:
http://php.net/manual/en/function.readfile.php
Als je nou puur en alleen mijn voorbeeldje pakt en de rest van je code (regel 1 tm 15) er uit laat. En je maakt van $path = even een willekeurig bestaand bestand, doet ie het dan ook niet goed?
Dan werkt hij wel, kan Dynamic Pages het blokkeren ofzo?
regel voor regel even je script weer aanvullen en bij elke regel kijken of het nog lukt...
Iemand oplossing?