PHP Classes
Icontem

File: _class_upload_file.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 Fabrizio Parrella  >  bib_uploadfile  >  _class_upload_file.php  
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
 

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;
    }
}
?>

 
  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