Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][header] problem z downloadem pliku
Forum PHP.pl > Forum > Przedszkole
emp
zgrywam sobie plik z mysqla na dysk oto kawalek kodu... calym nie bede czestowal bo nie ma sensu

  1. <?php
  2.  
  3. $id_dokumentu = $_GET[ 'id_dokumentu' ] ;
  4. $plik = self::podaj_dokument_dla_id( $id_dokumentu ) ;
  5.  
  6. $plik_nazwa = stripslashes( $plik[ 'plik_nazwa' ] ) ;
  7. $plik_typ = stripslashes( $plik[ 'plik_typ' ] ) ;
  8. $plik_do_zgrania = ltrim( $plik[ 'plik' ] ) ;
  9.  
  10. header("Content-type: $plik_typ" );
  11. header('Content-Disposition: attachment; filename="'.$plik_nazwa.'"');
  12. echo $plik_do_zgrania ;
  13.  
  14. ?>


problem tkwi w tym ze plik mi zgrywa na dysk tylko posiada on dwie dodatkowe puste linie na poczatku co powoduje ze jest uznawany za uszkodzony.. wystarczy je usunac recznie w edytorze tekstu i juz jest git... nie wiem skad one sie biora ( pisze tu o plikach nie tekstowych )

jak usune header to samo echo pokazuje mi ze nie ma takowych 2 pustych lini przed plikiem

what the fuck blink.gif

// EDIT znalazlem juz odpowiedz a jest nia.... nie moze byc zadnych pustych lini przed znacznikiem <?php jesli w kodzie php wysylamy headera.. oczywiste lecz trudno domyslec sie o co chodzi kiedy mamy mase plikow w tym wiele inkludowanych ( tzn za pierwszym razem trudno sie domyslec bo ja to juz bede pamietal )
Plikownik
może zamiast ltrim(); użyj trim(); ?
emp
ehhhhh no comment blink.gif
probowalem alez owszem.. ale sek w tym ze jak dam echo to jest poprawnie... nie wyzuca tych dwoch pustych linijek na poczatku pliku tylko jak zapisze do pliku nie wiem czy nie mam jakiegos bledu gdzies w header-rze nie wiem

kwestionujesz poprawnosc dzialania ltrim a trim ma dzialac dobrze winksmiley.jpg one wszystkie dzialaja dobrze

pozdro

