Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne]pobieranie plików
Forum PHP.pl > Forum > Przedszkole
@rtur
Chciałbym aby po kliknięciu w link otworzyły mi się do pobrania pliki:

http://adres.pl/pobierz-rozdzial/wersja/doc -> http://adres.pl/pliki/dokument.doc
http://adres.pl/pobierz-rozdzial/wersja/audio -> http://adres.pl/pliki/plik-audio.mp3
http://adres.pl/pobierz-rozdzial/wersja/zip -> http://adres.pl/pliki/archiwum.zip

W jaki sposób mogę to zrobić? pewnie bym sobie to wyszukał w google tylko nawet nie wiem jakiej frazy użyć aby to znaleźć smile.gif
Wazniak96
  1. header("Content-type: application/octet-stream");
  2.  
  3. header("Content-Length: " . filesize('plik.doc'));
  4.  
  5. header('Content-Disposition: attachment; filename="plik.doc"');
  6.  
  7. readfile('plik.doc');
Turson
Dodatkowo htaccess żeby linki były ładne
@rtur
Dla 3 typów plików o takiej samej nazwie tylko innym rozszerzeniu tak jak niżej będzie dobrze, czy da się jeszcze prościej? linki na razie w formacie index.php?file=zip|rar|7z
  1. $getFile == $_GET['file'];
  2. if($getFile=='rar'){
  3. $attachmentFileLnk='rar';
  4. }
  5. if($getFile=='zip'){
  6. $attachmentFileLnk='zip';
  7. }
  8. if($getFile=='7z'){
  9. $attachmentFileLnk='7z';
  10. }
  11. $attachmentFile='plik.'.$attachmentFileLnk;
  12. if($getFile=='rar' || $getFile=='zip' || $getFile=='7z'){
  13. header("Content-type: application/octet-stream");
  14. header("Content-Length: " . filesize($attachmentFile));
  15. header('Content-Disposition: attachment; filename="'.$attachmentFile.'"');
  16. readfile($attachmentFile);
  17. }
com
tak wrzucić sobie w array
  1. $array = array("rar", "zip", "7z");
  2.  
  3. if (in_array($_GET['file'], $array)) {
  4.  
  5. #whatever
  6. }

wink.gif

Cytat
Kod
$getFile == $_GET['file'];
oneeyedsmiley02.png
@rtur
okej też myślałem nad arrayem, ale nie wiem tylko to:
  1. if($getFile=='rar' || $getFile=='zip' || $getFile=='7z')
czy jeszcze jakoś z wszystkimi typami
  1. if($getFile=='7z'){
  2. $attachmentFileLnk='7z';}
com
  1. $getFile == $_GET['file'];
  2. if($getFile=='rar'){
  3. $attachmentFileLnk='rar';
  4. }
  5. if($getFile=='zip'){
  6. $attachmentFileLnk='zip';
  7. }
  8. if($getFile=='7z'){
  9. $attachmentFileLnk='7z';
  10. }


to przecież nie ma sensu skoro to samo masz w $getFile, może powiedz mi co wgl zawiera $_GET['file'] questionmark.gif

co do przykładu up nie zapomnij przefiltrować $_GET['file'] , ja tylko pokazałem idee biggrin.gif
@rtur
To co pokazywałem było tylko przykładem, w $_GET['file'] i $attachmentFileLnk rzeczywiście było to samo zawsze, ale to tylko przykład, dobrze teraz wersja lekko zmodyfikowana, da radę to jeszcze uprościć, czy nie ma sensu?
  1. $array = array('notepad', 'word','excel');
  2. if($_GET['file']=='notepad'){
  3. $lnk='txt';
  4. }
  5. if($_GET['file']=='word'){
  6. $lnk='docx';
  7. }
  8. if($_GET['file']=='excel'){
  9. $lnk='xlsx';
  10. }
  11. $plik='plik.'.$lnk;
  12. if (in_array($_GET['file'], $array)) {
  13. header("Content-type: application/octet-stream");
  14. header("Content-Length: " . filesize($plik));
  15. header('Content-Disposition: attachment; filename="'.$plik.'"');
  16. readfile($plik);
Turson
Wygląda ok. Radziłbym umieścić kod w if(isset($_GET["file"]))

Cytat(com @ 29.10.2013, 23:16:47 ) *
co do przykładu up nie zapomnij przefiltrować $_GET['file']





@down
Szczerze mówiąc jak teraz patrzę to nie wiem po co tongue.gif
com
Można jeszcze tak :
  1. if(isset($_GET['file']))
  2. {
  3. $array = array('txt'=>'notepad', 'docx'=>'word','xlsx'=>'excel');
  4. $key = array_search($_GET['file'], $array);
  5. $plik='plik.'.$key;
  6. if (in_array($_GET['file'], $array)) {
  7. header("Content-type: application/octet-stream");
  8. header("Content-Length: " . filesize($plik));
  9. header('Content-Disposition: attachment; filename="'.$plik.'"');
  10. readfile($plik);
  11. }
  12. }



Turson up chociażby po to żeby w łatwy sposób operować na tej kolekcji danych, wyobraź sobie że np mamy zamiast 3 typów 20, 50, 100 odpowiedź które rozwiązanie wybierzesz chyba nasuwa się sama... poza tym w przykładzie autora wykonuje 3 warunki za każdym razem, można by oczywiście dodać else, no ale skoro w prosty sposób z 16 linii można zrobić 8, to czasem warto się zastanowić, szczególnie jak się ma trochę więcej wiedzy niż przeciętny XY wink.gif
Turson
Cytat(com @ 30.10.2013, 14:38:06 ) *
Turson up chociażby po to żeby w łatwy sposób operować na tej kolekcji danych, wyobraź sobie że np mamy zamiast 3 typów 20, 50, 100 odpowiedź które rozwiązanie wybierzesz chyba nasuwa się sama... poza tym w przykładzie autora wykonuje 3 warunki za każdym razem, można by oczywiście dodać else, no ale skoro w prosty sposób z 16 linii można zrobić 8, to czasem warto się zastanowić, szczególnie jak się ma trochę więcej wiedzy niż przeciętny XY wink.gif

Miałem na myśli to po co cytowałem Twoją wypowiedź (odniosłem się do edycji Twojego posta), a nie odnosiłem się do kodu biggrin.gif

Wszystko jasne, nie ma po co offtopować smile.gif
@rtur
Dziękuję wszystkim za pomoc działa jak chciałem smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.