Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]prosty problem z downloadem
Forum PHP.pl > Forum > Przedszkole
Gość_Piotr
A więc mam taki button:
Kod
<INPUT TYPE='button' VALUE='pobierz' onClick=" parent.location.href='http://jakis_tam_adres/~konto/download/plik.txt' ">


jak wymusić na przeglądarce by zaczeła sciągać ten plik a nie otwierała go w przeglądarce ? I jeszce takie pytanie... Jak ze względów bezpieczeństwa najlepiej jest zaplanować moduł sciągania questionmark.gif Z tego co czytałęm to jak sie ma dostęp do mysql to robi się linki postaci ./download.php?id=0 gdzie w bazie kolejnym numerkom przypisuje się kolejne pliki. Czy jest jakaś inna koncepcje ? Z góry dzięki za odpowiedź
Kuziu
  1. <?php
  2. $file = $_GET['file'];
  3. header("Content-Type: application/force-download"); 
  4. header("Content-Type: application/octet-stream"); 
  5. header("Content-Type: application/download"); 
  6. header("Content-Disposition: attachment; filename=".basename($file).";"); 
  7. header("Accept-Ranges: bytes"); 
  8. header("Content-Transfer-Encoding: binary"); 
  9. header("Content-Length: ".filesize($file)); 
  10. readfile($file); 
  11. exit(); 
  12. ?>


Oczywiście dla bezpieczeństwa lepiej sprawdzić jaki kto chce plik pobrać. Żeby zaraz nie bylo że ktoś Ci ściągnie plik config.php czy coś
Gość_Piotr
nie czaje za bardzo o co chodzi smile.gif Jak powinien być przekazany ten argument $_GET['file'] zeby to podziałało questionmark.gifsmile.gif Bo jak robię tak to jakoś nie idzie:

  1. //plik download.html
  2. <?php
  3. if ($handle = opendir("./download/")) {
  4. while (false !== ($file = readdir($handle))) { 
  5. if ($file != "." && $file != "..") { 
  6. echo "<td align='left'>";
  7. echo "<font color='red'>$file</font> </td>";
  8. echo "<td><INPUT TYPE='button' VALUE='pobierz' onClick=\" parent.location.href='http://adres_serwera/konto/download.php?file=$file'\">"; 
  9. $k++;
  10. echo "</td>";
  11. echo "</tr><tr>";
  12. }
  13.  
  14. }
  15. closedir($handle); 
  16. }
  17. ?>
  18.  
  19.  
  20. //-------------------------------------------------------
  21. //plik download.php
  22. <?php
  23. $file=$_GET['file'];
  24. header("Content-Type: application/force-download"); 
  25. header("Content-Type: application/octet-stream"); 
  26. header("Content-Type: application/download"); 
  27. header("Content-Disposition: attachment; filename=".basename($file).";"); 
  28. header("Accept-Ranges: bytes"); 
  29. header("Content-Transfer-Encoding: binary"); 
  30. header("Content-Length: ".filesize($file)); 
  31. readfile($file); 
  32. exit(); 
  33. ?>
Kuziu
Nie idzie = questionmark.gif

Błąd wywala czy co sie dzieje ? Jak mam Ci pomóc jak nie napisałeś co jest nie tak.
Guest
no więc jak tak mam zapisane download.html i download.php to nawet otwiera się okno ściągania ładnie ale już pierwsze zaniepokojenie budzi fakt, że nie rozróżnia typu ściąganych plików (przy mp3 powiedzmy nie ma ikonki mp3 jak również jak bierzesz zapisz to nie dodaje uatomatycznie rozszerzenia mp3) ale to w sumie jeszce nic. Sciągnołem sobie jeden plik(który wcześniej zamiast ściągać otwierał się w przeglądarce) LOSOWANIE.BAS. Jest to makro Excela. No i plik się sciąga ale jak go otwieram to nie ma w nim treści makra tylko

Kod
<br />
<b>Warning</b>:  filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for Losowanie.bas in <b>/home/scrooge/public_html/download.php</b> on line <b>9</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/scrooge/public_html/download.php:9) in <b>/home/scrooge/public_html/download.php</b> on line <b>9</b><br />
<br />
<b>Warning</b>:  readfile(Losowanie.bas) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: No such file or directory in <b>/home/scrooge/public_html/download.php</b> on line <b>10</b><br />


