国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) php教程 codeigniter教程之多文件上傳使用示例_PHP教程

codeigniter教程之多文件上傳使用示例_PHP教程

Jul 13, 2016 am 10:39 AM
codeigniter 多文件上傳

復(fù)制代碼 代碼如下:

?/**
? * Multi-Upload
? *
? * Extends CodeIgniters native Upload class to add support for multiple
? * uploads.
? *
? * @package??CodeIgniter
? * @subpackage?Libraries
? * @category?Uploads
? */
??class MY_Upload extends CI_Upload {


???/**
??? * Properties
??? */
??? ?protected $_multi_upload_data???= array();
????protected $_multi_file_name_override?= "";


???/**
??? * Initialize preferences
??? *
??? * @access?public
??? * @param?array
??? * @return?void
??? */
????public function initialize($config = array()){
?????//Upload default settings.
?????$defaults = array(
?????????"max_size"???=> 0,
?????????"max_width"???=> 0,
?????????"max_height"??=> 0,
?????????"max_filename"??=> 0,
?????????"allowed_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_",
?????????"client_name"??=> ""
????????);

?????//Set each configuration.
?????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;
??????}
?????}

?????//Check if file_name was provided.
?????if(!empty($this->file_name)){
??????//Multiple file upload.
??????if(is_array($this->file_name)){
???????//Clear file name override.
???????$this->_file_name_override = "";

???????//Set multiple file name override.
???????$this->_multi_file_name_override = $this->file_name;
??????//Single file upload.
??????} else {
???????//Set file name override.
???????$this->_file_name_override = $this->file_name;

???????//Clear multiple file name override.
???????$this->_multi_file_name_override = "";
??????}
?????}
????}


???/**
??? * File MIME Type
??? *
??? * Detects the (actual) MIME type of the uploaded file, if possible.
??? * The input array is expected to be $_FILES[$field].
??? *
??? * In the case of multiple uploads, a optional second argument may be
??? * passed specifying which array element of the $_FILES[$field] array
??? * elements should be referenced (name, type, tmp_name, etc).
??? *
??? * @access?protected
??? * @param?$file?array
??? * @param?$count?int
??? * @return?void
??? */
????protected function _file_mime_type($file, $count=0){
?????//Mutliple file?
?????if(is_array($file["name"])){
??????$tmp_name = $file["tmp_name"][$count];
??????$type = $file["type"][$count];
?????//Single file.
?????} else {
??????$tmp_name = $file["tmp_name"];
??????$type = $file["type"];
?????}

?????//We'll need this to validate the MIME info string (e.g. text/plain; charset=us-ascii).
?????$regexp = "/^([a-z\-]+\/[a-z0-9\-\.\+]+)(;\s.+)?$/";

?????/* Fileinfo Extension - most reliable method.
????? *
????? * Unfortunately, prior to PHP 5.3 - it's only available as a PECL extension and the
????? * more convenient FILEINFO_MIME_TYPE flag doesn't exist.
????? */
????? ?if(function_exists("finfo_file")){
????? ??$finfo = finfo_open(FILEINFO_MIME);
???????if(is_resource($finfo)){
????????$mime = @finfo_file($finfo, $tmp_name);
????????finfo_close($finfo);

????????/* According to the comments section of the PHP manual page,
???????? * it is possible that this function returns an empty string
???????? * for some files (e.g. if they don't exist in the magic MIME database).
???????? */
???????? ?if(is_string($mime) && preg_match($regexp, $mime, $matches)){
???????? ??$this->file_type = $matches[1];
??????????return;
???????? ?}
???????}
????? ?}

?????/* This is an ugly hack, but UNIX-type systems provide a "native" way to detect the file type,
????? * which is still more secure than depending on the value of $_FILES[$field]['type'], and as it
????? * was reported in issue #750 (https://github.com/EllisLab/CodeIgniter/issues/750) - it's better
????? * than mime_content_type() as well, hence the attempts to try calling the command line with
????? * three different functions.
????? *
????? * Notes:
????? *?- the DIRECTORY_SEPARATOR comparison ensures that we're not on a Windows system
????? *?- many system admins would disable the exec(), shell_exec(), popen() and similar functions
????? *?? due to security concerns, hence the function_exists() checks
????? */
????? ?if(DIRECTORY_SEPARATOR !== "\\"){
????? ??$cmd = "file --brief --mime ".escapeshellarg($tmp_name)." 2>&1";

???????if(function_exists("exec")){
????????/* This might look confusing, as $mime is being populated with all of the output when set in the second parameter.
???????? * However, we only neeed the last line, which is the actual return value of exec(), and as such - it overwrites
???????? * anything that could already be set for $mime previously. This effectively makes the second parameter a dummy
???????? * value, which is only put to allow us to get the return status code.
???????? */
?????????$mime = @exec($cmd, $mime, $return_status);
?????????if($return_status === 0 && is_string($mime) && preg_match($regexp, $mime, $matches)){
??????????$this->file_type = $matches[1];
??????????return;
?????????}
???????}
????? ?}

??????if((bool)@ini_get("safe_mode") === FALSE && function_exists("shell_exec")){
???????$mime = @shell_exec($cmd);
???????if(strlen($mime) > 0){
????????$mime = explode("\n", trim($mime));
????????if(preg_match($regexp, $mime[(count($mime) - 1)], $matches)){
?????????$this->file_type = $matches[1];
?????????return;
????????}
???????}
??????}

??????if(function_exists("popen")){
???????$proc = @popen($cmd, "r");
???????if(is_resource($proc)){
????????$mime = @fread($proc, 512);
????????@pclose($proc);
????????if($mime !== FALSE){
?????????$mime = explode("\n", trim($mime));
?????????if(preg_match($regexp, $mime[(count($mime) - 1)], $matches)){
??????????$this->file_type = $matches[1];
??????????return;
?????????}
????????}
???????}
??????}

??????//Fall back to the deprecated mime_content_type(), if available (still better than $_FILES[$field]["type"])
??????if(function_exists("mime_content_type")){
???????$this->file_type = @mime_content_type($tmp_name);
???????//It's possible that mime_content_type() returns FALSE or an empty string.
???????if(strlen($this->file_type) > 0){
????????return;
???????}
??????}

??????//If all else fails, use $_FILES default mime type.
??????$this->file_type = $type;
????}


