Witam, mam takie pytanie. Męczę się już od jakiegoś czasu, aby za pomocą przycisku <button> była reakcja, a mianowicie chciałbym, aby po kliknięciu przycisku pobrał się plik, który mam na dysku. Działam na localhost, php5. Próbuję wciąż za pomocą formularza. Próbowałem na tej samej stronie, a więc w tym samym pliku, a także aby formularz wysłał do innej strony/pliku metodą $_POST. Niewiem czemu nawet nie reaguje na tą czy drugą metodę ($_GET) owy <button>. Jestem początkujący w programowaniu. Dziękuję z góry za pomoc :)
Najprostszy przykład to taki w którym będziesz potrzebował dwóch plików: jednego HTML oraz drugiego PHP.
Plik HTML powinien wyglądać mniej więcej tak jak poniżej, masz wycinek:
<form action="pobierzPlik.php" method="post">
<button>Ściągnij...</button>
</form>
Plik php o nazwie, która widoczna jest w atrybucie "action" powyższego formularza, jest też dość prosty:
<?php
header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename=plik.xxx');
$sciezkaDoPliku = "pobierzPlik.php";
echo file_get_contents($sciezkaDoPliku);
Klikasz w przycisk, przeglądarka kieruje się do strony pobierzPlik.php. Ta strona to w całości skrypt php, w którym ładujesz dane z pliku, wyświetlasz je na wyjście (echo - to co przeglądarka wyświetli). Dzięki nagłówkom (header), dostaniesz komunikat o tym, że strona oferuje plik do ściągnięcia i czy aby nie chcesz zapisać pliku plik.xxx (to ten filename=... - tu możesz wpisać co Ci się żywnie podoba) na dysk ;)
echo file_get_contents($sciezkaDoPliku);
Tego jeszcze nie widziałem szukając rozwiązania po internecie. Dzięki wielkie. Działa :) no w końcu :P
zamiast: echo file_get_contents($sciezkaDoPliku);
daj:
readfile($sciezkaDoPliku);
BEZ ECHO - readfile wypisuje zawartość sam.
jaka jest różnica? file_get_contents wywali Ci serwer jeżeli plik jest większy niż dostępna pamięć dla skryptu PHP. readfile nie wywali