首頁 php教程 php手册 PHP单文件上传原理及上传函数的封装

PHP单文件上传原理及上传函数的封装

Jun 21, 2016 am 08:46 AM
break case fileinfo

<!--?php
//单文件上传函数的封装
//文件上传原理:将客户端的文件上传到服务器端,再将服务器端的临时文件移动到指定目录即可。
//文件的方向:客户端——-->服务器(临时文件)&mdash;&mdash;>指定目录,当文件进入服务器时它就是临时文件了,这时操作中要用临时文件的名称tmp_name。
//在客户端设置上传文件的限制(文件类型和大小)是不安全的,因为客户能通过源代码修改限制,所以在服务端这里设置限制。
//设置编码为UTF-8,以避免中文乱码 
header(&#39;Content-Type:text/html;charset=utf-8&#39;);
//通过$_FILES接收上传文件的信息
$fileInfo = $_FILES[&#39;myFile&#39;];
function uploadFile($fileInfo,$uploadPath=&#39;uploads&#39;,$flag=true,$allowExt=array(&#39;jpeg&#39;,&#39;jpg&#39;,&#39;png&#39;,&#39;gif&#39;),$maxSize = 2097152){
//判断错误号,只有为0或者是UPLOAD_ERR_OK,没有错误发生,上传成功
	if($fileInfo[&#39;error&#39;]>0){
		//注意!错误信息没有5
		switch($fileInfo[&#39;error&#39;]){
			case 1:
				$mes= &#39;上传文件超过了PHP配置文件中upload_max_filesize选项的值&#39;;
				break;
			case 2:
				$mes= &#39;超过了HTML表单MAX_FILE_SIZE限制的大小&#39;;
				break;
			case 3:
				$mes= &#39;文件部分被上传&#39;;
				break;
			case 4:
				$mes= &#39;没有选择上传文件&#39;;
				break;
			case 6:
				$mes= &#39;没有找到临时目录&#39;;
				break;
			case 7:
				$mes= &#39;文件写入失败&#39;;
				break;
			case 8:
				$mes= &#39;上传的文件被PHP扩展程序中断&#39;;
				break;
				
		}	
		exit($mes);
	}
	$ext=pathinfo($fileInfo[&#39;name&#39;],PATHINFO_EXTENSION);
	//$allowExt=array(&#39;jpeg&#39;,&#39;jpg&#39;,&#39;png&#39;,&#39;gif&#39;);
	
	//检测上传文件的类型
	if(in_array($ext,$allowExt)){
		exit(&#39;非法文件类型&#39;);	
	}
	
	//检测上传文的件大小是否符合规范
	//$maxSize = 2097152;//2M
	if($fileInfo[&#39;size&#39;]>$maxSize){
		exit(&#39;上传文件过大&#39;);	
	}
	
	//检测图片是否为真实的图片类型
	//$flag=true;
	if($flag){
		if(!getimagesize($fileInfo[&#39;tmp_name&#39;])){
			exit(&#39;不是真实的图片类型&#39;);	
		}	
	}
	
	//检测是否是通过HTTP POST方式上传上来
	if(!is_uploaded_file($fileInfo[&#39;tmp_name&#39;])){
		exit(&#39;文件不是通过HTTP POST方式上传上来的&#39;);	
	}
	
	//$uploadPath=&#39;uploads&#39;;
	//如果没有这个文件夹,那么就创建一个
	if(!file_exists($uploadPath)){
		mkdir( $uploadPath, 0777, true);
		chmod( $uploadPath, 0777 );
	}
	//新文件名唯一
	$uniName = md5 ( uniqid( microtime(true),true) ).&#39;.&#39;.$ext;
	$destination = $uploadPath.&#39;/&#39;.$uniName;
	//@符号是为了不让客户看到错误信息
	if(! @move_uploaded_file($fileInfo[&#39;tmp_name&#39;], $destination )){
		exit(&#39;文件移动失败&#39;);	
	}
	
	//echo &#39;文件上传成功&#39;;
	//return array(
	//	&#39;newName&#39;=>$destination,
	//	&#39;size&#39;=>$fileInfo[&#39;size&#39;],
	//	&#39;type&#39;=>$fileInfo[&#39;type&#39;]
	//);
	return $destination;
}
?>
登入後複製



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
HMD Skyline 獲得新的顏色選項和官方磁性外殼 HMD Skyline 獲得新的顏色選項和官方磁性外殼 Aug 23, 2024 am 07:04 AM

上個月推出 HMD Skyline(亞馬遜售價 499 美元)時,它有兩種顏色:霓虹粉和扭曲黑。現在,第三種顏色加入了藍色托帕石的行列。 HMD Global 也宣布了 PH 的官方案例

switch case判斷變數 switch case判斷變數 Feb 19, 2024 am 08:04 AM

switchcase判斷變量,需要具體程式碼範例在程式設計中,我們經常需要根據不同的變數值來執行不同的操作。 switchcase語句是一種方便的結構,可以根據變數的值來選擇不同的程式碼區塊來執行。以下是一個具體的程式碼範例,展示如何使用switchcase語句判斷變數的不同取值:#includeintmain(){

怎麼安裝php fileinfo擴充 怎麼安裝php fileinfo擴充 Sep 12, 2021 am 11:36 AM

安裝php fileinfo擴充的方法:1.找到PHP安裝來源目錄;2、解析使用phpize釋放fileinfo模組;3、編譯安裝;4、重啟PHP即可。

聊聊PHP switch語句中不使用break的情況 聊聊PHP switch語句中不使用break的情況 Mar 20, 2023 pm 04:55 PM

在PHP中使用switch語句來進行多個分支的選擇是很常見的,通常在每個分支結束後會使用break語句來退出switch語句。然而,有些情況下我們不想使用break語句,本文將介紹在PHP switch語句中不使用break的情況。

php裡面break的用法是什麼 php裡面break的用法是什麼 Jan 31, 2023 pm 07:33 PM

在php中,break用來跳出目前的語法結構,執行下面的語句;可以在switch、for、while和do while等語句中使用,可以終止循環體的程式碼並立即跳出目前的循環,執行循環之後的代碼。 break語句可以帶一個參數n,表示跳出循環的層數,如果要跳出多重循環的話,可以用n來表示跳出的層數,如果不帶參數預設是跳出本重循環。

Java中的break關鍵字的作用是什麼? Java中的break關鍵字的作用是什麼? Apr 23, 2023 am 10:13 AM

說明1.break的作用是跳出現在的循環塊(for、while、dowhile)或程式塊(switch)。 2.循環塊的作用是跳出現在循環中的循環體。程式區塊中的作用是中斷和下一個case條件的比較。在switch語句中使用break,終止switch語句。當break用於循環時,跳出循環。在其他地方使用break是沒有意義的。實例intsum=0;inti;for(i=1;i

JS循環學習:跳出迴圈語句break和continue JS循環學習:跳出迴圈語句break和continue Aug 03, 2022 pm 07:08 PM

在之前的文章中,我們帶大家學習了JS中的幾種循環控制結構(while和do-while循環、for循環),下面聊聊跳出循環語句break和continue,希望對大家有所幫助!

Go語言break停止語句有什麼用 Go語言break停止語句有什麼用 Jan 18, 2023 pm 03:46 PM

在Go語言中,break停止語句用於循環語句中跳出循環,並開始執行循環之後的語句。 break語句可以結束for、switch和select的程式碼區塊,另外break語句也可以在語句後面加上標籤,表示退出某個標籤對應的程式碼區塊,標籤要求必須定義在對應的for、switch和select的程式碼區塊上。

See all articles