PHPdude Skrevet 18. august 2006 Del Skrevet 18. august 2006 Driver å lager et lite filarkiv og sliter med den delen som står for lagring og utsending av filene, tenkte jeg skulle lagre filene i en MySQL-database, men har fått et problem da.... Her er klassen som håndterer lagringen og sendingen av filene: <?php class Filearchive_Storageengine_DB { /** * mysqli object */ public $db = false; public $table = 'filearchive_saved_files'; public function __construct($db = false) { $this->db = $db ? $db : CMS::$db; } public function save_file($filecontent, $mimetype, $filename, $code = 0) { $sql = sprintf("REPLACE INTO %s (`id`, `filedata`, `mimetype`, `filename`) VALUES ('%s', '%s', '%s', '%s')", $this->table, $code, $this->db->real_escape_string($filecontent), $this->db->real_escape_string($mimetype), $this->db->real_escape_string($filename)); $res = $this->db->query($sql); if(!$res) { CMS::make_error('Query failed: ' . $this->db->error, E_DBERROR, __FILE__, __LINE__, NULL, $sql); return false; } return $this->db->insert_id; } public function send_file_to_user($code) { $data = $this->get_filedata($code); header('Content-Length: ' . strlen($data[0])); header('Content-Type: ' . $data[1]); header('Content-Disposition: attachment; filename="' . $data[2] . '"'); echo $data[0]; die(); } public function get_filedata($code) { $sql = sprintf("SELECT `filedata`, `mimetype`, `filename` FROM %s WHERE `id` = '%d'", $this->table, $code); $res = $this->db->query($sql); if(!$res) { CMS::make_error('Query failed: ' . $this->db->error, E_DBERROR, __FILE__, __LINE__, NULL, $sql); return false; } elseif(!$data = $res->fetch_row()) { return false; } return array(stripslashes($data[0]), stripslashes($data[1]), stripslashes($data[2])); } public function delete_file($code) { $sql = sprintf("DELETE FROM %s WHERE `code` = '%s' LIMIT 1", $this->table, $code); $res = $this->db->query($sql); if(!$res) { CMS::make_error('Query failed: ' . $this->db->error, E_DBERROR, __FILE__, __LINE__, NULL, $sql); return false; } return true; } } Problemet er at at filene blir korrupte på en eller annen måte, lagrer jeg en odt-fil og laster ned og åpner i OpenOffice.org så får eg beskjed om at fila er ødelagt. Prøver jeg med png-fil og laster og åpner i et bildevisningsprogram kommer det ingenting. Her er strukturen på tabellen: CREATE TABLE `filearchive_saved_files` ( `id` int(11) NOT NULL auto_increment, `filedata` mediumblob NOT NULL, `mimetype` varchar(30) NOT NULL, `filename` varchar(255) NOT NULL, `last_changed` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP, `date_added` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå