Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Download plików za pomocą przeglądarki, Podczas downloadu plików tekstowych dodoawna jest nie porzadana treść
endrju_pn
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 31.07.2009

Ostrzeżenie: (0%)
-----


Witam wszystkich (IMG:style_emoticons/default/smile.gif)

Mam następujący problem napisałem skrypt w php mający na celu download plików z przeglądarki.I ogólnie wszyto działa pliki się ściągają ale jak ściągam plik tekstowy to jest do niego dodawany tekst ze strony którego nie powinno tam być!!Do otwieranie listy odnośników wykorzystuje funkcje która wczytuje mi z katalogu wszystkie pliki tam zamieszczone po czym wywołuje funkcje odpowiedzialną za wywoływanie ściąganie plików.
Poniżej zamieszczam tekst z pliku głównego:
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?php
  6. require_once ('b_funkcji.inc');//plik zawierający moje funkcje
  7. c_katalog('./download/','index.php');
  8. $name=$_GET['name'];
  9. if(!empty($name))
  10. {
  11. wyslij($name);
  12. }
  13.  
  14. ?>
  15.  
  16. <body>
  17. </html>


A poniżej zamieszczam plik w którym są zawarte moje funkcje:
  1. <?php
  2. /*Funkcja czyta katalog i towrzy z plików jego zawartosci odnosniki
  3.   Jako argumenty przyjmuje scierzke do zasobu oraz argument opcjonalny czyli
  4.   plik w jakim ma być wyswietlany odnosnik
  5. */
  6. function c_katalog($sciezka,$plik='download.php')
  7. {
  8. $sciezka=opendir($sciezka);
  9. while(($p_z_katalogu=readdir($sciezka))!==false)
  10. {
  11. if (!(($p_z_katalogu=='.')||($p_z_katalogu=='..')))
  12. echo '<a href="'."$plik?name=$p_z_katalogu".'">'."$p_z_katalogu".'</a><br/>';
  13. }
  14. closedir($sciezka);
  15. }
  16. /*Funkcja przesyla plik za pomoca przegladarki z serwera do klijenta
  17.   Funkcja jak argument potrzebuje nazwy pliku do pobrania oraz jako argument opcjonalny
  18.   potrzebuj scierzke do pliku do pobrania*/
  19. function wyslij($name,$sciezka='download/')
  20. {
  21. $plik=fopen($sciezka.$name,"rb");
  22. flock($plik,1);
  23. $wielkosc=filesize($sciezka.$name);
  24. while (!feof($plik))
  25. {
  26. $zawartosc.=fgets($plik);
  27. }
  28. flock($plik,3);
  29. fclose($plik);
  30. header('Content-Type: application/x-unknown');
  31. header("Content-Lenght:$wielkosc");
  32. header("Content-Disposition: attachment; filename=$sciezka.$name");
  33.  
  34. echo $zawartosc;
  35.  
  36. }

Do tych plików jest dodawany tekst :
<html>
<head>
</head>
<body>
A tutaj są podawane te odnośniki no i tekst plik
</body>
</html>

Nie mam pojęcia dlaczego ten tekst jest dodawany do pliku jak powinien być tam tylko zawartość tego pliku:|

Za wszelką pomoc z góry dziekuje

Ten post edytował endrju_pn 10.09.2009, 16:18:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
kfc4
post
Post #2





Grupa: Zarejestrowani
Postów: 195
Pomógł: 18
Dołączył: 7.10.2007

Ostrzeżenie: (0%)
-----


  1. $name=$_GET['name'];
  2. if(!empty($name))
  3. {
  4. wyslij($name);
  5. }

Daj to na samym początku pliku. A zaraz po tym ifie
  1. exit();
Go to the top of the page
+Quote Post
endrju_pn
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 31.07.2009

Ostrzeżenie: (0%)
-----


Zrobiłem tak jak mówiłeś ale nie pomogło do końca.Po pierwsze nie mogę wywołać funkcji exit();po tym ifie gdyż nie będzie widział odnośników wypisanych za pomocą funkcji c_katalog(funkcja ta jak nazwa wskazuje czyta_katalog)tworząc w nim odnośniki o odpowiednich atrybutach name które podczas kliknięcia będą przekazywane dalej metoda $_GET['name'] do zmiennej $name skąd dalej do funkcji wyślij która znajdzie plik po ścieżce dostępu do zasobu i nazwie pliku podanej w zmiennej $name i wyśle nagłówki!Tu jest kod po modyfikacji:
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?php
  6. $name=$_GET['name'];
  7. require_once ('b_funkcji.inc');
  8. if(!empty($name))
  9. {
  10. wyslij($name);
  11. exit();
  12. }else
  13. c_katalog('download/','index.php');
  14. ?>
  15. <body>
  16. </html>


Teraz w pliku zamiast wyświetlania

(IMG:http://media3.mojageneracja.pl/oitirroory/mediumkpsvjf604aaa17abf174869424.jpg)

A to pojawia się po modyfikacji kodu przedstawionej wyżej

(IMG:http://media6.mojageneracja.pl/oitirroyop/mediumkpsvq9554aaa18a1eb40d01248.jpg)

Ale dalej jest ten problem ,że do ściąganego pliku jest dodawany nie pożądany tekst(html ze strony po za znacznikami) i teraz zamiast odnośników notice!!!nie chodzi o tego notice lecz o to ,ze jest on dodawany wogóle do pliku
W końcu powinna tam być tylko zawartość pliku!!

Zupełnie nie wiem o co z tym chodzi próbowałem już różnych kombinacji aby to zadziałało.I nic (IMG:style_emoticons/default/sciana.gif)
Jeżeli ktoś wie co to jest za przyczyna ,że "przecieka" tekst do pliku to będę bardzo wdzięczny za pomoc bo męczy mnie to

Ten post edytował endrju_pn 11.09.2009, 10:39:31
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Jeżeli ktoś wie co to jest za przyczyna ,że "przecieka" tekst do pliku
Przepraszam ale (IMG:style_emoticons/default/blinksmiley.gif)
Czemu przecieka? No przecież za kazdym razem go wysylasz do klienta. kazde echo, kazdy kod html ktory dajesz przed plikiem to on juz leci.

Jak chcesz komus wyslac plik to masz wysłac tylko i wyłącznie plik. Nie moze być zadnych innych echo z linkami, nie moze być zadnych kodów html. Rozumiesz?

Funkcja ktora zwraca plik ma być najlepiej w oddzielnym pliku php ktory będzie tylko i wyłącznie zwracał ten plik i nic więcej.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 08:34