Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: generowanie w locie pliku z danymi - lokalnie dziala na serwerze nie
Forum PHP.pl > Forum > PHP
mario
Witam!!!

Mam problem z wygenerowaniem pliku gdzie dane sa generowane w locie. Ponizej kod mojej funkcji. W praktyce dziala to tak, ze jest wyswietlana strona. Tresc ktora chce zapisac jest buforowana do sesji, user poprzez przycisk moze sobie pobrac np. do PDF'a dane ktore widzi czy wydrukowac itp. Dane do sesji czyli do funkcji wchodza bez problemu, mam problem tylko z wypluciem tego do przegladarki tak aby wyswietlil sie monit o otwarcie lub zapisanie pliku.

Oto moj kod

  1.  
  2.  
  3. function generuj($plik="", $dane="")
  4. {
  5. If ((!empty($plik)) and (!empty($dane)))
  6. {
  7.  
  8. header("Content-Description: File Transfer");
  9. header("Content-Type: text/html");
  10. header("Content-Disposition: attachment; filename=" . $plik);
  11. header("Content-Transfer-Encoding: binary");
  12. header("Expires: 0");
  13. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  14. header("Pragma: public");
  15. header("Content-Length: " . mb_strlen($dane));
  16.  
  17. echo $dane;
  18. }
  19. }
  20.  
  21.  

Kod ten wykonuje sie prawidlowo na lokalnej maszynie ale na serwerze hostingowym juz nie, co moze byc tego przyczyna? Zle wysylane naglowki czy w nieodpowiedniej kolejnosci? Brakuje jakiegos naglowka? Prosze o podpowiedzi.

Fifi209
Cytat(mario @ 9.02.2010, 09:12:33 ) *
Kod ten wykonuje sie prawidlowo na lokalnej maszynie ale na serwerze hostingowym juz nie, co moze byc tego przyczyna? Zle wysylane naglowki czy w nieodpowiedniej kolejnosci? Brakuje jakiegos naglowka? Prosze o podpowiedzi.

Możliwe, że na hostingu masz inne ustawienia w php.ini etc. Pisałeś wcześniej o sesji, mógłbyś pokazać jak przekazujesz dane z sesji do funkcji? (chcę wykluczyć register globals)
mario
dane do sesji zapisuje w nastepujacy sposob:

  1.  
  2. #
  3. # kod ktory generuje dane na stronie
  4. #
  5.  
  6. $_SESSION["drukuj"] = ob_get_contents();


link op kliknieciu ktorego odwoluje sie do funkcji generuj ktora ma mi wypluc dane do pliku w locie standardowy
  1. <a href="drukuj.php">zapisz jako PDF</a>


i w pliku drukuj.php

  1.  
  2. generuj ("export.pdf", $_SESSION["drukuj"]);


niewazne czy z sesji czy z palca nie wypluwa zapytania o plik a wyswietla na stronie

musze poszperac w ustawieniach configu serwera byc moze tam bedzie diabel schowany, zmienne globalne wylaczone na 100%, php5 - www.nazwa.pl
Fifi209
Moje niedopatrzenie, to:
  1. header("Content-Type: text/html");


na np.:
  1. header('Content-Type: application/pdf');
  2.  
  3. //lub
  4. header("Content-Type: application/force-download");
altruista2
Temat: Donwloadowanie w PHP

  1. function generuj($file, $tresc) {
  2. header('Content-Description: File Transfer');
  3. header('Content-Type: application/octet-stream');
  4. header('Content-Disposition: attachment; filename='.basename($file));
  5. header('Content-Transfer-Encoding: binary');
  6. header('Expires: 0');
  7. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  8. header('Pragma: public');
  9. header('Content-Length: ' . strlen($tresc));
  10. flush();
  11. echo $tresc;
  12. flush();
  13. }


Tyle smile.gif
mario
dziekuje Wam za pomoc, okazalo sie ze bardzo pomocna byla funkcja headers_list gdzie podejrzalem jakie naglowki wysyla mi skryt, obie funkcje zarowno moja jak i altruista2 sa poprawne. moj blad ze poprzez zle generowanie strony gdzies po drodze wysylalem inne naglowki i stad nie wypluwalo mi pliku, musialem znalezc miejsce gdzie podmienialo mi naglowki i poszlo winksmiley.jpg

jeszcze raz wielkie dzieki za pomoc!
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.