[PHP]Pobieranie pliku + header + youtube

0

Witam, staram sie pobrac plik z youtube, splodzilem cos takiego :

header('Accept-Ranges: bytes', true);
header('Cache-control: private', true);
header('Pragma: private', true);
header('Content-type: video/flv', true);
header('Content-Length: '.$size, true);
header('Content-Disposition: inline; filename="'.$title.'.flv"', true);
@readfile($location);
 

przy czym $size - rozmiar pliku, pobierany z nagłówków
$location - bezpośredni adres do pliku .flv

Kod ten działa na Operze i FF 3. Natomiast w Chrome i IE7 skrypt ściąga pliki 0kb.

Stąd moje pytanie - co robie źle ? o_O

próbowałem modyfikować kod na np.

header("Cache-Control: private,max-age=3600");
header("Content-Description: File Transfer");

header("Content-Type: video/flv");
header('Content-Disposition: attachment; filename="'.$title.'.flv"',true);

header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header('Content-Length: '. $size);
@readfile($location);

jednak to też nic nie daje, nadal działa tylko w Operze i FF, a IE7 / chrom zasysają pliki 0kb

Skrypty testuję na localhost, jednak po wrzuceniu na serwer nadal to samo - pliki 0kb w ie7/chrome :/

0

Zarzuć zmienne jakie podstawiasz pod header.

0

Poprzednio wstawiałem pod location wstawiałem :
http://www.youtube.com/get_video?fs=1&fexp=903900%2C20291&fmt_map=34%2F0%2F9%2F0%2F115%2C5%2F0%2F7%2F0%2F0&video_id=9JG6sue8ZxU&l=204&sk=Z-DV2ZucN5XnP24gqGT6yyDREJTsTXtwC&is_doubleclick_tracked=1&vq=None&t=vjVQa1PpcFPjVrs7c6KEBxQTytYEMQDShz8tZsmr-d0%3D&hl=pl&plid=AARppgLvBQEY_xcO&keywords=%25C5%259Amieszne%252Cwypadki&cr=PL&title=Ĺmieszne wypadki i scenki

teraz wstawiam bezpośredni adres do pliku
http://v17.lscache7.googlevideo.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag&itag=5&ip=89.228.206.31&signature=134ADF5B3B93FA8F88A816AF581F12178C734041.87FDDC3AC634796E0CD26358D752622859229772&sver=3&expire=1242083242&key=yt1&ipbits=0&id=f491bab2e7bc6715

$size - pobieram same nagłówki z powyższego adresu, preg_match -> dostaję rozmiar pliku

obydwa adresy uzyskuję poprzez kombinację z cURL -> to samo można uzyskąć korzystając ze sniffera.
Adresy są poprawne, problem jest w tym, że kod nie działa w IE7/Chrome :/ Przypuszczam, że to coś z nagłówkami, i rożną ich interpretacją przez przeglądarki.

0

pomoze ktos ? :>

0

Hmm... Spróbuj zrobić czyste readfile() bez headerów i sprawdź czy output jest identyczny we wszystkich przeglądarkach.

0

czy co mam dokładnie zrobić ? bo gdy daje readfile(adres) bez header'ów to w każdej przeglądarce plik jest ładowany jako tekst.

// kupilem skrypt na allegro do pobierania plikow z youtube za 1zl =] Nie wiem jakim cudem, ale w demo ktore udostepnia sprzedajacy, wszystko działa poprawnie. Wrzucam skrypt na localhost i qpa, znowu w IE7/chrome pobiera pliki 0kb. Na shared'a nie wrzuce bo nie mam dostepu do allow_url_fopen (skrypt korzysta z file_get_contents i get_meta_tags), ale po zesnifowaniu wszystko w w/w skrypcie jak moim kodzie jest takie samo :/

Tak wiec o co chodzi :/ Przeciez chce tylko skorzystac z cURL zamiast file_get_contents i innych tego typu ;/

Nawet kod prawie identyczny :/

				header('Accept-Ranges: bytes', true);
				header('Cache-control: private', true);
				header('Pragma: private', true);
				header('Content-type: video/flv', true);
				header('Content-Length: '.$head['Content-Length'], true);
				header('Content-Disposition: inline; filename="'.$url[0].'.flv"', true);
				@readfile($url[1]);
0
//Wyłączamy kompresję otputu, inaczej nagłówki Content-Disposition są ignorowane przez IE
if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');

