Słuchajcie, do zrobienia mam skrypt który pobiera mi pliki mp3 z danego URL-a. Problem jest jednak taki, że nie mogę do tego wykorzystać standardowo nagłówków + readfile, tylko muszę jeszcze wykonać zapytanie z paroma ciasteczkami. Dlatego też wykorzystałem do tego Http Request2. Wszystko działa super, jednak gdy odpalam track po pobraniu, to jego jakość jest fatalna - tak jakby gubił połowę danych.
TrackPeer.php - model, który odpowiada za inicjowanie downloadu
{ include 'HTTP/Request2.php'; include 'frontend/libs/tracks/observer.php'; $request = new HTTP_Request2($url); 'follow_redirects' => true, 'store_body' => false )); $response = $request->send(); foreach ($response->getCookies() as $arCookie) { $request->addCookie($arCookie['name'], $arCookie['value']); } $request->attach(new HttpRequestTracksObserver()); Download::getRequestHeaders($track->getTrackTitle() . '.mp3', null, 'audio/x-mp3'); $request->send(); }
Funkcja Download::getRequestHeaders():
static public function getRequestHeaders($title = '', $size = NULL, $mime = 'application/octet-stream') { if ($size) { } }
Teraz najważniejsza rzecz, czyli klasa HttpRequestTracksObserver:
<?php class HttpRequestTracksObserver implements SplObserver { public function update(SplSubject $subject) { $event = $subject->getLastEvent(); switch ($event['name']) { case 'receivedBodyPart': case 'receivedEncodedBodyPart': break; } } }
Jeżeli ktoś ma w tym doświadczenie i wie, dlaczego tak się dzieje, to bardzo proszę o pomoc.
Dzięki,
Mateusz.
=== EDIT ===
Już ogarnąłem ! Warto wykorzystać jednak readfile() + stream_context_create() !
{ include 'HTTP/Request2.php'; $url = '... mp3 path'; $request = new HTTP_Request2($url); 'follow_redirects' => true, 'store_body' => false )); $response = $request->send(); 'header' => 'Cookie: session=' . $session['value'] ) ); Download::remote($url, $track->getTrackTitle() . '.mp3', (substr($track->getTrackSize(), 0, -3) * 1024 * 1024), 'audio/x-mp3', $opts); }
{ if ($size) { } if ($opts) { }else{ } exit; }
Mam nadzieję, że komuś się przyda
