Ash www.ashleysheridan.co.uk |
--- Begin Message ---I checked the files with an HEX editor, and I found that each downloaded file starts with "EFBBBF", and after those three bytes follows the regular file.
- To: php-general@xxxxxxxxxxxxx
- Subject: Re: File download problem
- From: Stefano Noffke <stefano.noffke@xxxxxxxxxxxxxxxxxxxx>
- Date: Tue, 19 Aug 2008 15:17:25 +0200
- Delivery-date: Tue, 19 Aug 2008 14:18:21 +0100
- Envelope-to: ash@xxxxxxxxxxxxxxxxxxxx
- In-reply-to: <B7.30.55779.FAC89A84@xxxxxxxxxxxx>
- User-agent: Thunderbird 2.0.0.16 (Windows/20080708)
If I delete those three bytes, I can open the files just fine.Now the question is: Why do I get those three extra bytes at the beginning of each file I download with my script?Thanks Stefano Stefano Noffke wrote:Hi,Thank you for your reply. I tried your code, but the problem remains. I still can download PDF, TXT, and MP3 fine, but the ODT, DOC, and JPG are still corrupted.I wonder why it works with some files and not with others... Stefano Ashley Sheridan ha scritto:Hi Stefano, You can use this code instead to read in the file and output it to the browser, as it is binary safe. I've used it for the same reason you require, and it works fine with video clips.$fp = fopen($path, "rb"); while(!feof($fp)) { print(fread($fp, 1024)); flush($fp); } fclose($fp); exit();The "rb" in the fopen function instructs PHP to open the file for reading in a binary safe manner. Hope this helps. Ash www.ashleysheridan.co.uk ------------------------------------------------------------------------ Oggetto: File download problem Da: Stefano Noffke <stefano.noffke@xxxxxxxxxxxxxxxxxxxx> Data: Mon, 18 Aug 2008 16:01:22 +0200 A: php-general@xxxxxxxxxxxxx A: php-general@xxxxxxxxxxxxx Greetings,I need to create a script to let registered users to download files from a non-public folder.The files name, type, and size are stored in a MySQL Database. The user need to click on a link, and a PHP script should handle the download of the file.Here is how I organized it:The script gets the ID from the $_GET array, retrieve the name, type, and size from the database, and then it sends the following:[CODE] header("Content-Type: $type"); header("Content-Length: " . filesize($fileNameWithAbsolutePath)); header("Content-Transfer-Encoding: binary"); header("Expires: 0"); header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: private"); header("Content-Disposition: attachment; filename=\"$fileName\""); readfile($fileNameWithAbsolutePath) or die("File not found."); [/CODE]This script needs to work with any file type. I checked it and it works fine with PDF, TXT, and MP3 for example, but not with ODT, DOC, or JPG which are corrupted and won't even open. Those are the only files I tried so far.I should add that the connection to the web page is encrypted through SSL. The server (Fedora 9) runs Apache 2.2.9, PHP Version 5.2.6, and MySQL version 5.0.51a.I cannot find any solution to this problem, and I hope that anyone here can help me.Thank you. Stefano-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
--- End Message ---
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php