Jump to content
Sign in to follow this  
PHPdude

Problemer med binære filer i database

Recommended Posts

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;

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...