Lassie Posted May 29, 2007 Share Posted May 29, 2007 I have modified a download program to suit my purposes, and it essentailly works except I only get the first 1Kb regardless of file type. Below is the download section of the code. Where should I look for the problem?Is there anything in this code that would produce that type of result? # If a download has already been selected, #----------------------------------------- If ($_GET['file']){ # Get the filename to be downloaded #---------------------------------- $file = $_GET['file']; $file = stripslashes($file); $file = htmlspecialchars($file); $mainpath = "$path$file"; # Increment download count #------------------------- $filename = "./file_info/descriptions/$file.0"; $newfile = fopen($filename,"r"); $content = fread($newfile, filesize($filename)); fclose($newfile); $fileinfo = explode ("|",$content); $fileinfo[0] ++; # Save the new file count #------------------------ $content = implode("|", $fileinfo); $newfile = fopen($filename,"w"); fwrite($newfile, $content); fclose($newfile); # Translate file name properly for Internet Explorer #--------------------------------------------------- if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){ $file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1); } # Make sure the file exists before sending headers #------------------------------------------------- if(!$fdl=@fopen($mainpath,'r')){ die("Cannot Open File!"); } else { # Send the headers then send the file #------------------------------------ header("Cache-Control: ");# leave blank to avoid IE errors header("Pragma: ");# leave blank to avoid IE errors header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"".$file."\""); header("Content-length:".(string)(filesize($mainpath))); sleep(1); fpassthru($fdl); } }else{ # GD Library thumbnail function. #------------------------------- function thumbnail($i,$nw,$p,$nn) { $img=imagecreatefromjpeg("$i"); $ow=imagesx($img); $oh=imagesy($img); $scale=$nw/$ow; $nh=ceil($oh*$scale); $newimg=imagecreateTrueColor($nw,$nh); imagecopyresized($newimg,$img,0,0,0,0,$nw,$nh,$ow,$oh); imagejpeg($newimg, $p.$nn); $heigth = $nh; return ($heigth); } Quote Link to comment https://forums.phpfreaks.com/topic/53433-download-program-only-sends-first-1kb/ Share on other sites More sharing options...
per1os Posted May 29, 2007 Share Posted May 29, 2007 Print out the (filesize($mainpath)) variable and see if that is not reading out right. It seems like that is not sending any information which is why it is only allowing 1 KB to be downloaded. Quote Link to comment https://forums.phpfreaks.com/topic/53433-download-program-only-sends-first-1kb/#findComment-264024 Share on other sites More sharing options...
Lassie Posted May 30, 2007 Author Share Posted May 30, 2007 Thanks for the advice. I have tried your suggestion but I get no print output. I am not certain that I have coded this correctly but I will post the code so that you might venture an opinion. Thanks # Send the headers then send the file #------------------------------------ header("Cache-Control: ");# leave blank to avoid IE errors header("Pragma: ");# leave blank to avoid IE errors header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"".$file."\""); header("Content-length:".(string)(filesize($mainpath))); sleep(1); fpassthru($fdl); echo '(filesize[$mainpath]})'; } Quote Link to comment https://forums.phpfreaks.com/topic/53433-download-program-only-sends-first-1kb/#findComment-264603 Share on other sites More sharing options...
per1os Posted May 30, 2007 Share Posted May 30, 2007 Looking at this code you use "$mainpath" when that is defined but poorly. $filename should be the one you use as you use it for fread. Try the code below and see what is printed out, if you get an output than $filename is the one to use and replace that for $mainpath. # If a download has already been selected, #----------------------------------------- If ($_GET['file']){ # Get the filename to be downloaded #---------------------------------- $file = $_GET['file']; $file = stripslashes($file); $file = htmlspecialchars($file); $mainpath = "$path$file"; # Increment download count #------------------------- $filename = "./file_info/descriptions/$file.0"; die(filesize($filename)); // if you get output remove this line and replace $mainpath with $filename $newfile = fopen($filename,"r"); $content = fread($newfile, filesize($filename)); fclose($newfile); $fileinfo = explode ("|",$content); $fileinfo[0] ++; # Save the new file count #------------------------ $content = implode("|", $fileinfo); $newfile = fopen($filename,"w"); fwrite($newfile, $content); fclose($newfile); # Translate file name properly for Internet Explorer #--------------------------------------------------- if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){ $file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1); } # Make sure the file exists before sending headers #------------------------------------------------- if(!$fdl=@fopen($mainpath,'r')){ die("Cannot Open File!"); } else { # Send the headers then send the file #------------------------------------ header("Cache-Control: ");# leave blank to avoid IE errors header("Pragma: ");# leave blank to avoid IE errors header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"".$file."\""); header("Content-length:".(string)(filesize($mainpath))); // if you get output remove this line header("Content-length:".(string)(filesize($filename))); // if you do not get output remove this line and do some more testing. sleep(1); fpassthru($fdl); } }else{ # GD Library thumbnail function. #------------------------------- function thumbnail($i,$nw,$p,$nn) { $img=imagecreatefromjpeg("$i"); $ow=imagesx($img); $oh=imagesy($img); $scale=$nw/$ow; $nh=ceil($oh*$scale); $newimg=imagecreateTrueColor($nw,$nh); imagecopyresized($newimg,$img,0,0,0,0,$nw,$nh,$ow,$oh); imagejpeg($newimg, $p.$nn); $heigth = $nh; return ($heigth); } Quote Link to comment https://forums.phpfreaks.com/topic/53433-download-program-only-sends-first-1kb/#findComment-264773 Share on other sites More sharing options...
Lassie Posted May 30, 2007 Author Share Posted May 30, 2007 Thank you for your suggestion. I now download zero bytes. To add some clarity I am posting some of what I think is relevant code. I still have no print out of the $mainpath.Is my code OK to echo it as follows? # Send the headers then send the file #------------------------------------ header("Cache-Control: ");# leave blank to avoid IE errors header("Pragma: ");# leave blank to avoid IE errors header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"".$file."\""); header("Content-length:".(string)(filesize($mainpath))); header("Content-length:".(string)(filesize($$filename))); sleep(1); fpassthru($fdl); echo '(filesize[$mainpath]})'; echo '(filesize[$filename]})'; } variable set at start. $path = './'; $path = $path.$hash; # Read current directory. #------------------------ $d = opendir($path); while (false !== ($file = readdir($d))) { if ($file != "." && $file != "..") { # Get all the file attributes. #----------------------------- $size = filesize("$path$file"); $type = filetype("$path$file"); $ext = strrchr("$path$file",'.'); $modified = stat("$path$file"); $displayname = str_replace (strrchr ($file, "."), "", $file); # If the file does exist, read its data. #--------------------------------------- $newfile = fopen($filedescription,"r"); $content = fread($newfile, filesize($filedescription)); fclose($newfile); } $data = explode("|", $content); $accesses = $data[0]; $upload_date = $data[3]; # Start main loop. #----------------- if ($match > 0){ while (list ($key, $val) = each ($filename)) { if ($key >= ($records_per_page-$records_per_page)+(($currentpage-1)*$records_per_page) && $key <= ($records_per_page-1)+(($currentpage-1)*$records_per_page)){ $fileattr = explode("|", $val); # Fix and format Byte Length #--------------------------- if ($fileattr[4] < pow(2,10)){ $size = "$fileattr[4] B"; } if ($fileattr[4] >= pow(2,10) && $fileattr[4] < pow(2,20)) { $size = round($fileattr[4] / pow(2,10), 2)." KB"; } if ($fileattr[4] >= pow(2,20) && $fileattr[4] < pow(2,30)) { $size = round($fileattr[4] / pow(2,20), 2)." MB"; } if ($fileattr[3] > pow(2,30)) { $size = round($fileattr[4] / pow(2,30), 2)." GB"; } # Alternate colors between white and grey (or black and grey) on table entries. #------------------------------------------------------------------------------ if ($color == $color1){ $color = $color2; }ELSE{ $color = $color1; } # Get correct icon file depending on file extention. #--------------------------------------------------- $ext = substr ($fileattr[3], 1, 3); $ext = (strtolower($ext)); $iconfile = "./file_info/thumbs/th_$fileattr[2]"; $nw = 100; $nh = 64; $xtrainfo = "Jpeg image "; if (($ext == "jpg") && (!file_exists($iconfile)) && ($gdlib == 1)){ $ht = thumbnail("$path$fileattr[2]",$thumbsize,"./file_info/thumbs/","th_$fileattr[2]"); } # Get the correct icon file if image exists with same name as filename. #---------------------------------------------------------------------- if (($ext <> "jpg") or ($gdlib == 0)){ $xtrainfo = "$ext file"; $iconfile = "file_info/icons/$icons/x.gif"; $iconfile1 = "file_info/icons/$icons/$ext.gif"; $iconfile2 = "file_info/thumbs/th_$fileattr[1].jpg"; $nw = 64; $nh = 64; if (file_exists($iconfile1)) { $iconfile = $iconfile1; } if (file_exists($iconfile2)) { $iconfile = $iconfile2; } } /* if ($admin){ $admininfo = "<a href=\"./file_info/admin/edit.php?file=$fileattr[2]\" onClick=\"popup = window.open('./file_info/admin/edit.php?file=$fileattr[2]', 'PopupPage', 'height=350,width=520,scrollbars=yes,resizable=yes'); return false\" target=\"_blank\">Click Here to edit this entry</a><br>"; } */ # Print html results. #-------------------- Quote Link to comment https://forums.phpfreaks.com/topic/53433-download-program-only-sends-first-1kb/#findComment-264925 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.