// EDIT: zrobilem ze mi dziala poprawnie
// skryp ktory wgrywa wybrany plik do bazy
  1. <?php
  2.  
  3. // if dodaj
  4. if( @$_GET[ 'rozkaz' ] == 'dodaj' )
  5. {
  6. $baza_danych= new mysqli( 'localhost' , 'root', 'helspawn', 'pliki' ) ;
  7. if ( mysqli_connect_errno() ) echo ( 'nie moge ustanowic polaczenia z baza danych !<br>'.mysqli_error() ) ; 
  8.  
  9. // zgrywam na serwer plik do katalogu tymczasowgo
  10. $plik_nazwa = addslashes( $_FILES[ 'plik' ][ 'name' ] ) ;
  11. $plik_typ  = addslashes( $_FILES[ 'plik' ][ 'type' ] ) ;
  12. $plik_rozmiar = addslashes( $_FILES[ 'plik' ][ 'size' ] ) ;
  13.  
  14. $scizka_tmp = $_FILES[ 'plik' ]['tmp_name'] ;
  15. $sciezka_plik = $scizka_tmp.basename($_FILES[ 'plik' ][ 'name' ]); // plik na serwerze
  16.  
  17. if ( move_uploaded_file( $scizka_tmp, $sciezka_plik ) ) ;
  18. else 
  19. {
  20. echo '<fieldset><legend> syntax error </legend>' ;
  21. switch( $_FILES[ 'plik' ][ 'error' ] )
  22. {
  23. case 1 : echo( 'Plik ma za duzy rozmiar nie moge go zalaczyc ! ' ) ;break ; 
  24. case 2 : echo( 'Plik ma za duzy rozmiar nie moge go zalaczyc ! ' ) ; break ;
  25. case 3 : echo( 'Zgralem tylko czesc zalacznika !' ) ; break ;
  26. case 4 : echo( 'Nie ma zalacznika do dolaczenia !' ) ; break ;
  27. case 6 : echo( 'Nie ma ustawionego katalogu tymczasowego !' ) ; break ;
  28. }
  29. echo '</fieldset><br>' ;
  30. }
  31.  
  32.  // otwieram plik
  33. if ( !$wskPlik = fopen( $sciezka_plik , "r" ) )
  34. echo( 'Nie można otworzyć pliku z katalogu tymczasowego' );
  35.  
  36. $gotowy_plik = addslashes( (fread( $wskPlik, $plik_rozmiar ) ) );
  37. fclose( $wskPlik ) ;
  38.  
  39. // dodaje plik do bazy
  40.  $zapytanie = "insert into `pliki` ( `id` , `plik` , `plik_nazwa`, `plik_typ` )
  41.  values ( NULL , '".$gotowy_plik."', '".$plik_nazwa."', '".$plik_typ."' );" ;
  42. $wynik = $baza_danych->query( $zapytanie ) ;
  43.  
  44. if( ! $wynik ) echo ( 'Nie mogę zrealizować zapytania !<br><i>'.$zapytanie.'</i><br>'.$baza_danych->error ) ;
  45. else echo 'plik zostal dodany do bazy' ;
  46.  
  47. $baza_danych->close() ;
  48. }
  49. else
  50. {
  51. echo 'Dodaj plik do bazy danych: <br>' ;
  52.  
  53. echo '<form enctype="multipart/form-data" action="dodaj_plik.php?rozkaz=dodaj" method="post">' ;
  54. echo '<br><table border="0">';
  55. echo '<tr><td valign="top"> plik: </td><td> <input name="plik" type="file" size="53" > </td></tr>' ;
  56. echo '<tr><td valign="top"></td><td > <input type="submit" value="dodaj plik"> </td></tr>' ;
  57. echo '</table>' ;
  58. echo '</form>' ;
  59.  
  60. }
  61.  
  62. ?>



// skryp ktory odczytuje z bazy plik i zapisuje na komputerze usera we wskazane miejsce
  1. <?php
  2. $id_pliku = "1" ; 
  3.  
  4. $baza_danych= new mysqli( 'localhost' , 'root', 'helspawn', 'pliki' ) ;
  5. if ( mysqli_connect_errno() ) echo ( 'nie moge ustanowic polaczenia z baza danych !<br>'.mysqli_error() ) ; 
  6.  
  7. $zapytanie = "select * from pliki where id=".$id_pliku ;
  8. $wynik = $baza_danych->query( $zapytanie ) ;
  9. if( ! $wynik ) echo ( 'Nie mogę zrealizować zapytania !<br><i>'.$zapytanie.'</i><br>'.$baza_danych->error ) ;
  10. $plik = $wynik->fetch_assoc() ;  
  11. $baza_danych->close() ;
  12.  
  13. $plik_nazwa = stripslashes( $plik[ 'plik_nazwa' ] ) ;
  14. $plik_typ = stripslashes( $plik[ 'plik_typ' ] ) ;
  15. $plik_do_zgrania = $plik[ 'plik' ] ;
  16.  
  17. header("Content-type: $plik_typ" );
  18. header('Content-Disposition: attachment; filename="'.$plik_nazwa.'"');
  19. echo $plik_do_zgrania ;
  20.  
  21. ?>


// baza danych pliki w mysql
  1. CREATE DATABASE `pliki` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  2. USE pliki;
  3.  
  4. CREATE TABLE `pliki` (
  5. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  6. `plik` mediumblob NOT NULL,
  7. `plik_nazwa` varchar(99) NOT NULL,
  8. `plik_typ` varchar(99) NOT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
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.