Login   Register  
PHP Classes
elePHPant
Icontem

File: _class_upload_file.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Fabrizio Parrella  >  bib_uploadfile  >  _class_upload_file.php  >  Download  
File: _class_upload_file.php
Role: Class source
Content type: text/plain
Description: main Class
Class: bib_uploadfile
Process uploaded files of images and other types
Author: By
Last change:
Date: 9 years ago
Size: 10,172 bytes
 

Contents

Class file image Download
<?php
/*
this class will be used for bibivu system to upload files/pictures
to the right location for each module
2005-04-20 - v.1.0
*/

class bib_upload{
    var 
$error            = array();
    var 
$files            = array();
    var 
$file_max_size    1048576;
    var 
$_cfg            = array();

    function 
reset_all(){
        
$this->error['number']    = 0;
        
$this->error['text']    = '';
        
$this->error['fatal']    = false;
        
$this->files            = array();
        
$this->file_new_name    '';       // replace the name body
        
$this->file_overwrite    false;

        
$this->file_max_size    1048576;

        
$this->image_convert    '';       // convert. values :''; 'png'; 'jpeg'; 'gif'

        
$this->image_resize        false;    // resize the image
        
$this->image_x            150;
        
$this->image_y            150;
        
$this->image_ratio        false;
        
$this->image_ratio_no_zoom_in    false;
        
$this->image_ratio_no_zoom_out    false;
    }
    function 
bib_upload($cfg){
        
$this->reset_all();
        
$this->_cfg['id']                = $cfg['id'];
        
$this->_cfg['depth']            = $cfg['depth'];
        
$this->_cfg['folder_site']        = $cfg['folder_site'];
        
$this->_cfg['folder_module']    = $cfg['folder_module'];
    }
    function 
add_file($file){
//        print_r($this->error);
        
if (!$file) {
            
$this->set_error('1000','File upload error. Please try again.',true);
        } else  {
            if(
is_array($file['error'])){
                
//the files passed is an array of posts, I need to parse it
                
$ret false;
                foreach(
$file['error'] AS $key=>$value){
                    
//I need to replace the same structure as the main array
                    
$f1 = array();
                    foreach(
$file AS $kkey=>$vvalue){
                        
$f1[$kkey] = $file[$kkey][$key];
                    }
                    if(
$ret==false){
                        
$ret $this->add_file($f1);
                    }
                }
                return 
$ret;
            } elseif(
$file['error'] === 0){
                if (
$file['name'] == '') {
                    
$this->set_error('1001','File upload error. Please try again.',true);
                } elseif (
$file['size'] > $this->file_max_size ) {
                    
$this->set_error('1002','File too big.',true);
                }
            } else {
                switch(
$file['error']) {
                    case 
0:
                        
// all is OK
                        
break;
                    case 
1:
                        
$this->set_error($file['error']+2000,'File upload error (the uploaded file exceeds the upload_max_filesize directive in php.ini).',false);
                        break;
                    case 
2:
                        
$this->set_error($file['error']+2000,'File upload error (the uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form).',false);
                        break;
                    case 
3:
                        
$this->set_error($file['error']+2000,'File upload error (the uploaded file was only partially uploaded).',false);
                        break;
                    case 
4:
                        
$this->set_error($file['error']+2000,'File upload error (no file was uploaded).',false);
                        break;
                    default:
                        
$this->set_error(2000,'File upload error (unknown error code).',true);
                        break;
                }
                return 
false;
            }
        }
        
//there has been a fatal error
        
if($this->error['fatal']){
            return 
false;
        } else {
            
$this->files[] = $file;
        }
        return 
true;
    }
    function 
new_name($which 0$new_name ''$overwrite false$auto_rename true){
        
//this function will apply to the last file uploaded
        
$cc count($this->files);
        if(
$cc == || empty($this->files)){
            
//there are not files to rename
            
$this->set_error(3001,'There are not files uploaded yet.',false);
        } else {
            
$cc--;
            if(
$which >= && $which<=$cc)    $cc $which;
            
//if new_name is '', I have to create a random name
            
if($new_name == ''){
                
$new_name strtoupper(substr(md5(time()*77+57),0,10));
            }
            
$this->files[$cc]['new_name']        = $new_name;
            
$this->files[$cc]['overwrite']        = $overwrite;
            
$this->files[$cc]['auto_rename']    = $auto_rename;
        }
    }
    
    function 
resize($which 0$new_w=0$new_h=0$ratio false){
        
//resize the image keeping the 
        
$cc count($this->files);
        if(
$cc == || empty($this->files)){
            
//there are not files to rename
            
$this->set_error(3001,'There are not files uploaded yet.',false);
        } else {
            
$cc--;
            if(
$which >= && $which<=$cc)    $cc $which;
            
$this->files[$cc]['new_w']    = $new_w;
            
$this->files[$cc]['new_h']    = $new_h;
            
$this->files[$cc]['ratio']    = $ratio;
        }
    }
    
    function 
is_image($which=0$is_image=true){
        
//resize the image keeping the 
        
$cc count($this->files);
        if(
$cc == || empty($this->files)){
            
//there are not files to rename
            
$this->set_error(3001,'There are not files uploaded yet.',false);
        } else {
            
$cc--;
            if(
$which >= && $which<=$cc)    $cc $which;
            
$this->files[$cc]['is_image']    = $is_image;
        }
    }
    
    function 
process($module_code){
        if(
$this->error['fatal']){
            return 
false;
        }
        if(
$module_code == ''){
            
$this->set_error('3001','Please Pass the module code .',true);
            return 
false;
        } else {
            
$destpath $this->_cfg['depth'].$this->_cfg['folder_site'].$this->_cfg['folder_module'].$module_code;
            
//check if the folder exist, if not, try to create it with chmod=777
            
if(!is_dir($destpath)){
                
$oldumask umask(0);
                
mkdir($destpath,0777);
                
umask($oldumask);
                if(!
is_dir($destpath)){
                    
$this->set_error('3002','Impossible to create the module folder.',true);
                    return 
false;
                }
            } elseif(!
is_writable($destpath)) {
                
$this->set_error('3003','Module folder is not writable.',true);
                return 
false;
            }
            
$destpath .= '/';
            foreach(
$this->files AS $key=>$file){
                if(!isset(
$file['new_name']) || $file['new_name']==''){
                    
$file['new_name'] = $file['name'];
                }
                
$destfile $destpath.$file['new_name'];

                if(isset(
$file['is_image'])){
                    if(isset(
$file['new_w']) && isset($file['new_h'])){
                        
//check if I have to resize the file
                        
$image_hw = @getimagesize($file['tmp_name']);
                        if(isset(
$image_hw) && !empty($image_hw)){
                            
$picwidth    $image_hw[0];
                            
$picheigth    $image_hw[1];
                            if( (
$file['new_w'] < $picwidth)  ||
                                (
$file['new_h'] < $picheigth) ){
                                
//only reduce
                                
if(_NETPBM_PATH!=''){
                                    require_once 
$this->_cfg['depth'].'files_includes/Transform.php';
                                    
$im = new Image_Transform;
                                    
$im->load($file['tmp_name']);
                                    if(
$file['ratio']){
                                        if(
$file['new_w'] <  $picwidth){
                                            
$picheigth    = (int)(($file['new_w']*100/$picwidth)*$picheigth/100);
                                            
$picwidth    $file['new_w'];
                                        }
                                        if(
$file['new_h'] <  $picheigth){
                                            
$picwidth    = (int)(($file['new_h']*100/$picheigth)*$picwidth/100);
                                            
$picheigth    $file['new_h'];
                                        }
                                    } else {
                                        
$picwidth    $file['new_w'];
                                        
$picheigth    $file['new_h'];
                                    }
                                    
$im->resize($picwidth$picheigth);
                                    
$destfile $destfile.'.'.$im->getWebSafeFormat();
                                    
$destfile $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
                                    if(!
$destfile){
                                        
$this->set_error(4003,'Error renaming the file.',false);
                                    } else {
                                        
$im->save($destfile$im->getWebSafeFormat());
                                        
$this->files[$key]['new_name'] = basename($destfile);
                                        
$im->free();
                                    }
                                } else {
                                    
//is not an image or the file is not a compatible pic
                                    
$this->set_error(4002,'NETPBM path not set.',false);
                                }
                            } else {
                                
//not resize is necessary
                                
$destfile $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
                                if(!
$destfile){
                                    
$this->set_error(4003,'Error renaming the file.',false);
                                } else {
                                    
move_uploaded_file($file['tmp_name'],$destfile);
                                }
                            }
                        } else {
                            
//is not an image or the file is not a compatible pic
                            
$this->set_error(4001,'The file '.$file['name'].' is not resizable.',false);
                        }
                    } else {
                        
//the image is not resized
                        
if(_NETPBM_PATH!=''){
                            require_once 
$this->_cfg['depth'].'files_includes/Transform.php';
                            
$im = new Image_Transform;
                            
$im->load($file['tmp_name']);
                            
$destfile $destfile.'.'.$im->getWebSafeFormat();
                            
$destfile $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
                            if(!
$destfile){
                                
$this->set_error(4003,'Error renaming the file.',false);
                            } else {
                                
$im->save($destfile$im->getWebSafeFormat());
                                
$this->files[$key]['new_name'] = basename($destfile);
                                
$im->free();
                            }
                            
$im->save($destfile$im->getWebSafeFormat());
                            
$this->files[$key]['new_name'] = basename($destfile);
                            
$im->free();
                        } else {
                            
$destfile $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
                            if(!
$destfile){
                                
$this->set_error(4003,'Error renaming the file.',false);
                            } else {
                                
move_uploaded_file($file['tmp_name'],$destfile);
                            }
                        }
                    }
                } else {
                    
//not a pic
                    
$destfile $this->_check_filename($destfile,$file['overwrite'],$file['auto_rename']);
                    if(!
$destfile){
                        
$this->set_error(4003,'Error renaming the file.',false);
                    } else {
                        
move_uploaded_file($file['tmp_name'],$destfile);
                    }
                }
                if(
file_exists($file['tmp_name'])){
                    
//cleaning
                    
@unlink($file['tmp_name']);
                }
            }
        }
        
//there has been a fatal error
        
if($this->error['fatal']){
            return 
false;
        } else {
            return 
$this->files;
        }
    }
    function 
_check_filename($name$overwrite$auto_rename){
        if(
$overwrite == false){
            if(
file_exists($name)){
                if(
$auto_rename == true){
                    
ereg('\.([^\.]*$)'$name$ext);
                    
$body substr($name0, (strlen($name) - strlen($ext))-1);
                    
$i 1;
                    while (
file_exists($name)) {
                        
$this->name $body.'_'.$i.'.'.$ext;
                        
$i++;
                    }                     
                } else {
                    return 
false;
                }
            } else {
                
//file do not exist
            
}
        } else {
            
//overwrite the file
        
}
        return 
$name;
    }

    function 
set_error($number$text$fatal false){
        
$this->error['number']    = $number;
        
$this->error['text']    = $text;
        
$this->error['fatal']    = $fatal;
    }
}
?>