Header, pobieranie plików z przekierowania

Napisałem taki skrypt, lecz zamiast pobierać mi plik ze zmianą nazwy w locie to pobiera pusty plik bez zmiany nazwy

ob_start();

$nazwa='nazwa.mp3';

$link='http://juniorcia.wrzuta.pl/aud/file/a1Osn9y2XL/eric_clapton_-_tears_in_heaven';

             $fh = fopen($nazwa, 'w'); 

             curl_setopt($ch, CURLOPT_URL, $link);

             curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

             curl_setopt($ch, CURLOPT_COOKIEJAR, dirname( __FILE__ ).'/cookie.txt');

             curl_setopt($ch, CURLOPT_COOKIEFILE, dirname( __FILE__ ).'/cookie.txt');

             curl_setopt($ch, CURLOPT_FILE, $fh);

             curl_setopt($ch, CURLOPT_HEADER, 0);

             curl_exec($ch);

             if($link)

             {

             ob_get_clean();

             header("Content-Type: application/force-download");

              header("Content-Type: application/octet-stream");

              header("Content-Type: application/download");

              header("Content-Disposition: attachment; filename=".basename($link).";");

              header("Accept-Ranges: bytes");

              header("Content-Transfer-Encoding: binary");

             readfile($nazwa);

             exit;

             }


ob_end_flush();

Czy zapisanie ściąganego pliku jest konieczne (nazwa.mp3)? Bo jeśli nie to wystarczyłoby bez zapisania przekierować na download, a tak to jest wynajdywanie koła na nowo.

Spójrz:

curl_setopt($ch, CURLOPT_URL, $link);

wszędzie w curl_setopt() masz zmienną (resource) $ch, skąd ją wziąłeś? z kosmosu? A gdzie zainicjowanie CURLa?

$ch=curl_init();

fragment kodu:

$ch=curl_init();

curl_setopt($ch, CURLOPT_URL, $link);

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_COOKIEJAR, dirname( __FILE__ ).'/cookie.txt');

curl_setopt($ch, CURLOPT_COOKIEFILE, dirname( __FILE__ ).'/cookie.txt');

curl_setopt($ch, CURLOPT_FILE, $fh);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);

A nie zmienia nazwy, bo przekazujesz do downloadu nazwę z wrzuty:

header("Content-Disposition: attachment; filename=".basename($link).";");

Poprawilem ale dalej nic z tego ;/

<?php

ob_start();

$nazwa='nazwa.mp3';

$link='http://juniorcia.wrzuta.pl/aud/file/a1Osn9y2XL/eric_clapton_-_tears_in_heaven';

             $fh = fopen(basename($link), 'w');

$ch=curl_init();

curl_setopt($ch, CURLOPT_URL, $link);

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_COOKIEJAR, dirname( __FILE__ ).'/cookie.txt');

curl_setopt($ch, CURLOPT_COOKIEFILE, dirname( __FILE__ ).'/cookie.txt');

curl_setopt($ch, CURLOPT_FILE, $fh);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);

             if($link)

             {

             ob_get_clean();

             header("Content-Type: application/force-download");

              header("Content-Type: application/octet-stream");

              header("Content-Type: application/download");

              header("Content-Disposition: attachment; filename=".basename($link).";");

              header("Accept-Ranges: bytes");

              header("Content-Transfer-Encoding: binary");

             readfile($nazwa);

             exit;

             }


ob_end_flush();

?>

problem rozwiązany, Wystarczy zrobić coś takiego:

<?php

$filename = 'http://juniorcia.wrzuta.pl/aud/file/a1Osn9y2XL/eric_clapton_-_tears_in_heaven';

header("Cache-Control: public");

header("Content-Description: File Transfer");

header('Content-disposition: attachment; filename='.'nazwa.mp3');

header("Content-Type: application/force-download");

header("Content-Type: application/octet-stream");

header("Content-Type: application/download");

header("Content-Transfer-Encoding: binary");

header('Content-Length: '. filesize($filename));

readfile($filename);

?>

Teraz mam pytanie. Czy to żre transfer z mojego hostingu??

Łoj, nie to kliknąłem, potwierdziłem bez czytania i usunąłem post zamiast edytować:/

Tak, żre transfer z Twojego hostingu, nawet podwójnie, bo najpierw pobiera plik, a później go wysyła do Ciebie.

A to co napisałem poprzednio zaraz dodam.

//EDIT:

Problemem jest nieskorzystanie ze zmiennej $nazwa do otwarcia pliku.

$nazwa='nazwa.mp3';

$link='http://juniorcia.wrzuta.pl/aud/file/a1Osn9y2XL/eric_clapton_-_tears_in_heaven';

             $fh = fopen(basename($link), 'w');

A później żądania właśnie tego pliku ze zmiennej $nazwa

readfile($nazwa);