[php] pobieranie plików

Witam, zacząłem ostatnio troche pisać w PHP. Napisałem skrypt pobierający plik z serwera. Plik pobiera się jednak w większości formatów tak że nie można go uruchomić (jest uszkodzony), a przy plikach *.txt zawartość pliku zostaje zastąpiona kodem html strony ;/ Nie mam pojęcia co jest grane. I jeszcze jedno… czy jest jakaś łatwiejsza metoda wywołania tego okienka pobierania i ewentualnie jak się ją stosuje.

Skrypt pobierający:

<?php

ob_start();

include('gora.php');

echo'

Download’; session_name(‘sesja’); ini_set(‘session.use_trans_sid’, 1); //przechowuj SID zawsze w adresie ini_set(‘session.use_cookies’, 0); //nie używaj cookies session_start(); require_once(‘polaczenie.php’); $zapytanie=“SELECT nazwa, rozmiar, typ FROM pliki WHERE id=’{$_GET[‘id’]}’”; $wynik=@mysql_query($zapytanie); $tabela=mysql_fetch_array($wynik); //okreslenie nazwy pliku $roz=explode(’.’, $tabela[‘nazwa’]); $nazwa=‘pliki/’.$_GET[‘id’].’.’.$roz[1]; if(file_exists($nazwa)){ $typ=$tabela[‘typ’]; $nm=$tabela[‘nazwa’]; $roz=$tabela[‘rozmiar’]; //pobierz plik header(“Content-Type: application/$typ”); header(“Content-disposition: attachment; filename=$nm”); header(“Content-Length: $roz”); readfile($nazwa); } else { echo’Taki plik nie istnieje’; } echo’’; include(‘dol.php’); ob_end_flush(); ?>[/code]

Poczytaj o funkcji header(); nie możesz wysłać nagłówków pliku gdy wysłałeś już jego zawartość, takie działanie było by nielogiczne.

hm…tak naprawde ten przykład jest w wikszości wzięty z książki…czyżby w książce był taki błąd?? Przecież buforowałem wyjście wiec nie ma problemu z header()

aha…już zrozumiałem o co chodzi :wink: tylko jest teraz problem jak wstawić pozostałą część strony przed header(), dokładnie chodzi mi o include(‘gora.php’);

wogóle to pobieranie jakiś dziwne jest…nie rozumiem dlaczego trzeba czytać zawartość pliku ;/

Przepraszam, nie zauważyłem tego buforu w skrypcie, a właściwie to zauważyłem, ale nieprzeanalizowałem jego wpływu.

Przy jakich formatach występują błędy? Może problem leży w złym mime type header(“Content-Type: application/$typ”); może to co wysyłasz wcale nie jest application/

heh…już zrobiłem ale nie wydaje mi się to logiczne… usunąłem kod:

include('gora.php');

echo'

Download’;[/code]

nie wydaje mi się to logiczne bo przecież bufor ma własnie rozwiązywać problem zwiazany z wywoływaniem funkcji header()

no i po usunięciu tej części kody użycie bufora nie ma już najmniejszego sensu ;/