pobieranie pliku *.pdf a nie otwieranie w przegladarce

0

Witam.
Już jakiś czas siedzę nad pobieraniem pliku a nie go otwieraniem w przeglądarce chodzi mi o *.pdf czy *.mp3. te pliki się same otwierają w przeglądarce a ja chce by się pobierały.próbowałem funkcji:

 
$rec1['polozenie_pliku'] <- pod katalog np: pliki
$rec1['nazwa_pliku'] <- cała nawa pliku np: 4programmers.pdf
 header ( 'Content-Disposition: attachment;  filename="urzytkownicy/'.$rec1['polozenie_pliku'].'/'.$rec1['nazwa_pliku'].'"' );
0

http://www.php.net/manual/en/function.header.php#99190

I napisz sto razy na tablicy "użytkownicy" ;-)

0

chętnie napisze aby to działało

1
header('Content-Type: application/octet-stream');
0

nadal tego nie rozumiem

0

Nie umiesz dokleić jednej linijki więcej do Twojego skryptu? Wróżę Ci wielką karierę programisty ;)

0

umiem i dokleiłem ale to dało skutkiem inny niż zamierzony to ma wyglądać tak??

 
header('Content-Type: application/octet- stream');
header ( 'Content-Disposition: attachment;  filename="uzytkownicy/'.$rec1['polozenie_pliku']."/".$rec1['nazwa_pliku'].'"' );
0

Ja tam zrobiłem literówkę, po czym natychmiast (jak mi się wydawało, trochę mi się połączenie przycięło) ją poprawiłem. Spacja w octet-stream - chociaż sądzę, że i bez tego przeglądarka powinna pobrać plik, hmm.
upewnij się, że Ci nic "Content-Type" nie nadpisuje później w kodzie.

0

Wiem co jest on nie pobiera pliku tylko on tworzy nowy plik o nazwie "uzytkownik_alex_xara.pdf" a to ma być tak pobierz plik z katalogu a nie utwórz plik.

0

Dobra dałem sobie radę i może komuś się to przyda:

 
<?php
$katalog = "moja_muzyka/";
$plik = "spiew.mp3";
$lokalizacja = $katalog.$plik;
$rozmiar = filesize($lokalizacja);
//$typ =  "pdf"; <- to należy zrobić casem


//header("Content-type: application/$typ"); <- to należy odsleszować po napisaniu case
header("Accept-Ranges: bytes");
header("Content-Length: $rozmiar");
header("Content-Disposition: attachment; filename=$plik");
header("Content-Description: $plik");
readfile($lokalizacja);
?>

BARDZO WAŻNA UWAGA:
na stronie gdzie jest to umieszczone nie może być żadnego drukowania. ta strona ma być pusta

0

Nie może być żadnego drukowania :D

Twoje Accept-Ranges kłamie przeglądarki, bo wznawiania to Twój skrypt nie obsługuje. Żeby to było profesjonalne albo to usuń, albo zmień "bytes", na "none".
W tym momencie nie podajesz żadnego mime-type -- niektóre przeglądarki MOGĄ podejmować próby otworzenia tego po swojemu. Tak naprawdę NAJWAŻNIEJSZĄ linijkę pominąłeś:

<?php
header('Content-Type: application/octet-stream');
?>

Na dowód weź sobie powyższy kod i wklej w plik PHP. Nic więcej niech w nim nie będzie (ew. po zamknięciu php dopisz "dupa"). Skieruj przegladarkę na ten plik - wywoła pobieranie. Twoje linijki odpowiadają za nazwę pliku czy informowanie przeglądarki o rozmiarze, natomiast tak czy tak może Twój kod spowodować otworzenie pliku przy pomocy pluginów. Także linijkę powyżej także dopisz.

0

masz racje. i jeszcze jedną dziurę znalazłem jak plik jets typu np .apk lub ipa to jest problem bo nie daje rozszerzenia na końcu tylko jest sama nazwa

0

Hej.
Chciało by ci się jeszcze trochę mi pomóc

0

Zadaj pytanie właściwe, nie traćmy czasu..

0

Hej.
Może łapiesz troszkę jeszcze CSS.
dałem inputowi klase

 
<input type="text" class="wysz" name="wyszukiwarka">
i w css
input.wysz{
width:500px;
}

i nic.

0

Jest dobrze. Żeby stwierdzić dlaczego nie działa potrzeba więcej kodu (zapewne inna reguła nadpisuje Ci tę). Firebug/DragonFly/podobne narzędzie rozwiąże zapewne Twój problem.

I dlaczego w tym temacie?

0

właśnie oto chodzi ze Firebug nie znalazł w tym problemu, a postarałem się tak to napisać by się nie powtarzały

0

Jak nie będzie więcej kodu to ja Ci więcej nie mogę pomóc, zrób sobie pusty plik z takim inputem i takim stylem i zobaczysz, że działa. Czyli coś Ci nadpisuje ten styl. Czyli daj więcej kodu

0

miałeś racje coś popsułem ja. Dzięki:).

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