oski225
(Oski225)
24 Sierpień 2010 19:03
#1
Witam,
mam skrypt, który ma za zadanie pobierać plik:
header('Content-Disposition: ' .
'attachment; filename="' . $fname . '"');
header('Accept-Ranges: bytes');
header('Content-Type: application/x-unknown');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . $c_length);
Problem występuje z nazwą ściąganego pliku. Jak zmienna $fname wygląda tak:
$fname = 'plik.rar'
przeglądarka dostaje taką nazwę pliku, i wszystko jest ok. Jednakże jak mam np. link:
http://www.serwer.pl/download/pliki/filefile.rar
i próbuję dodać do zmiennej $fname nazwę:
$file = 'http://www.serwer.pl/download/pliki/filefile.rar';
$fname = basename($file);
przeglądarka pobiera plik o nazwie ‘pobierz.php’(nazwa skryptu). Jeśli wywołam polecenie:
echo $fname;
to w przeglądarce prawidłowo wyświetla się nazwa ‘filefile.rar’.
Dodatkowo skrypt na niektórych serwerach działa, a na niektórych nie.
Czy możliwe jest, że funkcja basename zwraca string(z niektórych serwerów) o niewłaściwym kodowaniu, które nie jest przyjmowane przez php?
O co może chodzić?
Proszę o pomoc i pozdrawiam.
api
(Sitemaster)
24 Sierpień 2010 19:23
#2
Wrzuć cały skrypt a nie tylko jego fragment.
etam
(etam)
24 Sierpień 2010 19:35
#3
Ale co chcesz osiągnąć z tym linkiem? Skrypt, który podałeś wysyła plik z serwera do przeglądarki, ale o co chodzi z tym linkiem? Chcesz wysłać plik, który jest na innym serwerze? To tak nie działa.
oski225
(Oski225)
24 Sierpień 2010 21:03
#4
Ahh, zapomniałem właściwie o najważniejszym.
Po przekazaniu nagłówków do przeglądarki wywołuję metodę:
$pobrano = readfile($file);
zaczynającą pobierać plik przez przeglądarkę. Czyli skrypt wygląda mniej więcej tak:
$file = 'http://www.serwer.pl/download/pliki/filefile.rar';
$fname = basename($file);
$c_length = PobierzWielkoscPliku($file);
header('Content-Disposition: ' .
'attachment; filename="' . $fname . '"');
header('Accept-Ranges: bytes');
header('Content-Type: application/x-unknown');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . $c_length);
$pobrano = readfile($file);
api
(Sitemaster)
24 Sierpień 2010 21:54
#5
oski225
(Oski225)
24 Sierpień 2010 22:20
#6
Sam plik pobiera się prawidłowo, chodzi mi tylko i wyłącznie o nazwę pliku, którą odczytuje(a właściwie to nie odczytuje) przeglądarka.
_alex
([alex])
24 Sierpień 2010 22:35
#7
Czy chodzi ci o rozpoznanie ścieżki do pliku?
i z napisu:
'http://www.serwer.pl/download/pliki/filefile.rar’
chcesz otrzymać:
‘/dane_www/dane_serwera/download/pliki/filefile.rar’
?
api
(Sitemaster)
24 Sierpień 2010 22:44
#8
Cóż, podany przykład działa u mnie bez zarzutu - pobiera z nazwą filefile.rar
Wszak jednego headera bym ciut poprawił na:
header('Content-Disposition: attachment; filename="'.$fname.'"');
Zgaduję jednak, że problem występuje dla innego adresu - więc może go podasz zamiast tego przykładowego, bo zapewne w tymże adresie tkwi przyczyna błędu.
oski225
(Oski225)
25 Sierpień 2010 01:08
#9
Udało mi się rozwiązać problem.
Okazało się, że link posiada białe znaki na końcu, przez co nie występował mój błąd.
Wystarczyło użyć funkcji trim() i wszystko działa jak powinno.
Dziękuje za pomoc i pozdrawiam.