Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Pobieranie pliku problem
Forum PHP.pl > Forum > Przedszkole
bojawiem55
Witam mam problem ze skryptem który pobiera plik na komputer mianowicie sam skrypt wygląda tak

  1. <?php
  2.  
  3.  
  4. $file = 'test.rar';
  5.  
  6.  
  7. header('Content-Type: application/octet-stream');
  8.  
  9.  
  10. header('Content-Disposition: attachment; filename="'.$file.'"');
  11.  
  12.  
  13. readfile('ściezka/'.$file.'');
  14.  
  15.  
  16.  
  17.  
  18. ?>


Lecz chciałbym aby skrypt wykonał się tylko dla zalogowanych osób
Takowy skrypt posiadam
  1. <?php
  2.  
  3.  
  4.  
  5. require 'config.php';
  6. require_once 'user.class.php';
  7. ?>
  8. <font color="black">
  9.  
  10. <?php
  11. if (user::isLogged()) {
  12. // Widok dla użytkownika zalogowanego
  13.  
  14. // Pobierz dane o użytkowniku i zapisz je do zmiennej $user
  15. $user = user::getData('', '');
  16.  
  17. echo '<center>';
  18.  
  19.  
  20. ?>
  21. </center>
  22. <?php include './include/gora.php'; ?>
  23.  
  24.  
  25. <div class="container">
  26. <div class="row-fluid">
  27. <div class="page-header">
  28. <h1>Witaj <?php echo ''.$user['login'].''; ?></h1>
  29. <h4>Pobieranie pliku:</div>
  30. </h4>
  31.  
  32. // Tutaj powinien znajdować się skrypt pobierający plik lecz tutaj on nie działa :(
  33.  
  34.  
  35. </body>
  36. </html>
  37.  
  38. <?php
  39. }
  40.  
  41. else {
  42. // Widok dla użytkownika niezalogowanego
  43. echo '<p>Nie jesteś zalogowany.<br /><a href="login.php">Zaloguj</a> się lub <a href="register.php">zarejestruj</a> jeśli jeszcze nie masz konta.</p>';
  44. }
  45.  
  46.  
  47. ?>


Po wklejeniu skryptu w tej kod zamiast pobrać się plik pojawiają się takie znaczki http://screenshooter.net/100671669/gacjhww
nospor
W kodzie pobierajacym plik nie moze byc zadnego html wiec kody jak ten:
<font color="black">
masz wywalic....
ShaggyAG
  1. <?php include './include/gora.php'; ?>

a tam gdzies nie ma jakiegoś headera innego?
bojawiem55
Wywaliłem całe html i nadal to jest
Kod bez html
  1. <?php
  2.  
  3.  
  4.  
  5. require 'config.php';
  6. require_once 'user.class.php';
  7. ?>
  8.  
  9. <?php
  10. if (user::isLogged()) {
  11. // Widok dla użytkownika zalogowanego
  12.  
  13. // Pobierz dane o użytkowniku i zapisz je do zmiennej $user
  14. $user = user::getData('', '');
  15.  
  16.  
  17.  
  18. ?>
  19. <?php
  20.  
  21.  
  22. $file = 'Pliki.rar';
  23.  
  24.  
  25. header('Content-Type: application/octet-stream');
  26.  
  27.  
  28. header('Content-Disposition: attachment; filename="'.$file.'"');
  29.  
  30.  
  31. readfile('pliki/'.$file.'');
  32.  
  33.  
  34.  
  35.  
  36. ?>
  37.  
  38. <?php
  39. }
  40.  
  41. else {
  42. // Widok dla użytkownika niezalogowanego
  43. echo '';
  44. }
  45.  
  46.  
  47. ?>

Jeżeli ktoś posiada inny skrypt pobierania plików to z chęcią przyjmę
nospor
1) Wszystkie pliki mają byc zapisane w utf8 bez BOM
2) Zakladam ze ten plik jest plikiem glownym (bezposrednio wywolywanym) a nie plikiem includowanym?
3) require 'config.php';
require_once 'user.class.php';
A w tych plikach i innych includowanych w nich nie masz przypadkiem jakis kodow/tekstow, ktore idą do przeglądarki?
bojawiem55
Plik config
  1. <?php
  2. mysql_connect('hostl','baza','haslo')or die(mysql_error().'Nie mozna polaczyc sie z baza danych.');
  3. mysql_select_db('baza') or die(mysql_error().'Nie mozna wybrac bazy danych.');
  4.  
  5. $tb_name = 'licencja';
  6. ?>