???/**
??? * Set Multiple Upload Data
??? *
??? * @access?protected
??? * @return?void
??? */
????protected function set_multi_upload_data(){
?????$this->_multi_upload_data[] = array(
??????"file_name"???=> $this->file_name,
??????"file_type"???=> $this->file_type,
??????"file_path"???=> $this->upload_path,
??????"full_path"???=> $this->upload_path.$this->file_name,
??????"raw_name"???=> str_replace($this->file_ext, "", $this->file_name),
??????"orig_name"???=> $this->orig_name,
??????"client_name"??=> $this->client_name,
??????"file_ext"???=> $this->file_ext,
??????"file_size"???=> $this->file_size,
??????"is_image"???=> $this->is_image(),
??????"image_width"??=> $this->image_width,
??????"image_height"??=> $this->image_height,
??????"image_type"??=> $this->image_type,
??????"image_size_str"?=> $this->image_size_str
?????);
????}


???/**
??? * Get Multiple Upload Data
??? *
??? * @access?public
??? * @return?array
??? */
????public function get_multi_upload_data(){
?????return $this->_multi_upload_data;
????}


???/**
??? * Multile File Upload
??? *
??? * @access?public
??? * @param?string
??? * @return?mixed
??? */
????public function do_multi_upload($field){
?????//Is $_FILES[$field] set? If not, no reason to continue.
?????if(!isset($_FILES[$field])){ return false; }

?????//Is this really a multi upload?
?????if(!is_array($_FILES[$field]["name"])){
??????//Fallback to do_upload method.
??????return $this->do_upload($field);
?????}

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

?????//Every file will have a separate entry in each of the $_FILES associative array elements (name, type, etc).
?????//Loop through $_FILES[$field]["name"] as representative of total number of files. Use count as key in
?????//corresponding elements of the $_FILES[$field] elements.
?????for($i=0; $i??????//Was the file able to be uploaded? If not, determine the reason why.
??????if(!is_uploaded_file($_FILES[$field]["tmp_name"][$i])){
???????//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;
??????}

??????//Set current file data as class variables.
??????$this->file_temp?= $_FILES[$field]["tmp_name"][$i];
??????$this->file_size?= $_FILES[$field]["size"][$i];
??????$this->_file_mime_type($_FILES[$field], $i);
??????$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"][$i]);
??????$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.
??????//Check if a filename was supplied for the current file. Otherwise, use it's given name.
??????if(!empty($this->_multi_file_name_override[$i])){
???????$this->file_name = $this->_prep_filename($this->_multi_file_name_override[$i]);

???????//If no extension was provided in the file_name config item, use the uploaded one.
???????if(strpos($this->_multi_file_name_override[$i], ".") === FALSE){
????????$this->file_name .= $this->file_ext;
???????//An extension was provided, lets have it!
???????} else {
????????$this->file_ext = $this->get_extension($this->_multi_file_name_override[$i]);
???????}

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

??????//Set current file data to multi_file_upload_data.
??????$this->set_multi_upload_data();
?????}

?????//Return all file upload data.
?????return TRUE;
???}
??}

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/733059.htmlTechArticle復(fù)制代碼 代碼如下: ?php if(!defined("BASEPATH")){ exit("No direct script access allowed"); } /** * Multi-Upload * * Extends CodeIgniters native Upload class to add support...
本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
如何在CodeIgniter中實(shí)現(xiàn)自定義中間件 如何在CodeIgniter中實(shí)現(xiàn)自定義中間件 Jul 29, 2023 am 10:53 AM

如何在CodeIgniter中實(shí)現(xiàn)自定義中間件引言:在現(xiàn)代的Web開發(fā)中,中間件在應(yīng)用程序中起著至關(guān)重要的作用。它們可以用來執(zhí)行在請(qǐng)求到達(dá)控制器之前或之后執(zhí)行一些共享的處理邏輯。CodeIgniter作為一個(gè)流行的PHP框架,也支持中間件的使用。本文將介紹如何在CodeIgniter中實(shí)現(xiàn)自定義中間件,并提供一個(gè)簡(jiǎn)單的代碼示例。中間件概述:中間件是一種在請(qǐng)求

CodeIgniter中間件:加速應(yīng)用程序的響應(yīng)速度和頁面渲染 CodeIgniter中間件:加速應(yīng)用程序的響應(yīng)速度和頁面渲染 Jul 28, 2023 pm 06:51 PM

CodeIgniter中間件:加速應(yīng)用程序的響應(yīng)速度和頁面渲染概述:隨著網(wǎng)絡(luò)應(yīng)用程序的復(fù)雜性和交互性不斷增長(zhǎng),開發(fā)人員需要使用更加高效和可擴(kuò)展的解決方案來提高應(yīng)用程序的性能和響應(yīng)速度。CodeIgniter(CI)是一種基于PHP的輕量級(jí)框架,提供了許多有用的功能,其中之一就是中間件。中間件是在請(qǐng)求到達(dá)控制器之前或之后執(zhí)行的一系列任務(wù)。這篇文章將介紹如何使用

在CodeIgniter框架中使用數(shù)據(jù)庫查詢構(gòu)建器(Query Builder)的方法 在CodeIgniter框架中使用數(shù)據(jù)庫查詢構(gòu)建器(Query Builder)的方法 Jul 28, 2023 pm 11:13 PM

在CodeIgniter框架中使用數(shù)據(jù)庫查詢構(gòu)建器(QueryBuilder)的方法引言:CodeIgniter是一個(gè)輕量級(jí)的PHP框架,它提供了許多功能強(qiáng)大的工具和庫,方便開發(fā)人員進(jìn)行Web應(yīng)用程序開發(fā)。其中一個(gè)令人印象深刻的功能是數(shù)據(jù)庫查詢構(gòu)建器(QueryBuilder),它提供了一種簡(jiǎn)潔而強(qiáng)大的方法來構(gòu)建和執(zhí)行數(shù)據(jù)庫查詢語句。本文將介紹如何在Co

PHP開發(fā):使用 CodeIgniter 實(shí)現(xiàn) MVC 模式和 RESTful API PHP開發(fā):使用 CodeIgniter 實(shí)現(xiàn) MVC 模式和 RESTful API Jun 16, 2023 am 08:09 AM

隨著Web應(yīng)用程序的不斷發(fā)展,更加快速和高效地開發(fā)應(yīng)用程序變得非常重要。并且,隨著RESTfulAPI在Web應(yīng)用程序中的廣泛應(yīng)用,對(duì)于開發(fā)人員來說,必須理解如何創(chuàng)建和實(shí)現(xiàn)RESTfulAPI。在本文中,我們將討論如何使用CodeIgniter框架實(shí)現(xiàn)MVC模式和RESTfulAPI。MVC模式簡(jiǎn)介MVC(Model-Vie

如何在HTML表單中允許多個(gè)文件上傳 如何在HTML表單中允許多個(gè)文件上傳 Aug 28, 2023 pm 08:25 PM

Inthisarticle,wewilllearnhowtoallowmultiplefilesuploadsinHTMLforms.我們使用多個(gè)屬性,以允許在HTML表單中進(jìn)行多個(gè)文件上傳。多個(gè)屬性適用于電子郵件和文件輸入類型。Ifyouwanttoallowausertouploadthefiletoyourwebsite,youneedtouseafileuploadbox,alsoknownasafile,selectbox.Thisiscreatedusingthe<in

使用PHP框架CodeIgniter開發(fā)一個(gè)實(shí)時(shí)聊天應(yīng)用,提供便捷的通訊服務(wù) 使用PHP框架CodeIgniter開發(fā)一個(gè)實(shí)時(shí)聊天應(yīng)用,提供便捷的通訊服務(wù) Jun 27, 2023 pm 02:49 PM

隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,即時(shí)通信變得越來越重要,越來越普及。對(duì)于很多企業(yè)而言,實(shí)時(shí)聊天更像是一種通信服務(wù),提供便捷的溝通方式,可以快速有效地解決業(yè)務(wù)方面的問題?;诖耍疚膶⒔榻B如何使用PHP框架CodeIgniter開發(fā)一個(gè)實(shí)時(shí)聊天應(yīng)用。了解CodeIgniter框架CodeIgniter是一個(gè)輕量級(jí)的PHP框架,提供了一系列的簡(jiǎn)便的工具和庫,幫助開發(fā)者快速

php如何使用CodeIgniter5框架? php如何使用CodeIgniter5框架? Jun 01, 2023 am 11:21 AM

CodeIgniter是一個(gè)輕量級(jí)的PHP框架,采用MVC架構(gòu),支持快速開發(fā)和簡(jiǎn)化常見任務(wù)。CodeIgniter5是該框架的最新版本,提供了許多新的特性和改進(jìn)。本文將介紹如何使用CodeIgniter5框架來構(gòu)建一個(gè)簡(jiǎn)單的Web應(yīng)用程序。步驟1:安裝CodeIgniter5下載和安裝CodeIgniter5非常簡(jiǎn)單,只需要遵循以下步驟:下載最新版本

CodeIgniter中間件:提供安全的文件上傳和下載功能 CodeIgniter中間件:提供安全的文件上傳和下載功能 Aug 01, 2023 pm 03:01 PM

CodeIgniter中間件:提供安全的文件上傳和下載功能引言:在Web應(yīng)用程序開發(fā)過程中,文件上傳和下載是非常常見的功能。然而,對(duì)于安全性的考慮,處理文件上傳和下載通常需要額外的安全措施。CodeIgniter是一個(gè)流行的PHP框架,提供了豐富的工具和庫來支持開發(fā)者構(gòu)建安全可靠的Web應(yīng)用程序。本文將介紹如何使用CodeIgniter中間件來實(shí)現(xiàn)安全的文件

See all articles