//header("Cache-Control: private, max-age=3600");
//header("Content-Description: File Transfer"); #Eetam

header("Content-Type: video/flv");
header('Content-Disposition: attachment; filename="'.$title.'.flv"',true);

//header("Content-Type: application/force-download"); #Się zdecyduj
//header("Content-Type: application/octet-stream");
//header("Content-Transfer-Encoding: binary");
header('Content-Length: '. $size);
@readfile($location);

Spróbuj teraz. Spróbuj stopniowo komentować nagłówki i pójdzie.

0

Dzięki wielkie za pomoc. Poprawiłem troszeczkę adres do pliku, tzn. należało usunąć końcówkę z tytyułem. Dałem twoje nagłówki i ruszyło na IE, nie mniej jednak nadal nie chce działać na Chrome - jakoś przeżyję, choć nie ukrywam, że strasznie mnie to męczy :/

// cholera.... teraz po wrzuceniu na serwer w FF ma problemy ;/ yh...

0

Dobra, ubłagałem admina, żeby włączyć mi allow_url_open i wszystko działa. Dla potomków wrzucam kod.

 public function downloadYT($link)
 {
 preg_match('/v=(.*)/',$link,$kod);
 if(strpos($kod[1],"&") !== false)
 { $id = substr($kod[1],0,strpos($kod[1],"&"));
 }  else { $id = $kod[1];}
 
  $link = "http://www.youtube.com/watch?v=".$id;
  
  $html = file_get_contents($link);
  
preg_match('/<title>(.*)</',$html,$kod);
$title = $kod[1];
$title = substr($title,10,strlen($title));
 
preg_match("/var fullscreenUrl = '(.*?)';/is", $html, $kod);
$link=str_replace('/','',$kod[1]);
$link=str_replace("watch_fullscreen?",'',$link);
$link = preg_replace('/&title(.*)/', '', $link);  
$link = "http://www.youtube.com/get_video?".$link;

$head = get_headers($link);
 $location = $head[10];
 $location = substr($location,10,strlen($location));
 $size = $head[17];
 $size = substr($size,16,strlen($size));


if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');

header("Content-Type: video/flv");
header('Content-Disposition: attachment; filename="'.$title.'.flv"',true);
header('Content-Length: '. $size);
readfile($location);
  
 }
0

To nie miałeś allow_url_fopen i testowałeś ten skrypt? -_- To było do przewidzenia że nie zadziała.

0
mr.hex napisał(a)

Na shared'a nie wrzuce bo nie mam dostepu do allow_url_fopen (skrypt korzysta z file_get_contents i get_meta_tags)

Pisałem przecież, że nie miałem. Nie mniej jednak skrypt na operze / FF działał sprawnie, wszystko co było potrzebne (nagłówki, kod strony) pobierałem przez cURL. Nie chciało działać tylko(aż) na IE / Chrome.

0

Dopiero teraz skumałem. Wystarczyło wtedy skasować Content-Length skoro zawsze wynosił zero i by poszło.

0

Nawet nie sprawdze czy masz racje, bo ostro bym się zdenerwował, po tym jak musiałem stękać u admina o włączenie allow_url_open.... tak więc podziękuję za wcześniejszą pomoc, a ostatnią informację, wybacz, ale pominę :]

0

Witam

mam podobny problem, sciaga mi pliki 0 dlugosci, tyle ze chodzi o zwykle pliki pdf i doc, dostepne w tym samym katalogu co skrypt. Wrzucilem na serwer OVH i to samo co na localhost, nie dziala w operze, ff nie wspominajac o ie (blad 500)...otwiera okno pyta czy i gdzie zapisac i co najwyzej pojawia sie pusty (ff) albo w ogóle nic (operze).

kod skryptu:

<?php $filesize = filesize( 'manual.doc' ); header("Content-type: application/msword"); header("Content-Length: $filesize"); header("Content-Disposition: attachment; filename=manual.doc"); exit(); ?>

Pozdrawiam

0

A gdzie jest przesyłana treść pliku? Wysłasz tylko nagłowki i spodziewasz się pobranego pliku?

0

juz tego samego dnia, sam do tego doszedlem..ale dzieki za pomoc:)

ps moze masz jakies doswiadczenie w wykorzystywaniu biblioteki ming?

1 użytkowników online, w tym zalogowanych: 0, gości: 1