🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #230900

Re: MultiUpload plików o rozszerzeniu bmp (CodeIgniter)

#230900
From: jivanmukta
Date: Thu, 12 Feb 2015 05:12
269 lines
9251 bytes
> Ale gdzie masz ten błąd? W przeglądarce? Wyświetlany przez CI? Jaki
> konkretnie? Z takim opisem problemu nikt nie zgadnie o co chodzi.

W przeglądarce mam:

An Error Was Encountered
Nie powiodło się wgranie obrazków.
Typ pliku który próbujesz wgrać jest niedozwolony.

Wydaje mi si (nie mam debuggowania), że może chodzić o instrukcję z application/libararies/MY_Upload.php:

public function do_multi_upload($field){
...
//Determine error number.
$error = (!isset($_FILES[$field]["error"][$i])) ? 4 : $_FILES[$field]["error"][$i];
//Set error.
switch($error){
//UPLOAD_ERR_INI_SIZE
case 1:
$this->set_error("upload_file_exceeds_limit");
break;
//UPLOAD_ERR_FORM_SIZE
case 2:
$this->set_error("upload_file_exceeds_form_limit");
break;
//UPLOAD_ERR_PARTIAL
case 3:
$this->set_error("upload_file_partial");
break;
//UPLOAD_ERR_NO_FILE
case 4:
$this->set_error("upload_no_file_selected");
break;
//UPLOAD_ERR_NO_TMP_DIR
case 6:
$this->set_error("upload_no_temp_directory");
break;
//UPLOAD_ERR_CANT_WRITE
case 7:
$this->set_error("upload_unable_to_write_file");
break;
//UPLOAD_ERR_EXTENSION
case 8:
$this->set_error("upload_stopped_by_extension");
break;
default:
$this->set_error("upload_no_file_selected");
break;
}
//Return failed upload.
return FALSE;
...

Funkcja ta wywołuje do_upload() z system/libraries/Upload.php.
Właściwość $this->allowed_types jest ustawiana przez wywołanie $this->upload->initialize($init); 
W system/libraries/Upload.php mam:
	/**
	 * Verify that the filetype is allowed
	 *
	 * @return	bool
	 */
	public function is_allowed_filetype($ignore_mime = FALSE)
	{
		if ($this->allowed_types == '*')
		{
			return TRUE;
		}
		if (count($this->allowed_types) == 0 OR ! is_array($this->allowed_types))
		{
			$this->set_error('upload_no_file_types');
			return FALSE;
		}
		$ext = strtolower(ltrim($this->file_ext, '.'));
		if ( ! in_array($ext, $this->allowed_types))
		{
			return FALSE;
		}
		// Images get some additional checks
		$image_types = array('gif', 'jpg', 'jpeg', 'png', 'jpe');
		if (in_array($ext, $image_types))
		{
                        if (getimagesize($this->file_temp) === FALSE)
			{
				return FALSE;
			}
		}
		if ($ignore_mime === TRUE)
		{
			return TRUE;
		}
		$mime = $this->mimes_types($ext);
		if (is_array($mime))
		{
			if (in_array($this->file_type, $mime, TRUE))
			{
				return TRUE;
			}
		}
		elseif ($mime == $this->file_type)
		{
				return TRUE;
		}
		return FALSE;
	}

	public function do_upload($field = 'userfile')
	{
	// Is $_FILES[$field] set? If not, no reason to continue.
		if ( ! isset($_FILES[$field]))
		{
			$this->set_error('upload_no_file_selected');
			return FALSE;
		}
		// Is the upload path valid?
		if ( ! $this->validate_upload_path())
		{
			// errors will already be set by validate_upload_path() so just return FALSE
			return FALSE;
		}
		// Was the file able to be uploaded? If not, determine the reason why.
		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;
		}
		// Set the uploaded data as class variables
		$this->file_temp = $_FILES[$field]['tmp_name'];
		$this->file_size = $_FILES[$field]['size'];
		$this->_file_mime_type($_FILES[$field]);
		$this->file_type = preg_replace("/^(.+?);.*$/", "\\1", $this->file_type);
		$this->file_type = strtolower(trim(stripslashes($this->file_type), '"'));
		$this->file_name = $this->_prep_filename($_FILES[$field]['name']);
		$this->file_ext	 = $this->get_extension($this->file_name);
		$this->client_name = $this->file_name;
		// Is the file type allowed to be uploaded?
		if ( ! $this->is_allowed_filetype())
		{
			$this->set_error('upload_invalid_filetype');
			return FALSE;
		}
		// if we're overriding, let's now make sure the new name and type is allowed
		if ($this->_file_name_override != '')
		{
			$this->file_name = $this->_prep_filename($this->_file_name_override);
			// If no extension was provided in the file_name config item, use the uploaded one
			if (strpos($this->_file_name_override, '.') === FALSE)
			{
				$this->file_name .= $this->file_ext;
			}
			// An extension was provided, lets have it!
			else
			{
				$this->file_ext	 = $this->get_extension($this->_file_name_override);
			}
			if ( ! $this->is_allowed_filetype(TRUE))
			{
				$this->set_error('upload_invalid_filetype');
				return FALSE;
			}
		}
		// Convert the file size to kilobytes
		if ($this->file_size > 0)
		{
			$this->file_size = round($this->file_size/1024, 2);
		}
		// Is the file size within the allowed maximum?
		if ( ! $this->is_allowed_filesize())
		{
			$this->set_error('upload_invalid_filesize');
			return FALSE;
		}
		// Are the image dimensions within the allowed size?
		// Note: This can fail if the server has an open_basdir restriction.
		if ( ! $this->is_allowed_dimensions())
		{
			$this->set_error('upload_invalid_dimensions');
			return FALSE;
		}
		// Sanitize the file name for security
		$this->file_name = $this->clean_file_name($this->file_name);
		// Truncate the file name if it's too long
		if ($this->max_filename > 0)
		{
			$this->file_name = $this->limit_filename_length($this->file_name, $this->max_filename);
		}
		// Remove white spaces in the name
		if ($this->remove_spaces == TRUE)
		{
			$this->file_name = preg_replace("/\s+/", "_", $this->file_name);
		}
		/*
		 * Validate the file name
		 * This function appends an number onto the end of
		 * the file if one with the same name already exists.
		 * If it returns false there was a problem.
		 */
		$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;
			}
		}
		/*
		 * Run the file through the XSS hacking filter
		 * This helps prevent malicious code from being
		 * embedded within a file.  Scripts can easily
		 * be disguised as images or other file types.
		 */
		if ($this->xss_clean)
		{
			if ($this->do_xss_clean() === FALSE)
			{
				$this->set_error('upload_unable_to_write_file');
				return FALSE;
			}
		}
		/*
		 * Move the file to the final destination
		 * To deal with different server configurations
		 * we'll attempt to use copy() first.  If that fails
		 * we'll use move_uploaded_file().  One of the two should
		 * reliably work in most environments
		 */
		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;
			}
		}
		/*
		 * Set the finalized image dimensions
		 * This sets the image width/height (assuming the
		 * file was an image).  We use this information
		 * in the "data" function.
		 */
	$this->set_image_properties($this->upload_path.$this->file_name);
		return TRUE;
	}
