00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 class aliroFileInDB {
00042 private $filename = '';
00043 private $database = null;
00044
00045 public function __construct ($name) {
00046 $this->filename = $name;
00047 $this->database = aliroDatabase::getInstance();
00048 }
00049
00050 public function fromFile ($source, $delete=false) {
00051 if ($f = fopen($source,'rb')) {
00052 $this->delete();
00053 $chunkid = 0;
00054 $sql = "INSERT INTO #__file_system (filename, chunkid, datachunk, bloblength) VALUES ($this->filename, ";
00055 while($f && !feof($f)) {
00056 $chunk = fread($f, 60000);
00057 $chunk = $this->database->getEscaped($chunk);
00058 $this->database->doSQL($sql."$chunkid, '$chunk', LENGTH(datachunk))");
00059 $chunkid++;
00060 }
00061 fclose($f);
00062 if ($delete) @unlink($source);
00063 return true;
00064 }
00065 else return false;
00066 }
00067
00068 public function toFile ($destination, $delete=false) {
00069 $result = false;
00070 if (!file_exists($destination) AND $f = @fopen($destination, 'wb')) {
00071 $this->database->setQuery("SELECT chunkid FROM #__file_system WHERE filename='$this->filename' ORDER BY chunkid");
00072 $chunks = $this->database->loadResultArray();
00073 if ($chunks) foreach ($chunks as $chunkid) {
00074 $this->database->setQuery("SELECT datachunk FROM #__file_system WHERE filename='$this->filename' AND chunkid=$chunkid");
00075 $datachunk = $this->database->loadResult();
00076 if (fwrite ($f, $datachunk)) $result = true;
00077 else {
00078 $result = false;
00079 break;
00080 }
00081 }
00082 fclose($f);
00083 }
00084 if ($result AND $delete) $this->delete();
00085 return $result;
00086 }
00087
00088 public function delete () {
00089 $this->database->doSQL("DELETE FROM #__file_system WHERE filename='$this->filename'");
00090 }
00091
00092 }
00093
00094 ?>