PHP Classes
Icontem

File: myfat.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Mirko Mönninghoff  >  myFat  >  myfat.php  
File: myfat.php
Role: Class source
Content type: text/plain
Description: The Class (Usage Information included)
Class: myFat
Store binaries in a MySQL based virtual hard drive
 

Contents

Class file image Download
<?php
/*
------------------------------------------------------------
Class: myFat

MySQL Database as Fileserver - Block Structure
2004 by Mirko Mönninghoff
mirko@mouseattack.de

Version 0.2 alpha / !working!
Date: 04/17/2004
Last update: 04/18/2004

The class stores binary data - any kind of files in a mysql
database. It creates a virtual FAT and handles the data
like a simple filesystem. Perfect for people with less
webspace and one mysql database ;-)

------------------------------------------------------------
IF YOU DAMAGE SOMETHING WITH THIS CLASS, ITS NOT MY FAULT !!
YOU HAVE BEEN WARNED -NO WARRENTY- TEST IST AT YOUR OWN RISK
------------------------------------------------------------

If you like/use the script: Drop me some lines per mail !
Comments (positive) are welcome to !

Don't remove this header information !
------------------------------------------------------------

Installation:

Create a mysql database or decide for an already in use db.
Fill in the connection details ind the class header (see
below) 

The database needs 2 tables:

SQL:

CREATE TABLE `myfat_cluster` (
  `block_position` int(10) unsigned default '0',
  `file_uid` int(10) unsigned default '0',
  `block_data` longblob
) TYPE=MyISAM;

CREATE TABLE `myfat_fat` (
  `file_name` varchar(255) NOT NULL default '',
  `file_uid` int(11) NOT NULL auto_increment,
  PRIMARY KEY  (`file_uid`)
) TYPE=MyISAM AUTO_INCREMENT=1000 ;


For large files its good to adjust some php.ini settings:
-----------------------------------------------------------
my settings (in test envirement):

php.ini:

[...]
max_execution_time = 240
max_input_time = 240   
memory_limit = 64M   
post_max_size = 32M 
file_uploads = On     # this must be !
upload_max_filesize = 24M
[...]

------------------------------------------------------------
ToDo: (If i find some time)
Fields for more Fileinformation(Size,Blocks,Type,etc), 
Folders, 
------------------------------------------------------------
    

*/

class myFat {

    var 
$DB_SERVER "192.168.0.88";    # mysql server adress     *adjust to your needs*
    
var $DB_USER "myfat";            # database username     *adjust to your needs*
    
var $DB_PASS "password";        # database user password *adjust to your needs*
    
var $DB_NAME "myfat";            # database name      *adjust to your needs*
    
var $TABLE_FAT "myfat_fat";        # the table for the vfat
    
var $TABLE_BLOCKS "myfat_cluster";    # this table takes the data blocks
    
var $myScriptName "index.php";    # the target page for all links - in this case the self page
    
var $DB_LINK NULL;
    var 
$BLOCKSIZE 16384;            # store 16K blocks
    
    
function myFat(){
        
/* Constructor */
        
        
        
$this->DB_LINK = @mysql_connect($this->DB_SERVER,$this->DB_USER,$this->DB_PASS) or die("SQL: Connect Error");
            @
mysql_select_db($this->DB_NAME) or die ("SQL: Database not found"); 
            
            if (isset(
$_GET["load"])) $this->download($_GET["load"]);
        if (isset(
$_GET["upload"])) $this->upload();
        if (isset(
$_GET["delete"])) $this->delete($_GET["delete"]);
    
    }


    function 
listfiles(){
    
    
        
$sql "select file_name,file_uid from $this->TABLE_FAT order by file_name";
        
$res mysql_query($sql);
        
        echo 
"<table cellpadding=4>";
        echo 
"<tr><td>";
        echo 
"Directory";
        echo 
"</td><td>";
        echo 
"&nbsp;";
        echo 
"</td></tr>";

        while (
$row mysql_fetch_array($res)){
            echo 
"<tr><td>";
            echo 
"<a title='Click to download' href='$this->myScriptName?load=$row[file_uid]'>$row[file_name]</a><br>";
            echo 
"</td><td>";
            echo 
"<a title='Click to delete' href='$this->myScriptName?delete=$row[file_uid]'>[Delete]</a>";
            echo 
"</td></tr>";
        }
        echo 
"</table>";

    }
    
    function 
upload(){

        
$file $GLOBALS["filename"];
        
$file_name $GLOBALS["filename_name"];
        
        if (!
file_exists($file)) return 0;
        
        
$this->save($file,$file_name);
    }
    
    function 
save($file,$file_name){

        
$file_size filesize($file);
        
$block_counter 0;
        
        
$sql "insert into $this->TABLE_FAT (file_name) values ('$file_name')";
        
mysql_query ($sql);
        
        
$file_uid mysql_insert_id($this->DB_LINK);
        
        
$handle fopen ($file"r");
        while (!
feof($handle)) {
            
$buffer addslashes(fread($handle$this->BLOCKSIZE));
            
$sql "insert into $this->TABLE_BLOCKS (block_position,file_uid,block_data) values (".$block_counter++.",".$file_uid.",'$buffer')";
            
mysql_query ($sql);
        }
        
fclose ($handle);
    }
    
    
    function 
delete($file_uid){
        
$sql "delete from $this->TABLE_BLOCKS where file_uid='$file_uid'";
        
mysql_query($sql);
        
$sql "delete from $this->TABLE_FAT where file_uid='$file_uid'";
        
mysql_query($sql);
    }
    
    function 
download($file_uid){

        
$sql "select file_name from $this->TABLE_FAT where file_uid='$file_uid'";
        
$res mysql_query($sql);
        
$row mysql_fetch_array($res);
        
$file_name urlencode($row["file_name"]);

        
$sql "select * from $this->TABLE_BLOCKS where file_uid='$file_uid' order by block_position";
        
$res mysql_query($sql);
        
        
header("Content-Type: x-type/subtype");
        
//header("Content-Length: ");
        
header("Content-Disposition: attachment; filename=$file_name");
                
        while (
$row mysql_fetch_array($res)){
            echo 
$row["block_data"];
        }
        
        exit;
    }
}

?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products