Technical Details
Message-ID: <79f7d258-fda6-433d-b087-e9f01a3787c8@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!hl2no14703467igb.0!news-out.google.com!c1ni3qar.1!nntp.google.com!i13no693029qae.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <d62843d0-6bde-498c-8a78-d60cfd12aa29@googlegroups.com> <1emdqr88lgof2$.1b7ihyg8ji1.dlg@40tude.net>

Show Full Headers
Complete Article Headers
X-Received: by 10.50.23.75 with SMTP id k11mr1537423igf.3.1423717973704;        Wed, 11 Feb 2015 21:12:53 -0800 (PST)
X-Received: by 10.140.97.5 with SMTP id l5mr31601qge.4.1423717973566; Wed, 11 Feb 2015 21:12:53 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!hl2no14703467igb.0!news-out.google.com!c1ni3qar.1!nntp.google.com!i13no693029qae.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.php
Date: Wed, 11 Feb 2015 21:12:53 -0800 (PST)
In-Reply-To: <1emdqr88lgof2$.1b7ihyg8ji1.dlg@40tude.net>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=89.73.80.243; posting-account=Fd8BNwoAAACl8PCi6-fI0bkHGOgt6LMa
NNTP-Posting-Host: 89.73.80.243
References: <d62843d0-6bde-498c-8a78-d60cfd12aa29@googlegroups.com> <1emdqr88lgof2$.1b7ihyg8ji1.dlg@40tude.net>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <79f7d258-fda6-433d-b087-e9f01a3787c8@googlegroups.com>
Subject: Re: MultiUpload plików o rozszerzeniu bmp
 (CodeIgniter)
From: jivanmukta@poczta.onet.pl
Injection-Date: Thu, 12 Feb 2015 05:12:53 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit