Two biggies for you:
1) Download flashget and use it to download some files off the internet. Look at how the headers work.
2) Read the tip in my signature about headers already sent.
From both of those you should start to see something that looks familiar. File stream data is sent AFTER the headers however it must have its own UNIQUE headers - it can't share the headers with the html page. Secondly you can't print a file into the html page. Supposing you're offering a mp3 of a .avi file - You can't just print it into the html page and expect the browser to understand it. The browser will just see a bunch of random characters and try to display it as a web page.
My helpful sig has gone because a mod below the administrator gave me an infraction - despite the administrator personally agreeing to it.
If you need any php tips or tricks you can PM me.