`
fenhonghai
  • 浏览: 15179 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

php文件上传

    博客分类:
  • PHP
阅读更多
上传界面fileUpLoad.HTML
<form enctype="multipart/form-data" action="dofilePost.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>


处理文件dofilePost.php
<?php
$uploaddir = "./files/";//设置文件保存目录 注意包含‘/’    
$type=array("jpg","gif","bmp","jpeg","png");//设置允许上传文件的类型 
$patch="http://127.0.0.1/cr_downloadphp/upload/files/";//程序所在路径
//获取文件后缀名函数
function fileext($filename)
{
	//该函数返回指定字符在该字符串最后出现的位置后的字符
	return substr(strrchr($filename, '.'), 1);
}
//生成随机文件名函数  ,避免文件名重复,当然也可以使用原来的文件名,或者自定义文件名  
function random($length)
{
	$hash = 'CR-';
	$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
	$max = strlen($chars) - 1;
	mt_srand((double)microtime() * 1000000);
	for($i = 0; $i < $length; $i++)
	{
		$hash .= $chars[mt_rand(0, $max)];
	}
	return $hash;
}

//从表单元素userfile中得到文件名称
$oldname = strtolower(fileext($_FILES['userfile']['name']));
//判断文件类型
if(!in_array($oldname,$type))
{
	//将数组转换为字符串
	$text=implode(",",$type);
	echo "您只能上传以下类型文件: ",$text,"<br>";
}
//生成目标文件的文件名    
else{
	//将字符串转化为数组
	$filename=explode(".",$_FILES['userfile']['name']);
	do
	{
		//文件已经存在时,循环该段代码,产生随机的新的文件名称
		$filename[0]=random(10); //设置随机数长度
		$name=implode(".",$filename);//将数组转化为字符串
		$uploadfile=$uploaddir.$name;//给文件加上路径
	}while(file_exists($uploadfile));//判断文件是否存在

	//将上传的备份文件,移动到指定的目录
	if (move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){
		if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
			//输出图片预览
			echo "<center>您的文件已经上传完毕 上传图片预览: </center><br><center><img src='$uploadfile'></center>";
			echo"<br><center><a href='javascript:history.go(-1)'>继续上传</a></center>";
		}
		else{
			echo "上传失败!";
		}
	}
}
?>


PHP 支持同时上传多个文件并将它们的信息自动以数组的形式组织。要完成这项功能,您需要在 HTML 表单中对文件上传域使用类似于多下拉菜单和复选框的数组名称来提交
<form action="file-upload.php" method="POST" enctype="multipart/form-data">
  Send these files:<br>
  <input name="userfile[]" type="file"><br>
  <input name="userfile[]" type="file"><br>
  <input type="submit" value="Send files">
</form>

$_FILES['userfile']['size'][0] 将包含上传文件的大小,依此类推。

以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为 userfile。名称可随意命名。
$_FILES['userfile']['name'] 客户端机器文件的原名称。
$_FILES['userfile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。
$_FILES['userfile']['size'] 已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error'] 和该文件上传相关的错误代码

文件上传使用到的函数
bool is_uploaded_file ( string filename):

如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE
bool move_uploaded_file ( string filename, string destination):

如果文件合法,则将其移动为由 destination 指定的文件。
如果 filename 不是合法的上传文件,不会出现任何操作,返回 FALSE,
如果目标文件已经存在,将会被覆盖。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics