Files
cm-web-legacy/application/libraries/ImageUpload.php
2020-06-10 06:19:03 +09:00

225 lines
5.8 KiB
PHP
Executable File

<?php
class ImageUpload extends CI_Upload {
// declare disallowed types variable
var $disallowed_types = '';
// add in the 'disallowed_types' default during initialization
function initialize($config = array()) {
$defaults = array(
'max_size' => 0,
'max_width' => 0,
'max_height' => 0,
'max_filename' => 0,
'allowed_types' => "",
'disallowed_types' => "",
'file_temp' => "",
'file_name' => "",
'orig_name' => "",
'file_type' => "",
'file_size' => "",
'file_ext' => "",
'upload_path' => "",
'overwrite' => FALSE,
'encrypt_name' => FALSE,
'is_image' => FALSE,
'image_width' => '',
'image_height' => '',
'image_type' => '',
'image_size_str' => '',
'error_msg' => array(),
'mimes' => array(),
'remove_spaces' => TRUE,
'xss_clean' => FALSE,
'temp_prefix' => "temp_file_"
);
foreach ($defaults as $key => $val) {
if (isset($config[$key])) {
$method = 'set_'.$key;
if (method_exists($this, $method)) {
$this->$method($config[$key]);
}
else {
$this->$key = $config[$key];
}
}
else {
$this->$key = $val;
}
}
}
// set disallowed filetypes
function set_disallowed_types($types) {
$this->disallowed_types = explode('|', $types);
}
// adapted to not require allowed_types and to check for disallowed types if it exists
function is_allowed_filetype() {
// if allowed file type list is not defined
if (count($this->allowed_types) == 0 OR ! is_array($this->allowed_types)) {
// if disallowed file type list is not defined
if (count($this->disallowed_types) == 0 OR ! is_array($this->disallowed_types))
return TRUE;
// check for disallowed file types and return
// negated because is_disallowed_filetype returns opposite result as this function
return ! $this->is_disallowed_filetype();
}
// proceed as usual with allowed file type list check
return parent::is_allowed_filetype();
}
// check for disallowed file types
function is_disallowed_filetype() {
// no file types provided
if (count($this->disallowed_types) == 0 OR ! is_array($this->disallowed_types))
return FALSE;
// search through disallowed for this file type
foreach ($this->disallowed_types as $val) {
$mime = $this->mimes_types(strtolower($val));
if (is_array($mime)) {
if (in_array($this->file_type, $mime, TRUE)) {
return TRUE;
}
}
else {
if ($mime == $this->file_type) {
return TRUE;
}
}
}
return FALSE;
}
function do_upload($field = 'userfile', $new_name='') {
echo "aa";
exit();
if ( ! isset($_FILES[$field])) {
$this->set_error('upload_no_file_selected');
return FALSE;
}
if ( ! $this->validate_upload_path()) {
return FALSE;
}
if ( ! is_uploaded_file($_FILES[$field]['tmp_name'])) {
$error = ( ! isset($_FILES[$field]['error'])) ? 4 : $_FILES[$field]['error'];
switch($error) {
case 1: // UPLOAD_ERR_INI_SIZE
$this->set_error('upload_file_exceeds_limit');
break;
case 2: // UPLOAD_ERR_FORM_SIZE
$this->set_error('upload_file_exceeds_form_limit');
break;
case 3: // UPLOAD_ERR_PARTIAL
$this->set_error('upload_file_partial');
break;
case 4: // UPLOAD_ERR_NO_FILE
$this->set_error('upload_no_file_selected');
break;
case 6: // UPLOAD_ERR_NO_TMP_DIR
$this->set_error('upload_no_temp_directory');
break;
case 7: // UPLOAD_ERR_CANT_WRITE
$this->set_error('upload_unable_to_write_file');
break;
case 8: // UPLOAD_ERR_EXTENSION
$this->set_error('upload_stopped_by_extension');
break;
default :
$this->set_error('upload_no_file_selected');
break;
}
return FALSE;
}
$this->file_temp = $_FILES[$field]['tmp_name'];
$this->file_size = $_FILES[$field]['size'];
$this->file_type = preg_replace("/^(.+?);.*$/", "\\1", $_FILES[$field]['type']);
$this->file_type = strtolower($this->file_type);
$this->file_ext = $this->get_extension($_FILES[$field]['name']);
// check if a name has been specified, if so set it
if ($new_name != '') {
$this->file_name = $this->_prep_filename($new_name . $this->file_ext);
}
else {
$this->file_name = $this->_prep_filename($_FILES[$field]['name']);
}
if ($this->file_size > 0) {
$this->file_size = round($this->file_size/1024, 2);
}
if ( ! $this->is_allowed_filetype()) {
$this->set_error('upload_invalid_filetype');
return FALSE;
}
if ( ! $this->is_allowed_filesize()) {
$this->set_error('upload_invalid_filesize');
return FALSE;
}
if ( ! $this->is_allowed_dimensions()) {
$this->set_error('upload_invalid_dimensions');
return FALSE;
}
$this->file_name = $this->clean_file_name($this->file_name);
if ($this->max_filename > 0) {
$this->file_name = $this->limit_filename_length($this->file_name, $this->max_filename);
}
if ($this->remove_spaces == TRUE) {
$this->file_name = preg_replace("/\s+/", "_", $this->file_name);
}
$this->orig_name = $this->file_name;
if ($this->overwrite == FALSE) {
$this->file_name = $this->set_filename($this->upload_path, $this->file_name);
if ($this->file_name === FALSE)
{
return FALSE;
}
}
if ( ! @copy($this->file_temp, $this->upload_path.$this->file_name)) {
if ( ! @move_uploaded_file($this->file_temp, $this->upload_path.$this->file_name))
{
$this->set_error('upload_destination_error');
return FALSE;
}
}
if ($this->xss_clean == TRUE) {
$this->do_xss_clean();
}
$this->set_image_properties($this->upload_path.$this->file_name);
return TRUE;
}
}