Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z downloadem plików tekstowych
Forum PHP.pl > Forum > PHP
TomaySOFT
Witam!

Jestem nowym członkiem tego szanownego forum, ale nie jestem nowicjuszem w php. Spotkałem się jednak z pewnym problemem, który wydaje się (przy mojej obecnej wiedzy) nie do przejścia.

Mam serwer WWW (linux) z Apachem, php i bazami MySQL - można rzec - rozwiązanie wzorcowe.
Strony na nim udostępnione służą do odczytywania bazy zawierającej wpisy z lokalizacjami na dyskach plików, które użytkownicy mogą sobie ściągać. Problem polega na tym, że pliki te są plikami tekstowymi, co powoduje, że link z adresem URL pliku (odczytanym z bazy, a będącym po prostu linkiem do FTP-a) prowadzi do wyświetlenia zawartości pliku w oknie przeglądarki. Próbowałem już skorzystać ze znalezionego na Necie mechanizmu wymuszania zapisu na dysk (
Kod
header("Content-Type: application/save");
) , co nawet doprowadzało do wlaściwego zachowania przeglądarki, lecz nie pozwalało na fizyczne odczytanie pliku. ("Internet Explorer nie mógł otworzyć miejsca w podanej lokalizacji"). Co ciekawe problemu nie było, gdy klientem był Netscape działający na Linuksie. Ale niestety musi być to IE-friendly - nie mój wybór.
Zastosować musiałem mechanizm polegający na wypisaniu na stronach typu "download", że pliki zapisujemy klikając prawym klawiszem i "Zapisz jako...". Dla prostych ludzi, którzy z tego mają korzystać - przeczytać nie znaczy zrozumieć. Musi to się odbyć poprzez normalnie kliknięcie lewym przyciskiem myszy.

Zatem pomóżcie kochani koledzy programiści - podpowiedzcie jak to zrobić.

Założenia:
skrypt nazywa się download.php i to on z bazy odczytuje nazwę pliku otrzymując jako parametr jedynie ID pliku bazie. Skrypt jest otwierany po kliknięciu na link do pliku w nowym oknie, które zamienia się w okno typu "Otworzyć/Zapisać" i zapisać można plik pod nazwą taką, jak na serwerze FTP (choć oczywiście z możliwością zmiany nazwy i lokalizacji).
Po przesłaniu pliku okno znika.

Wiem - można byłoby zastosować gotowe biblioteki plików, lecz zakres przeróbek byłby zbyt duży, aby nie powodowały u użytkowników frustracji z powodu ich własnej niewiedzy. Wspomniany działanie uzyskać można także oczywiście poprzez użycie tylko jednego headera (
Kod
header("location: ftp://cos_cos/nazwa_pliku.txt");
), ale działa to poprawnie tylko z plikami typu ZIP lub wykonywalnymi. Tekst się wyświetla!


Sorry, że przynudzam, ale bardzo mi zależy na tym, aby móc wreszcie oddać "system" do użytkowania w trybie produkcyjnym - następne zadania w pracy czekają, a czas goni...



Od razu dzięki za wszelkie sugestie.

Pozdrawiam

[/b]
castor
ciezko bedzie...
IE wszytsko co rozpozna nie daje do downloadu..
....lecz sa wyjscia
np: robisz plik text.php a w nim
Kod
<?

header(Content-Type: dupa");

include("plik.txt");

?>

..IE nie rozpozna tego i wywala okno zapisz jako...
..minusem tego rozwiazania jest ze User nie otrzyma *.txt lecz *.php a w nim zawartosc pliku.txt...


wspominales ze robisz to na swoim serwerze wiec mozesz w jednym katalogu skonfigurowqac serwer tak zeby php parsowalo pliki *.txt..
....a tym pliku robisz tak jak wyzej napisalem ..i bedzie hulac, a user otrzymuje *.txt

..inne rozwiazania to archiwa...


....zreszta szczerze ci powiem ze ja nigdy jeszcze nie widzialem serwisu ktory daje do downloadu pliki *.txt.
....mi sie zdaje ze w zupelnosci wystarcza otworzenie pliku w nowym oknie z mozliwoscia wydrukowania,a jesli ktos bedzie chcial se to zapisac to walnij mu linaka z notatka o prawym klawiszu lub ze musi w listwie IE pod PLIKI /ZAPISZ JAKO...
...no i jeszcze linka do archiwum (*.zip) :wink:
TomaySOFT
Dzięki - sprawdzę natychmiast jak dotrę na miejsce (tzn. do kompa, z któego modą dokonywać edycji skryptów).
Fakt, że goście serwisu uzyskają pliki z rozszerzeniem txt, nie jest wielkim problemem, a nawet może pomóc, byleby dało się jeszcze z automaty wpłynąć na zmianę nazwy pliku. W tej chwili (są to regularnie udostępniane dla klientów pliki "parametryczne" do stosowanego przez nich oprogramowania) pliki nazywają się cos_cos.mdd, gdzie mdd oznacza jeden znak miesiąca i 2 znaki dnia, z którego dany plik pochodzi (tak dla porządku). Jeśli uda mi się wymusić (za sprawą php) zmianę nazwy na np. cos_mdd.txt to będzie i tak lepiej, niż "... kliknij na link prawym klawiszem i wybierz pozycję Zapisz jako...", gdyż ludzie, którzy mają tego używać mają raczej cztery lewe ręce do komputera. Dlaczego zatem robie ten serwis - bo mam dość przygotowywania kilkunastu dyskietek z tymi plikami dla ludzi, a sa moi koledzy, którzy mają szczęście robić to ponad 100 razy dziennie!!!

Jeśli i na to znalazł byś jakieś rozwiązanie - od razy Bóg zapłać!

Pozdrawiam
Mistycus
Cytat
Aby użytkownik został monitowany o zapisanie wysyłanych danych, takich jak np. wygenerowany plik PDF, można użyć nagłówka Content-Disposition aby podać zalecaną nazwę pliku i zmusić przeglądarkę do wyświetlenia okienka Zapisz jako.  


Kod
&lt;?php

header("Content-type: application/pdf");

header("Content-Disposition: attachment; filename=downloaded.pdf");



/* ... treść pliku pdf ... */


Notatka: W Microsoft Internet Explorer 4.01 jest błąd, który uniemożliwia wykorzystanie tego mechanizmu. Nie ma na to rozwiązania. Błąd, który zahacza o ten mechanizm, jest także w Microsoft Internet Explorer 5.5, jednak da się go ominąć aktualizując przeglądarkę poprzez Service Pack 2 lub późniejszy.
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.