Generowanie plików (mime)

Ostatania modyfikacja: 28 września 2017, kategoria: Php

Wyobraź sobie sytuację, w której dane zapisane w bazie MySQL wyświetlane są użytkownikowi po zalogowaniu w postaci tabeli. Użytkownik loguje się na swoje konto i odczytuje ważne dla niego informacje. Informacje są tak ważne, że użytkownik co jakiś czas kopiuje je ze strony i zapisuje w plikach tekstowych na dysku komputera. W celu zapewnienia większej funkcjonalności administrator serwisu powinien napisać funkcję zapisu informacji do pliku.

Generowanie pliku

Plik z danymi musi być wygenerowany „w locie” przez skrypt PHP. Nie ma sensu przetrzymywania ważnych danych użytkownika na serwerze. Poza tym gdyby dane często się zmieniały, mieli byśmy duży problem z aktualizowaniem plików.Rozwiązaniem tego problemu są typy MIME. Skrypt PHP może zwrócić typ, dzięki czemu przeglądarka będzie wiedziała co zrobić z jego zawartością. Typy MIME skonfigurowane są po stronie klienta czyli w ustawieniach przeglądarki.

Najlepszym rozwiązaniem będzie skrypt, zapisujący dane z bazy MySQL do pliku tekstowego o unikalnej losowej nazwie (np. ‚91758172930185012.txt‚). Następnie skrypt zleca przeglądarce pobranie pliku, w tym celu korzystamy z typu mime text/plain (tekstowy) oraz nagłówka Content-Disposition o wartości attachment. Dzięki temu informujemy przeglądarkę, że plik zwracany przez nasz skrypt jest plikiem tekstowym i że zalecamy jego pobranie, podając oczywiście jego lokalizację. Użytkownikowi ukarze się okienko z możliwością pobrania pliku. Od razu po pobraniu plik powinien zostać usunięty z serwera za pomocą funkcji unlink.

<?php
$plik = "tajne/91758172930185012.txt"; // nazwa i lokalizacja pliku
$nazwapliku = date('Y-m-d').".txt"; // nazwa widoczna dla uzytkownika 

header('Content-type: text/plain'); // typ tekstowy
header('Content-Disposition: attachment; filename="'.$nazwapliku.'"');
header('Content-Length: '.filesize($plik));
header("Pragma: no-cache"); 

readfile($plik);

unlink($plik); // usuwamy plik
?>

W skryptach PHP możemy generować wiele plików i nie koniecznie wymuszać ich pobranie. Typy MIME zostały użyte także w artykule o skrypcie captcha. Więcej typów można znaleźć w internecie.

Uwaga! Skrypt zawsze musi znajdować się w osobnym pliku, nie możesz go umieścić w środku swojej strony. Przed generowaniem nagłówka nie może być żadnych znaków, w przeciwnym wypadku wystąpi błąd Header information already send by output. Nawet jeżeli spróbujemy przenieść dane do osobnego bufora (ob_start() i ob_flush()) to w pliku tekstowym widnieć będzie źródło strony!

Użytkownik Maciek napisał:

06 maja 2013


Planuje tworzenie własnego portalu i informacje zawarte na tych stronach bardzo mi pomogą.Dzięki za to :)
Czekam na więcej.

Zachęcam Cię do zostawienia komentarza!

Ilość znaków: 0