Widzę coś mój ukochany komunikat, że nagłówek już wysłano i już mnie nosi tongue.gif Nie wiem gdzie on w download.php doszukał się wysłania czegokolwiek do przeglądarki :/ A i tak na całej stronie mam ustawiony ob_start i ob_flush (wiem, że to nie profesjonalne podejście ale uczę się php od tygodnia;) ) No więc co trzeba zrobić, żeby to wkońcu zaczeło się sćiągać questionmark.gif
kwiateusz
co do header to mzoe zainteresuj sie ob_start(); i ob_end_flush();

jak podajesz filename=".basename($file).";" to plik ktory chesz sciaganc lezy obok download.php ? bo jak patrze to jest przekaywana sama anzwa lpiku bez kataogu w ktorym lezy ... i wg. ostatniego komunikatu to wlasnie tego pliu brakuje ...
Guest
próbowałem i próbowałem smile.gif I nie wiem teraz jak wrzucić katalog w którym jest plik. Ja próbowałem tak:

  1. <?php
  2. $file=$_GET['file'];
  3. $url="./download/" ;
  4. header("Content-Type: application/force-download"); 
  5. header("Content-Type: application/octet-stream"); 
  6. header("Content-Type: application/download"); 
  7. header("Content-Disposition: attachment; filename="$url . basename($file).";"); 
  8. header("Accept-Ranges: bytes"); 
  9. header("Content-Transfer-Encoding: binary"); 
  10. header("Content-Length: ".filesize($file)); 
  11. readfile($file); 
  12. exit(); 
  13. ?>

ale wyskakuje:
Kod
Parse error: parse error, unexpected T_VARIABLE in /home/scrooge/public_html/download.php on line 7
Kuziu
może prze $url też daj kropke ?

Parse error to zazwyczaj albo KROPKA albo ŚREDNIK albo NAWIAS takie coś powinieneś już sam sprawdzić dodatkowo masz podane w której linii
Guest
Dobra.... już się wycwaniłem i wrzuciłem ten plik do katalogu w którym są pliki do sciągniecia i działa smile.gif

A teraz zostając jeszce w "klmiatach" plików mam kolejny problem tym razem z uploadem dość specyficzny smile.gif Mianowicie wgrałem sobie z dysku na konto poprzez formularz plik. Plik nawet się wgrał więc wszystko cacy. Ale jak chciałem go skasować bo wgrywałem tylko na próbę to patrzę PERMISSION DENIED. Mówię spoko zaraz się zmieni prawa. Zmieniam prawa na 0700 a tu PERMISSION DENIED tongue.gif Patrzę na ownera i jest nim niejaki pan "www-data" tongue.gif No i teraz pojawia się pytanie! Jak zrobić bym Ownerem uploadowanych plików był ja (na stronie tylko ja jako admin po zalogowaniu mam dostęp do funkcji uploadu)

Kody formularza i php są u mnie następujące:

  1. //upload_form.html
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  3.  
  4.      <title>Wysyłanie plików na serwer ze strony WWW</title>
  5. </head>
  6.  
  7.  
  8. <form action="upload.php" method="post" enctype="multipart/form-data">
  9. <input type="hidden" name="MAX_FILE_SIZE" value="5200">
  10. <input type="file" name="userfile"><br>
  11. Gdzie chcesz wgrać dany plik:<br>
  12. <input type="radio" name="folder" value="download"> Download <br>
  13. <input type="radio" name="folder" value="download_2"> Download2<br>
  14. <input type="radio" name="folder" value="download_3"> Download3<br>
  15. <input type="submit" value="Wyślij plik">
  16.  
  17.  
  18. </body>
  19. </html>


  1. <?php
  2. //upload.php
  3. $folder=$_POST['folder'];
  4. $sciezka="./$folder/";
  5. if (is_uploaded_file($_FILES['userfile']['tmp_name'])) 
  6. { 
  7. echo "File ". $_FILES['userfile']['name'] ." upload prawidłowy.<br>\n"; 
  8.  
  9. $strUploadDir = $sciezka . $_FILES['userfile']['name'];
  10.  if( move_uploaded_file( $_FILES['userfile']['tmp_name'], $strUploadDir ) )
  11.  {
  12.  echo 'Plik został pomyślnie uploadowany! <br>';
  13.  }
  14.  else
  15.  {
  16.  echo 'Upload pliku nie powiódł się!';
  17.  }
  18.  
  19.  
  20. } 
  21. else 
  22. {
  23.  echo "Możliwy atak przez uploadowanie pliku: "; 
  24.  echo "Plik '". $_FILES['userfile']['tmp_name'] . "'."; 
  25. } 
  26.  
  27. ?>
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.