Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP] Ajax a header() w PHP - pobieranie pliku
Forum PHP.pl > Forum > Przedszkole
d.stp
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. }
Aqu
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.
d.stp
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ł?
com
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
Aqu
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()...
d.stp
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ż
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.