Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP] Ajax a header() w PHP - pobieranie pliku
d.stp
post 11.02.2015, 21:26:10
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


Mam przycisk który po kliknięciu otwiera okienko. Tam jest formularz w którym użytkownik może wpisać kod. Jeżeli kod jest poprawny, powinno się włączyć pobieranie pliku. Całość mam oparte na php + ajax.

Wiem jak zrobić pobieranie pliku przez header() w php, ale nie wiem jak zwrócić to do JS.

Skrypt PHP wygląda tak:

  1. <?php
  2.  
  3.  
  4. $file = 'plik.rar';
  5. header('Content-Description: File Transfer');
  6. header('Content-Type: application/octet-stream');
  7. header('Content-Disposition: attachment; filename='.basename($file));
  8. header('Content-Transfer-Encoding: binary');
  9. header('Expires: 0');
  10. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  11. header('Pragma: public');
  12. header('Content-Length: ' . filesize($file));
  13. flush();
  14. readfile($file);
  15.  
  16. ?>


JS:

  1. $.ajax({
  2. type: "POST",
  3. url: "check.php",
  4. data: "name="+name+"&pwd="+pwd,
  5. success: function(html){
  6. if (html=='true') {
  7. window.location=html;
  8. }
Go to the top of the page
+Quote Post
Aqu
post 11.02.2015, 21:35:05
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

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


Wydaje mi się, że nie da się tego zrobić przez AJAX. Ale jeżeli przekierujesz użytkoniwka przez window.location = 'download.php', to przeglądarka nie powinna się odświeżyć, przynajmniej Firefox tak się zachowuje.
Go to the top of the page
+Quote Post
d.stp
post 11.02.2015, 21:37:42
Post #3





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


No ok, właśnie miałem tak zamiar robić. Mogę zrobić przekierowanie nawet z przeładowaniem strony, ale chodzi o to że ten plik nie jest dostępny dla każdego użytkownika i ma się pobierać tylko i wyłącznie po wpisaniu prawidłowego kodu sad.gif jakiś pomysł?
Go to the top of the page
+Quote Post
com
post 11.02.2015, 21:44:33
Post #4





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


skąd wy bierzecie te kody, tu masz przykłady jak to powinno być poprawnie zdefiniowane w tym ajax http://api.jquery.com/jquery.ajax/


if (html=='true') to tak nie zadziała
Go to the top of the page
+Quote Post
Aqu
post 11.02.2015, 21:45:30
Post #5





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

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


Ale AJAX nie jest żadnym zabezpieczeniem, przecież każdy może otworzyć konsolę przeglądarki i sprawdzić skąd pobierane są dane. Najprościej będzie skorzystać z sesji. Po sprawdzeniu kodu ustawiasz $_SESSION['download'] na true, i sprawdzasz to na początku tego pliku z header()...
Go to the top of the page
+Quote Post
d.stp
post 11.02.2015, 21:52:15
Post #6





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


A jakby skrypt php generował odpowiedni link i go wypluwał? hmm wtedy zrobiłbym np. pobierz.php?idpliku=1&token=xxx ale to jakiś token czy coś też by musiał się generować sad.gif może w tym skrypcie PHP co sprawdza kod z formularza wrzucić w sesje jakiś hash i w pobierz.php sprawdzać czy hash == hash z sesji?

z poziomu przeglądarki taki link nie będzie widoczny przecież
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: 6.05.2025 - 05:28