needlogin=true; $me = new User(); $me->loadMe(); $this->me = $me; $this->layout()->set("me",$me); /*if(!$me->isAdmin()) { $this->redirect("Dashboard"); }*/ } protected function downloadAction() { $id = $this->request->id; if(!is_numeric($id) || $id < 1) { return true; } $file = new File($id); if(!$file) { throw new Exception("File not found", 404); } $filename = $file->store_filename; $path = MFUPLOAD_FILE_SAVE_PATH; $path .= ($file->subfolder) ? "/".$file->subfolder : ""; $path .= "/$filename"; if(!file_exists($path)) { throw new Exception("File not found", 4041); } if(preg_match('/\.([^.]+)/',$filename,$m)) { $ext .= $m[1]; } else { throw new Exception("File not found", 4042); } $outname = ($file->filename) ? $file->filename : $file->orig_filename; if(!$this->sendfile($path, $outname)) { throw new Exception("File not found", 4043); } exit; } private function sendfile($file,$name) { $this->log->debug("sendfile: $file $name"); if (!$fh = fopen($file, 'r')) { return false; } set_time_limit(36000); header('Content-Type: application/octet-stream'); header('Content-disposition: attachment; filename="' . $name . '"'); $size = exec('stat -c %s '.escapeshellarg($file)); if(strlen($size)) { if($size < (pow(2,31))-1) { header('Content-Length: ' . $size); } } while (!feof($fh)) { $data = fread($fh, 8192); echo $data; } return true; } }