kan geen bestand downloaden
Ik heb een probleem, ik probeer een download scriptje te maken, maar hij heeft nogal problemen met een mp3 bestand(daarmee test ik), als ik op submit(in het html formulier), nadat ik natuurlijk een url hebt ingetypt in de text area, dan geeft hij alleen een lijst met allemaal tekens(alsof hij een mp3 bestand opent met een kladblok). Het werkt wel als ik de formulier de info direct naar de download script stuur. Ik zou graag willen weten waarom hij het niet doet. Al vast Bedankt.
p.s. let niet op de rommelige manier, zoals dat met de totaal overbodige submit... het werkt nu half en ik wil het ook halfwerkend of beter houden....
Dit is wat er uit het script komt(gedeeltelijk)als ik dezel link gebruik:
http://freedownloads.last.fm/download/494669779/Calgary.mp3 (geen illegaal mp3 bestand hoor)
this url works(this is done by test.php)
____________________________________________
This is done with my download php script(download.php)
____________________________________________
URL: http://freedownloads.last.fm/download/494669779/Calgary.mp3
downloadtype: music
Using music option for download!!!
ID3TIT2CalgaryTPE1 Bon IverTALB Bon IverTRCK8COMMLengFree download from http://www.last.fm/music/Bon+Iver and http://MP3.comÿû`Info%^=– !#&)+.0358;=@BEGJMORTWY\_adfiknqsvx{}‚„‡‰Œ‘”–™›ž £¦¨«°²µ¸º½¿ÂÄÇÊÌÏÑÔÖÙÜÞáãæèëîðóõøúý9LAME3.96r¯.G€$4N€=–Gj3Vÿû`ðf€Ðš 3@LAME3.96.1UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.96.1UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÿû’`¾ðf€Ðš 3@UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.96.1UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÿû’`ÿðf€Ðš 3@UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.96.1UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÿû’`ÿðf€Ðš ENZ....
Hier is de code(main.php):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//Variables from form.
$url = $_GET['downloadlink'];
$downloadtype = $_GET['downloadtype'];
$submit = 'submit';
//setting up curl execution code
$ch = curl_init('http://localhost/downloadphp.php?downloadlink='. $url .'&downloadtype='. $downloadtype);
$ch2 = curl_init('http://localhost/test.php?downloadlink='. $url .'&downloadtype='. $downloadtype);
curl_exec($ch2);
curl_close($ch2);
curl_exec($ch);
curl_close($ch);
?>
//Variables from form.
$url = $_GET['downloadlink'];
$downloadtype = $_GET['downloadtype'];
$submit = 'submit';
//setting up curl execution code
$ch = curl_init('http://localhost/downloadphp.php?downloadlink='. $url .'&downloadtype='. $downloadtype);
$ch2 = curl_init('http://localhost/test.php?downloadlink='. $url .'&downloadtype='. $downloadtype);
curl_exec($ch2);
curl_close($ch2);
curl_exec($ch);
curl_close($ch);
?>
Ik stuur de informatie van het formulier naar 2 verschillende scripts, eentje checkt of de url werkt, en de andere download het bestand(het verzenden na de twee formuliers werkt), maar het downloaden niet meer, het deed het wel toen ik de info uit het formulier direct naar de download script stuurde.
dit is de downloadphp.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
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
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
<?php
//gets url variables
$url = $_GET['downloadlink'];
$downloadtype = $_GET['downloadtype'];
//checks of file exists
$fileexists = file_exists('C:\Users\Eldizen\Downloads\\'. $url);
$downloadfolder = 'C:\Users\Eldizen\Downloads\\'. $url;
//to lazy to trow this away
$submit = "submit";
//debug
echo "This is done with my download php script(download.php)<br>____________________________________________<P> ";
echo 'URL: ' . $url . '<p>';
echo 'downloadtype: ' . $downloadtype . '<p>' ;
//code to check if url exists, if true it can download, if not it cannot download file
function url_exists($url) {
if ((strpos($url, 'http')) === false) $url = 'http://' . $url;
if (is_array(@get_headers($url)))
return true;
else
return false;
}
//this is the code to download the file
if($submit == "submit")
{
if($downloadtype == "movie")
{
echo "Using movie option for download!!!<p>";
header("Content-Description: File Transfer");
header("Content-disposition: attachment; filename=".basename($url));
header("Content-type: video/mpeg");
readfile($url);
}
elseif($downloadtype == "music" and $downloadtype !== "movie")
{
echo "Using music option for download!!!<p>";
header("Content-type: application/x-file-to-save", FALSE);
header("Content-type: audio", FALSE);
header("Content-type: audio/mpeg3", FALSE);
header("Content-type: audio/mp3", FALSE);
header("Content-type: audio/wav", FALSE);
header("Content-type: audio/m3u", FALSE);
header("Content-disposition: attachment; filename=".basename($url));
readfile($url);
}
//the check code if file is already downloaded
if($fileexists == $downloadfolder)
{
echo '<center> <font size="8" color="GREEN"> DOWNLOAD STARTED</font></center>';
}
elseif(file_exists($downloadfolder) == false)
{
header("location: geendownload.html");
}
//if nothing can be downloaded, there is no url
if($submit !== "submit")
{
echo "Please paste url!";
}
}
?>
//gets url variables
$url = $_GET['downloadlink'];
$downloadtype = $_GET['downloadtype'];
//checks of file exists
$fileexists = file_exists('C:\Users\Eldizen\Downloads\\'. $url);
$downloadfolder = 'C:\Users\Eldizen\Downloads\\'. $url;
//to lazy to trow this away
$submit = "submit";
//debug
echo "This is done with my download php script(download.php)<br>____________________________________________<P> ";
echo 'URL: ' . $url . '<p>';
echo 'downloadtype: ' . $downloadtype . '<p>' ;
//code to check if url exists, if true it can download, if not it cannot download file
function url_exists($url) {
if ((strpos($url, 'http')) === false) $url = 'http://' . $url;
if (is_array(@get_headers($url)))
return true;
else
return false;
}
//this is the code to download the file
if($submit == "submit")
{
if($downloadtype == "movie")
{
echo "Using movie option for download!!!<p>";
header("Content-Description: File Transfer");
header("Content-disposition: attachment; filename=".basename($url));
header("Content-type: video/mpeg");
readfile($url);
}
elseif($downloadtype == "music" and $downloadtype !== "movie")
{
echo "Using music option for download!!!<p>";
header("Content-type: application/x-file-to-save", FALSE);
header("Content-type: audio", FALSE);
header("Content-type: audio/mpeg3", FALSE);
header("Content-type: audio/mp3", FALSE);
header("Content-type: audio/wav", FALSE);
header("Content-type: audio/m3u", FALSE);
header("Content-disposition: attachment; filename=".basename($url));
readfile($url);
}
//the check code if file is already downloaded
if($fileexists == $downloadfolder)
{
echo '<center> <font size="8" color="GREEN"> DOWNLOAD STARTED</font></center>';
}
elseif(file_exists($downloadfolder) == false)
{
header("location: geendownload.html");
}
//if nothing can be downloaded, there is no url
if($submit !== "submit")
{
echo "Please paste url!";
}
}
?>
en dit is de test.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$url = $_GET['downloadlink'];
//url checker for the download
function url_exists($url) {
if ((strpos($url, "http")) === false) $url = "http://" . $url;
if (is_array(@get_headers($url)))
return true;
else
return false;
}
//when true or when not true
if (url_exists($url) == true)
{
echo 'this url works(this is done by test.php)<br>____________________________________________ <P>' ;
}
elseif(url_exists($url) !== true)
{
echo 'this url doesnt works(this is done by test.php)<br>____________________________________________ <P>' ;
}
[/code]
$url = $_GET['downloadlink'];
//url checker for the download
function url_exists($url) {
if ((strpos($url, "http")) === false) $url = "http://" . $url;
if (is_array(@get_headers($url)))
return true;
else
return false;
}
//when true or when not true
if (url_exists($url) == true)
{
echo 'this url works(this is done by test.php)<br>____________________________________________ <P>' ;
}
elseif(url_exists($url) !== true)
{
echo 'this url doesnt works(this is done by test.php)<br>____________________________________________ <P>' ;
}
[/code]
Gewijzigd op 11/05/2013 11:46:24 door RareAMV Unknown
Wil je een bestand downloaden dan kan je alleen de headers versturen en daarna het bestand. Niets ervoor, niets erna.
Gewijzigd op 10/05/2013 12:30:12 door Erwin H
Erwin H op 10/05/2013 12:29:46:
Ik ben niet helemaal door je script gegaan, maar wat in elk geval NIET kan, is eerst tekst naar de browser sturen en daarna een bestand aanbieden voor download. Omdat je dan al tekst hebt verzonden zal ALLES daarna ook als gewone browser content gezien worden.
Wil je een bestand downloaden dan kan je alleen de headers versturen en daarna het bestand. Niets ervoor, niets erna.
Wil je een bestand downloaden dan kan je alleen de headers versturen en daarna het bestand. Niets ervoor, niets erna.
ik snap niet helemaal wat hier bedoelt wordt, ik verstuur een download link en een optie voor het downloaden van muziek of een filmpje naar 2 verschillende scripts doormiddel van curl(kan hier de fout zitten?), in het php script staan eerst de headers dan de readfile() code, zoals ik gelezen heb in andere forums. Ik zie me nergens text sturen, of bedoel je de optie van muziek of video in het formulier?
EDIT*: de fout zit in het gebruik curl, ik heb alleen geen flauw idee waarom...
Gewijzigd op 10/05/2013 12:46:30 door RareAMV Unknown
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
//debug
echo "This is done with my download php script(download.php)<br>____________________________________________<P> ";
echo 'URL: ' . $url . '<p>';
echo 'downloadtype: ' . $downloadtype . '<p>' ;
...
//this is the code to download the file
if($submit == "submit")
{
if($downloadtype == "movie")
{
echo "Using movie option for download!!!<p>";
header("Content-Description: File Transfer");
header("Content-disposition: attachment; filename=".basename($url));
header("Content-type: video/mpeg");
readfile($url);
?>
//debug
echo "This is done with my download php script(download.php)<br>____________________________________________<P> ";
echo 'URL: ' . $url . '<p>';
echo 'downloadtype: ' . $downloadtype . '<p>' ;
...
//this is the code to download the file
if($submit == "submit")
{
if($downloadtype == "movie")
{
echo "Using movie option for download!!!<p>";
header("Content-Description: File Transfer");
header("Content-disposition: attachment; filename=".basename($url));
header("Content-type: video/mpeg");
readfile($url);
?>
je plaatst een echo (ook al is het maar voor testen!) VOOR je het bestand pushed voor de download. Dat kan dus niet zoals ik hierboven heb uitgelegd. Daarom krijg je al die rare tekens te zien. Die rare tekens samen vormen namelijk het bestand dat je wilt downloaden.
waarom werkt het dan wel als ik curl er tussenuit laat?
Weet ik veel, ik kan niet eens ontdekken waar en hoe je die curl functie uberhaupt aanroept.
dit zou moeten werken.
het main script met de curl code stuurt de info(link en soort download) door naar deze 2 php scripts:
Script 1 genaamd downloadphp.php zou het bestand moeten downloaden(en dat doet hij dus niet)
Script 2 genaamd test.php is er om de link te testen, en laten weergeven in browser dat de linkt wel of niet werkt.
@Frank, dat werkt inderdaad, als ik dus de gegevens van het formulier direct doorstuur naar het downloadphp.php script, maar ik gebruik dus curl zoals hierboven beschreven.
Over het gebruik van curl, dat moet je inderdaad niet doen. Als het alleen lokaal is al helemaal niet, dat slaat nergens op. Al het echter om te testen is, en je dus later het curl request naar een externe locatie wilt doorsturen, dan is het ook enigszins onzin. Je kan net zo goed gewoon het request redirecten. Voor de gebruiker komt dit op hetzelfde neer (die zal een request naar jouw pagina zien, maar uiteindelijk vanaf de andere locatie downloaden. Voor jou heeft het het voordeel dat je geen bandbreedte kwijt bent. Als jij het bestand eerst via curl ophaalt en daarna voor download aanbiedt dan wordt je twee keer aangeslagen voor de bandbreedte. Eerst voor het ophalen, dan voor het downloaden, terwijl het helemaal niet nodig is.
Nu aan jou om het op te lossen....