Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] automatyczne rozpoczecie sciagania pliku
suchar
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


Witam,
mam skrypt, ktory uploaduje plik na serwer, ladnie koduje url itd itd.
Teraz, jest drugi skrypt, ktory na podstawie zapisanego w mysql kodu pokazuje plik do sciagniecia pliku.
cos w stylu domena.pl/plik.php?kod=12345
szuka w bazie pliku o id 12345

I teraz mam problem - chce aby plik.php wyswietlil kilka danych o danym pliku (ktore sa juz zapisane w bazie)
na stronie, ale jednoczesnie rozpaczal sciaganie pliku dla uzytkownika - gdy dodam w pliku
Cytat
header("Location adrespliku");

skrypt od razu zaczyna sciagac plik, zamiast rownoczesnie wyswietlac stronę.
please help;) (IMG:http://forum.php.pl/style_emoticons/default/party.gif)
Go to the top of the page
+Quote Post
-mkdes-
post
Post #2





Goście







Oto jak można wymusić pobieranie pliku.
Stwórz plik np. download.php o poniższej treści i przekaż metodą GET do niego nazwę pliku i ścieżkę.

  1. <?php
  2. $plik=$_GET['plik'];
  3. $sciezka=$_GET['sciezka'];
  4. header("Content-type: application/txt");
  5. header("Content-Disposition: attachment; filename=$plik");
  6. readfile("$sciezka$plik");
  7. ?>

Linia ustawiająca typ MIME pliku.
  1. <?php
  2. header("Content-type: application/txt");
  3. ?>


Ten post edytował mkdes 27.05.2007, 21:04:38
Go to the top of the page
+Quote Post
suchar
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


Problem w tym, ze nie wiemy jakiego typu jest to plik, jakie ma rozszerzenie, tego skrypt "dowiaduje sie" dopiero podczas wywolywania.
a readfile zczytuje plik z dysku serwera i pieknie go wywala w przegladarce (krzaczki:) )

//edit: niby dziala, ale do tego doszedlem juz wczesniej - plik jest sciagany od razu, i tylko to, bez wyswietlenia zawartoci sckryptu (ktory robi jeszzce kilka rzeczy).

Ten post edytował suchar 27.05.2007, 21:18:19
Go to the top of the page
+Quote Post
legorek
post
Post #4





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Manual: mime_content_type" title="Zobacz w manualu PHP" target="_manual

Dobrze jest też wysłać nagłówek z wielkością pliku:
  1. <?php
  2. header("Content-Length: ". filesize("jakisplik"));
  3. ?>


I najważniejsze na koniec:

ZAWSZE filtruj dane wejsciowe. Kod podany przez mkdes pozwala na sciagniecie dowolnego pliku Twojego serwisu.
Go to the top of the page
+Quote Post
suchar
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


no ok, powiedzmy ze doszedlem do tego ale nadal nie jest tak jak powinno:
Cytat

(chwilo wylaczylem force'owanie sciagania)

Przy wyslaniu prosby o plik ffcba3b5ebf3473f50b9cf4d20f26819/files24.png
(sciezka http://domena.pl/ffcba3b5ebf3473f50b9cf4d2...819/files24.png,
na dysku zapisany pod adresem /home/user/domena/ffcba3b5ebf3473f50b9cf4d20f26819/files24.png)


przegladarka zamiast sciagac plik files24.png sciaga plik o nazwie ffcba3b5ebf3473f50b9cf4d20f26819/files24.png

ktorego i tak nie mozna otworzyc w niczym.


//edit:
juz sciaga, ma poprawny rozmiar, ale przy otwieraniu (np. tego .png co podalem) ze nieznany format pliku.

moja koncowka pliku download.php:
Cytat
function mime_content_type ( $f )
{
return trim ( exec ('file -bi ' . escapeshellarg ( $f ) ) ) ;
}
$naglowek = mime_content_type($global_path);
$naglowek2 = $naglowek;
$plik = $name[0];
header("Content-Length: ". filesize($global_path));
header("Content-Disposition: attachment; filename=$plik");
header('Content-type: '.$naglowek2);
readfile($filespath . $get[0] . "/" . $plik);
ob_end_flush();


Ten post edytował suchar 27.05.2007, 22:51:33
Go to the top of the page
+Quote Post
suchar
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


OK, to jak teraz zmucis przeg;adarke aby sciagala pliki graficzne i tekstowe?

mam taka strukturę katalogow:

katalog_glowny (tu dalem .htaccess)
|
|-subfolder1/plik.png
|-subfolder2/plik.txt
|-subfolder3/jakisplik

Zawartosc pliku .htaccess:
Cytat
AddType application/octet-stream image/png
AddType application/octet-stream txt
AddType application/octet-stream image/jpg
AddType application/octet-stream image/gif
AddType application/octet-stream html
AddType application/octet-stream png
AddType application/octet-stream jpg
AddType application/octet-stream gif

Niestety, wtedy server albo wywala internal server error, lub po prostu htacces nie dziala i plik sie wyswietla zamiast sciagac.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 06:36