Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]prosty problem z downloadem
-Gość_Piotr-
post 2.05.2006, 12:24:07
Post #1





Goście







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ź
Go to the top of the page
+Quote Post
Kuziu
post 2.05.2006, 13:07:03
Post #2





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


  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ś

Ten post edytował Kuziu 2.05.2006, 13:08:34


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
-Gość_Piotr-
post 7.05.2006, 01:01:30
Post #3





Goście







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. ?>
Go to the top of the page
+Quote Post
Kuziu
post 7.05.2006, 01:26:40
Post #4





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


Nie idzie = questionmark.gif

Błąd wywala czy co sie dzieje ? Jak mam Ci pomóc jak nie napisałeś co jest nie tak.


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
-Guest-
post 7.05.2006, 10:17:51
Post #5





Goście







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
Go to the top of the page
+Quote Post
kwiateusz
post 7.05.2006, 10:52:18
Post #6


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




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 ...
Go to the top of the page
+Quote Post
-Guest-
post 7.05.2006, 11:27:49
Post #7





Goście







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
Go to the top of the page
+Quote Post
Kuziu
post 7.05.2006, 12:45:46
Post #8





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


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


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
-Guest-
post 7.05.2006, 13:00:10
Post #9





Goście







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. ?>
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 12.07.2025 - 19:39