Stooney Posted December 24, 2007 Share Posted December 24, 2007 The code below works for .txt files, but just displays a ton of jibberish on the screen when used with .jpg. With .txt the users will get the option to download/open the file as they should, just not with .jpg (haven't tested other file types) <?php function request_file($cat, $file){ $fileid=mysql_real_escape_string($file); $get=mysql_query("SELECT fname, path FROM dtf_files WHERE id='$fileid'"); $row=mysql_fetch_array($get); if($row){ $basefilename=$row[0]; $filename=$row[1].$row[0]; echo $filename; if(false !== ($fh = fopen($filename, 'r'))){ header("Cache-Control: no-cache, must-revalidate"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=$basefilename"); while(!feof($fh)) { echo fread($fh, 1024); } } else{ $error='SERVER ERROR: Could Not Open File!'; echo '<div class="error">'.$error.'</div>'."\n"; show_files($cat); } } else{ $error='SERVER ERROR: Could not retrieve file list from database!'; echo '<div class="error">'.$error.'</div>'."\n"; } } ?> Quote Link to comment https://forums.phpfreaks.com/topic/83024-problem-feeding-files-to-users/ Share on other sites More sharing options...
Stooney Posted December 24, 2007 Author Share Posted December 24, 2007 This is the code I'm working off of, (originally posted by Corbin I think). It works fine for all file types: if(false !== ($fh = fopen($filename, 'r'))) { //These headers would make the page not be cached by the web browser header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past //this would tell the browser to download it instead of showing it header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=$sname"); //suggest a filename while(!feof($fh)) { echo fread($fh, 1024); //read and echo [up to] 1024 bytes at a time } } Quote Link to comment https://forums.phpfreaks.com/topic/83024-problem-feeding-files-to-users/#findComment-422299 Share on other sites More sharing options...
Stooney Posted December 25, 2007 Author Share Posted December 25, 2007 bump Quote Link to comment https://forums.phpfreaks.com/topic/83024-problem-feeding-files-to-users/#findComment-422759 Share on other sites More sharing options...
redarrow Posted December 25, 2007 Share Posted December 25, 2007 HEADERS <?PHP // build file headers header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); // header for the content type $ext = strToLower(substr($filename,strlen($filename)-3, 3)); if ($ext == "mp3" ) { header("Content-Type: audio/x-mp3"); } else if ($ext == "jpg") { header("Content-Type: image/jpeg"); } else if ($ext == "gif") { header("Content-Type: image/gif"); } else if ($ext == "png") { header("Content-Type: image/png"); } else if ($ext == "swf") { header("Content-Type: application/x-shockwave-flash"); } else if ($ext == "flv") { header("Content-Type: video/flv"); } // and some more headers header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); // refer to file and exit readfile("$filename"); exit(); ?> Quote Link to comment https://forums.phpfreaks.com/topic/83024-problem-feeding-files-to-users/#findComment-422825 Share on other sites More sharing options...
Stooney Posted December 25, 2007 Author Share Posted December 25, 2007 Alright, I changed the headers to what you suggested redarrow and it works fine in its own script. But when I turn it into a function, and call it from somewhere in the site, gibberish is still displayed on the page. I'm assuming it's because you cant change the headers when there's already been stuff written to the page. Is there a way around this? Or should I just send the users to download.php rather than call it as a function? Quote Link to comment https://forums.phpfreaks.com/topic/83024-problem-feeding-files-to-users/#findComment-423045 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.