Wymuszenie własnej nazwy dla pobieranego pliku z zewnętrznego adresu.

0

Cześć.

Kolejna moja zagwostka w PHP. Taki skrypt jak poniżej działa:

<?php
$file = $_GET['file'];  
header('Content-type: video/mp4');
header('Content-Disposition: attachment; filename="'.$file.'"');
readfile('http://noc.gts.pl/50mb.gts');
?>

Jednak ma on tę wadę. Docelowo readfile miałby pobierać plik z Ipli, a jak tak próbuję podając pełen adres, Opera nie pobiera pliku (ma on zero bajtów), a w error logu widzę informację, że funkcja readfile się nie powiodła. Strona zwróciła kod błędu 400 czyli bad request. Na próbe dla tego pliku z gts działa ok, dla pobierania na przykład strony głownej wp.pl też. Ale akurat tutaj jest bad request. A docelowo będzie właśnie pobierany plik typu mp4.

Poza tym readfile niestety powoduje, że docelowy plik jeżeli już sie to udaje, jest ściągany bez widoczności jego całkowitego rozmiaru. Czy jest zatem jakiś sposób aby móc wstawić najlepiej zachowanie jak po header i Location. Ale tak aby wymusić by przeglądarka www, chciała zapisać plik - pokazując pełen jego rozmiar, z żądaną przez nas nazwą pliku. Dlatego, że to co sugeruje na przykład IPLA to, jak wiadomo - długi ciąg znaków cyft od 0 do 9 i liter od ado z.

Z góry dziekuję za wszelkie przykłady. Ponieważ googlowałem, ale bez znaleziania dobrego sposobu, ktory by działal jak chcę na docelowym linku.

1

readfile + zewnętrzny link = zabijesz serwer ;]

fopen fread porcjami, echo

Pokazuje Ci bad request, bo żeby pobrać ten plik z ipli potrzebujesz ciasteczek i/lub innych mechanizmów. cURL będzie złym pomysłem (ale ma wbudowany mechanizm do przekierowań), bo on też będzie chciał cały plik wczytać do pamięci przed podaniem go dalej = wciąż zabija serwer użyciem pamięci.

zapoznaj się dokładnie z protokołem HTTP (tam będzie coś o rozmiarze pliku), z narzędziami typu firebug, i powtarzaj w swoim skrypcie te same kroki, które wykonuje normalna przeglądarka, by pobrać plik. nie zapomnij uwzględnić wszelkich zmiennych (wybadaj ich pochodzenie).

podsumowując: sporo roboty Cię czeka

0

Ok, dzięki za odpowiedź. Jak już kiedyś wspominałem na jednym serwerze curl_exec jest zablokowane ze względów bezpieczensta. To pewnie i na innym również będzie. Bo działy się takie cyrki, że na koncie hostowanym na Gatorze, serwer IPLI nie pokazywał w zwróconym XML'u danych potrzebnej pozycji - normalnie pierwszej. Pokazywał poza tym mnóstwo zbędnych mi danych o innych pozycjach vod, ale nie o tej, którą powinien. Pod Windowsem wszystko jest ok. Okazało się, że po przeniesieniu skryptu na konto w mydevil jest ok. Pewnie ustawienia PHP mają na to jakiś wpływ.

Natomiast nie wiem dlaczego jest bad request, pod Windowsem piszać w Delphi i Synapse pomagało na takie coś po prostu na ogoł czyszczenie nagłówków. Na pewno nie potrzeba żadnych ciasteczek czy egzotycznych wpisów do nagłowka. Dane XML z bezpośrednimi linkami do pozycji vod - owszem, muszą być pobrane ze specyficznego user-agenta mipla/23. Jednak sam bezpośredni plik pobieże nawet "goły" wget pod Windows. Wersja mojego dowloadera do IPLI pod Windows, jedyne co ma w naglówku niestandardowego to ten specyficzny user-agent i tyle. Anyway, skoro to tyle rzeźbienia, to jakoś przeboleje obecny stan. Mogę pobrać pozycję po egzotycznej nazwie. I tak pobieram głownie korzystając z mojego skryptu PHP pod Androidem i tylko jeden konkretny serial, który po obejrzeniu - usuwam z karty SD Tabletu. A kombinując sam pewnie bym tylko zmarnował czas, a i tak nie ogarnął tematu.

0

A jaki konkretnie kod zastosować? Prosił bym o przykład. Bo Content-Disposition jak pisałem się nie sprawdziło.

0

W sumie powiem to jako ciekawostkę. Gdy nadejdzie era, gdy IE umrze, można będzie stosować:

<a href="http://noc.gts.pl/50mb.gts" download="nazwa.pdf">Download</a> 

Ten nowy atrybut "download" zmienia nazwę pliku i wymusza ściąganie pliku.

0

Z IE praktycznie nie korzystam, ale zobacze być może Opera dla Windows i mobilna, to jakoś obsłużą. Sprawdze, dziękuję.

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