Plik user class
  1. <?php
  2.  
  3.  
  4. class user {
  5.  
  6. public static $user = array();
  7.  
  8. /**
  9.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku.
  10.   * Indeksy tablicy odpowiadają nazwom pól w bazie danych (login, pass etc...)
  11.   * @param string $login
  12.   * @param string $pass
  13.   * @return array
  14.   */
  15. public function getData ($login, $pass) {
  16. if ($login == '') $login = $_SESSION['login'];
  17. if ($pass == '') $pass = $_SESSION['pass'];
  18.  
  19. self::$user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE login='$login' AND pass='$pass' LIMIT 1;"));
  20. return self::$user;
  21. }
  22.  
  23.  
  24. /**
  25.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku, tak jak powyższa metoda klasy,
  26.   * ale rozpoznaje użytkownika nie po podaniu loginu i hasła tylko po podaniu ID.
  27.   * Używana np. do wyświetlania strony profilu.
  28.   * @param int $id
  29.   * @return array
  30.   */
  31. public function getDataById ($id) {
  32. $user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id='$id' LIMIT 1;"));
  33. return $user;
  34. }
  35.  
  36. /**
  37.   * Jeśli użytkownik jest zalogowany - zwraca true, w przeciwnym wypadku - false
  38.   * @return bool
  39.   */
  40. public function isLogged () {
  41. if (empty($_SESSION['login']) || empty($_SESSION['pass'])) {
  42. return false;
  43. }
  44.  
  45. else {
  46. return true;
  47. }
  48. }
  49.  
  50. /**
  51.   * "Soli" hasło przed jego zahashowaniem funkcją md5()
  52.   * @param string $pass
  53.   * @return string
  54.   */
  55. public function passSalter ($pass) {
  56. $pass = '$@@#$#@$'.$pass.'q2#$3$%##@';
  57. return md5($pass);
  58. }
  59.  
  60. }

Wszystkie są w kodowaniu utf8 bez BOM
b4rt3kk
Dodaj sobie na samym początku pliku (jeszcze przed session_start):

  1. ini_set('display_errors', 1);


Bo najbardziej prawdopodobne jest, że przed wysłaniem nagłówków masz jakiś biały znak, co zaowocuje komunikatem: Cannot send headers. Headers already sent.

Widzę Twój błąd:

  1. <?php
  2.  
  3.  
  4.  
  5. require 'config.php';
  6. require_once 'user.class.php';
  7. ?>
  8. <-- BIAŁY ZNAK PRZED WYSŁANIEM NAGŁÓWKÓW
  9. <?php
  10. if (user::isLogged()) {
  11. // Widok dla użytkownika zalogowanego
  12.  
  13. // Pobierz dane o użytkowniku i zapisz je do zmiennej $user
  14. $user = user::getData('', '');
  15.  
  16.  
  17.  
  18. ?>
  19. <?php
  20.  
  21.  
  22. $file = 'Pliki.rar';
  23.  
  24.  
  25. header('Content-Type: application/octet-stream');
  26.  
  27.  
  28. header('Content-Disposition: attachment; filename="'.$file.'"');
  29.  
  30.  
  31. readfile('pliki/'.$file.'');
  32.  
  33.  
  34.  
  35.  
  36. ?>
  37.  
  38. <?php
  39. }
  40.  
  41. else {
  42. // Widok dla użytkownika niezalogowanego
  43. echo '';
  44. }
  45.  
  46.  
  47. ?>


Pozbądź się wszystkich otwarć i zamknięć bloków PHP, poza jednym otwierającym (pierwszym na samej górze).
bojawiem55
Dzięki usunąłem nie potrzebne znaczniki ?php i dodałem to co mi dałeś to skrypt zaczął działać
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.