第13章 上传文件

Demo1.php

<form enctype="multipart/form-data" action="Demo2.php" method="post">
	<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
	上传文件: <input type="file" name="userfile" />
	<input type="submit" value="上传" />
</form>

Demo2.php

<?php
	//接受上传文件
	//$_FILES;
	//存在,但是空值
	//[userfile][name] 表示上传的文件名
	//[userfile][type] 表示文件类型:例如,jpg 的文件类型为:image/jpeg
	//[userfile][tmp_name]表示上传的文件临时存放的位置 C:\WINDOWS\temp\php28.tmp
	//[userfile][error]表示错误类型,表示没有任何错误。
	//[userfile][size]表示上传文件的大小
	print_r($_FILES);
	echo '<br/>';
	//is_uploaded_file -- 判断文件是否是通过 HTTP POST 上传的
	//通过 HTTP POST 上传后,文件会存放在临时文件夹下
	
	$fileMimes = array('image/jpeg','image/pjpeg','image/gif','image/png','image/x-png');
	//判断类型是否是数组里的一种
	if(is_array($fileMimes)){
		if(!in_array($_FILES['userfile']['type'],$fileMimes)){
			echo "<script>alert('本站只允许 jpg,png,gif 图片');history.back();</script>";
			exit;
		}
	}
	
	//创建一个常量
	define('URL',dirname(__FILE__).'\uploads');
	echo URL;
	
	//判断目录是否存在
	if(!is_dir(URL)){
		mkdir(URL,0777); //最大权限0777,意思是如果没有这个目录,那么就创建
	}
	
	
	define('MAX_SIZE',2000000);
	if($_FILES['userfile']['size'] > MAX_SIZE){
		echo "<script>alert('上传不得超过 2 M');history.back();</script>";
		exit;
	}
	
	//还有两个问题要验证
	
	//第二个问题,只允许 JPG 文件
//	if($_FILES['userfile']['type'] != 'image/jpeg' && $_FILES['userfile']['type'] != 'image/pjpeg'){
//		echo "<script>alert('本站只允许 JPG 图片');history.back();</script>";
//		exit ;
//	}

//	switch ($_FILES['userfile']['type']){
//		case 'image/jpeg'://火狐
//			break;
//		case 'image/pjpeg':
//			break;
//		case 'image/gif':
//			break;
//		case 'image/png'://火狐
//			break;
//		case 'image/x-png'://IE
//			break;
//		default:  echo "<script>alert('本站只允许 jpg,png,gif 图片');history.back();</script>";
//		exit ;
//	}
	
	//第一个问题,如果上传错误,怎么办
	if($_FILES['userfile']['error']>0){
		switch ($_FILES['userfile']['error']){
			case 1:echo "<script>alert('上传文件超过约定值1');history.back();</script>";
			break;
			case 2:echo "<script>alert('上传文件超过约定值2');history.back();</script>";
			break;
			case 3:echo "<script>alert('部分被上传');history.back();</script>";
			break;
			case 4:echo "<script>alert('没有被上传');history.back();</script>";
			break;
		}
		exit;
	}
	
	if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
		//就在这里移动了
		//move_uploaded_file -- 将上传的文件移动到新位置
		//第一个参数,写上临时文件的地址,
		//第二个参数,第二个参数要写上你要存在的地址
		//先去判断这个目录是否存在
		//如果想屏蔽掉警告,直接加上 @
		if(!move_uploaded_file($_FILES['userfile']['tmp_name'],URL.'/'.$_FILES['userfile']['name'])){
			//如果移动失败,就失败
			echo '移动失败';
			exit;
		}
	}else{
		echo "<script>alert('临时文件夹找不到上传的文件');history.back();</script>";
		exit;
	}
	//全部通过就上传成功了
	//必须传一个值给Demo3.php
	//文件上传的地址
	echo "<script>alert('文件上传成功');location.href='Demo3.php?url=".$_FILES['userfile']['name']."';</script>";
?>

Demo3.php

<?php
	$url = $_GET['url'];
	echo "<img src=\"uploads/".$url."\"/>";	
?>

猜你喜欢

转载自onestopweb.iteye.com/blog/2205082