俺就不說話,找虐,直接上代碼。
貌似偶來兄弟連,已經許久了喲,據說有三個多星期了喲。每天連續戰鬥18個小時以上,哈哈,每天像打了鳮血了一般。每天或許有點累,有點身心疲憊,但一切這都是值得滴,心中有梦想,便是幸福。什麼是幸福,幸福就是貓吃魚狗吃肉,outman打小怪獸。哈哈,來個正兒八經。幸福就是有梦想、有愛的人、有一份不錯的工作。在兄弟連,至少可以得到2/3的幸福喲,那愛的人,兄弟連可就解決不了喲。
表示鳮血在沸騰,哈哈,給大家看看我以前寫的對自己說的話,嘿嘿,表示臉紅了,
<?php
/**
*2012-03-10 13:59
*易鵬程
*驗證碼類
*
*propertise:
* private int $width 圖像寬度
* private int $height 圖像高度
* private int $charNum 字符數
* private string $code 隨機驗證碼
* private resource $image 圖像資源
* private int $charType 字符類型
*
*mothods
* public __construct 對相關屬性進行賦值
* public showCodeImage 顯示圖像,對外的訪問接口
* private createImage 創建圖像資源
* private insertText 添加文本
* private insertDistrub 添加幹擾元素
* private mStrlen 獲取字符串長度,
* private mSubstr 截取字符串
* private getCode 返回驗證碼字串
* private output 向瀏覽器輸出
*/
class Valicode{
private $width; //圖像寬
private $height; //圖像高
private $charNum; //字符數
private $code; //隨機驗證碼
private $image; //圖像資源
private $charType; //字符類型 0為數字字母混合 1為大寫字母 2為小寫字母 3為純數字 4為中文 default為數字字母混合
function __construct($width,$height,$charNum = 4,$charType = 4){
$this->width = $width;
$this->height = $height;
$this->charNum = $charNum;
$this->charType = $charType;
$this->code = $this->createCode($this->charType); //創建驗證碼字串
}
/**
*顯示圖像
*相關程序執行
*/
function showCodeImage(){
$this->createImage();
$this->insertText();
$this->insertDistrub();
$this->output();
}
/**
*創建圖像資源
*對圖像邊框、背景進行填充
*/
function createImage(){
$this->image = imagecreatetruecolor($this->width,$this->height);
$borColor = imagecolorallocate($this->image,152,72,0);
$bgColor = imagecolorallocate($this->image,rand(155,255),rand(155,255),rand(155,255));
imagefilledrectangle($this->image,0,0,$this->width,$this->height,$bgColor);
imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$borColor);
}
/**
*給圖像資源添加字符
*/
private function insertText(){
for($i = 0 ; $i< $this->charNum ;$i++){
$x = ($this->width/$this->charNum)*$i + 10;
$textColor = imagecolorallocate($this->image,rand(0,155),rand(0,155),rand(0,155));
if($this->charType == 4){
$chineseChar = $this->msubstr($this->code,$i,1,'utf-8');
imagettftext($this->image,16,rand(40,0),$x,rand(20,$this->height-10),$textColor,'simkai.ttf',$chineseChar);
}else{
imagettftext($this->image,16,rand(40,0),$x,rand(20,$this->height-15),$textColor,'simkai.ttf',$this->code[$i]);
}
}
}
/**
[email=*@return]*@return[/email] string 返回驗證碼字串
*/
public function getCode(){
return $this->code;
}
/**
*創建隨機驗證碼
[email=*@param]*@param[/email] integer $type 驗證碼字符類型
[email=*@return]*@return[/email] String $return 返回創建的字符串
*/
private function createCode($type){
$uppercase = range('A','Z');
$lowercase = range('a','z');
$number = range(0,9);
$str=" 天地玄黄宇宙洪荒日月盈昃辰宿列张寒来暑往秋收冬藏闰馀成岁律吕调阳云腾致雨露结为霜金生丽水玉出昆冈剑号巨阙珠称夜光果珍李柰菜重芥姜海咸河淡鳞潜羽翔龙师火帝鸟官人皇始制文字乃服衣裳推位让国有虞陶唐吊民伐罪周发殷汤坐朝问道垂拱平章爱育黎首臣伏戎羌遐迩一体率宾归王鸣凤在竹白驹食场化被草木赖及万方盖此身发四大五常恭惟鞠养岂敢毁伤女慕贞洁男效才良知过必改得能莫忘罔谈彼短靡恃己长信使可复器欲难量墨悲丝染诗赞羔羊景行维贤克念作圣德建名立形端表正空谷传声虚堂习听祸因恶积福缘善庆尺璧非宝寸阴是竞资父事君曰严与敬孝当竭力忠则尽命临深履薄夙兴温凊似兰斯馨如松之盛川流不息渊澄取映容止若思言辞安定笃初诚美慎终宜令荣业所基籍甚无竟学优登仕摄职从政存以甘棠去而益咏乐殊贵贱礼别尊卑上和下睦夫唱妇随外受傅训入奉母仪诸姑伯叔犹子比儿孔怀兄弟同气连枝交友投分切磨箴规仁慈隐恻造次弗离节义廉退颠沛匪亏性静情逸心动神疲守真志满逐物意移坚持雅操好爵自縻都邑华夏东西二京背邙面洛浮渭据泾宫殿盘郁楼观飞惊图写禽兽画彩仙灵丙舍傍启甲帐对楹肆筵设席鼓瑟吹笙升阶纳陛弁转疑星右通广内左达承明既集坟典亦聚群英杜稿钟隶漆书壁经府罗将相路侠槐卿户封八县家给千兵高冠陪辇驱毂振缨世禄侈富车驾肥轻策功茂实勒碑刻铭磻溪伊尹佐时阿衡奄宅曲阜微旦孰营桓公匡合济弱扶倾绮回汉惠说感武丁俊乂密勿多士寔宁晋楚更霸赵魏困横假途灭虢践土会盟何遵约法韩弊烦刑起翦颇牧用军最精宣威沙漠驰誉丹青九州禹迹百郡秦并岳宗泰岱禅主云亭雁门紫塞鸡田赤城昆池碣石钜野洞庭旷远绵邈岩岫杳冥治本于农务兹稼穑俶载南亩我艺黍稷税熟贡新劝赏黜陟孟轲敦素史鱼秉直庶几中庸劳谦谨敕聆音察理鉴貌辨色贻厥嘉猷勉其祗植省躬讥诫宠增抗极殆辱近耻林皋幸即两疏见机解组谁逼索居闲处沉默寂寥求古寻论散虑逍遥欣奏累遣戚谢欢招渠荷的历园莽抽条枇杷晚翠梧桐蚤凋陈根委翳落叶飘摇游鹍独运凌摩绛霄耽读玩市寓目囊箱易輶攸畏属耳垣墙具膳餐饭适口充肠饱饫烹宰饥厌糟糠亲戚故旧老少异粮妾御绩纺侍巾帷房纨扇圆絜银烛炜煌昼眠夕寐蓝笋象床弦歌酒宴接杯举觞矫手顿足悦豫且康嫡后嗣续祭祀烝尝稽颡再拜悚惧恐惶笺牒简要顾答审详骸垢想浴执热愿凉驴骡犊特骇跃超骧诛斩贼盗捕获叛亡布射僚丸嵇琴阮啸恬笔伦纸钧巧任钓释纷利俗竝皆佳妙毛施淑姿工颦妍笑年矢每催曦晖朗曜璇玑悬斡晦魄环照指薪修祜永绥吉劭矩步引领俯仰廊庙束带矜庄徘徊瞻眺孤陋寡闻愚蒙等诮谓语助者焉哉乎也"; $return = '';
switch($type){
//默認字母數字混合型
case 0 :
for($i = 0 ;$i < $this->charNum ; $i++){
$rand = rand(0,2);
switch($rand){
case 0 :
shuffle($uppercase);
$return.= array_pop($uppercase);
break;
case 1 :
shuffle($lowercase);
$return.= array_pop($lowercase);
break;
case 2 :
shuffle($number);
$return.= array_pop($number);
break;
}
}
break;
//大寫字母型
case 1 :
for($i = 0 ;$i < $this->charNum ; $i++){
shuffle($uppercase);
$return.= array_pop($uppercase);
}
break;
//小寫字母型
case 2 :
for($i = 0 ;$i < $this->charNum ; $i++){
shuffle($lowercase);
$return.= array_pop($lowercase);
}
break;
//數字型
case 3 :
for($i = 0 ;$i < $this->charNum ; $i++){
shuffle($number);
$return.= array_pop($number);
}
break;
//中文類型
case 4:
$strlen = $this->mstrlen($str,'utf-8');
for($i = 0;$i < $this->charNum ; $i++){
$randC = rand(0,$strlen-1);
$return.= $this->msubstr($str,$randC,1,'utf-8');
}
break;
//親,没有找到想要的類型喲,還是給個混合類型
default:
for($i = 0 ;$i < $this->charNum ; $i++){
$rand = rand(0,2);
switch($rand){
case 0 :
shuffle($uppercase);
$return.= array_pop($uppercase);
break;
case 1 :
shuffle($lowercase);
$return.= array_pop($lowercase);
break;
case 2 :
shuffle($number);
$return.= array_pop($number);
break;
}
}
}
return $return ;
}
/*
*添加圖像幹擾元素
*imagesetpixel 給圖像資源添加像素點
*imagearc 給圖像資源添加弧線
*/
private function insertDistrub(){
for($i = 0 ;$i< 150 ;$i++){
$distrubColor = imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($this->image,rand(1,100),rand(1,50),$distrubColor);
}
$start = rand(-180,180);
$end = rand(-90,90);
for($i = 0 ;$i < 5 ; $i++){
imagearc($this->image,$this->width/2,$this->height/2,$this->width*0.8+$i,$this->height/6+$i,$start,$end+$i,$distrubColor);
}
}
/*
*根據系統支持的圖像格式進行瀏覽器輸出
*/
function output(){
//位運算 讓位與
if(imagetypes() & IMG_JPEG){
header('Content-Type:image/jpeg');
imagejpeg($this->image);
}elseif(imagetypes() & IMG_GIF){
header('Content-Type:image/gif');
imagegif($this->image);
}elseif(imagetypes() & IMG_PNG){
header('Content-Type:image/png');
imagepng($this->image);
}elseif(imagetypes() & IMG_WBMP){
header('Content-Type:image/wbmp');
imagewbmp($this->image);
}else{
die('對不起,没有您想要的類型');
}
}
/**
*析構函數進行銷毁圖像資源
*/
function __destruct(){
imagedestroy($this->image);
}
/*
*主要用於對中文計算長度,utf-8占3個字節,gb2312兩個字節
[email=*@param]*@param[/email] String $str 字符串
[email=*@param]*@param[/email] String $charset = 'utf-8' 默認為utf-8
[email=*@return]*@return[/email] int $num 字符串長度
*/
private function mstrlen($str,$charset="utf-8"){
if(function_exists("mb_strlen")){
return mb_strlen($str,$charset);
}elseif(function_exists('iconv_strlen')) {
return iconv_strlen($str,$charset);
}else{
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
$num = count($match);
return $num;
}
}
/**
*主要用於中文字符串截取
[email=*@param]*@param[/email] String $str 需要進行截取的字符串
[email=*@param]*@param[/email] integer $start=0 偏移量 從$start開始進行截取,默認從0開始
[email=*@param]*@param[/email] integer $length 截取長度,
[email=*@param]*@param[/email] String $charset='utf-8' 字符串類型,默認為utf-8
[email=*@return]*@return[/email] String $slice 返回截取的字符串
*/
private function msubstr($str, $start=0, $length, $charset="utf-8"){
if(function_exists("mb_substr")){
return mb_substr($str, $start, $length, $charset);
}elseif(function_exists('iconv_substr')) {
return iconv_substr($str,$start,$length,$charset);
}else{
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);//如果字符串中含有符合以上ACS11码的字符,则添加到数组$match中
$slice = join("",array_slice($match[0], $start, $length));//array_slice截取数组片段,利用join合并成字符窜
return $slice;
}
}
}
?>
<?php
header('Content-Type:text/html;charset=UTF-8');if(isset($_POST['sbt_form']) && (!empty($_FILES['fle_form']))){ $file = $_FILES['fle_form']; //上传文件表单
$uploadDir = 'upload'; //上传文件目录
$chineseChar = array('一','二','三','四'); //用户交互时显示中文
$ext = array(); //保存已上传的后缀名
$ident = 0; //累积成功转移文件数量的标识符
$allowType = array('txt','jpeg','jpg','png','gif','html'); //允许上传类型
$tmp_file = array(); //用于临时存储上传的文件名,以便在一个文件出错后,将这次所传的所有文件删除。
//定义错误级别,上传文件时,如何出现这些错误结束程序
$error = array(1,2,3);
//文件上传错误与指定的级别求交集,如何有一个不对,则结束程序
if(array_intersect($error,$file['error'])){
die('上传文件出错');
}
//获取文件的后缀名
function getExt($file){
return array_pop(explode('.',$file));
}
//如果有文件,则获取文件后缀名,如果没有,则不保存
for($i = 0 ;$i<count($file['name']);$i++){
if(!empty($file['name'][$i])){
$ext[$i] = getExt($file['name'][$i]);
}
}
//获取的后缀名如何与指定的类型存在不一样,则结束程序
if(array_diff($ext,$allowType)){
die('对不起,文件格式不正确');
}
//通过有多少个后缀名进行上传移动,以减少服务器移动开销
foreach($ext as $k => $v){
//产生一个唯一的数,用做文件名,以免重复
$name = uniqid();
//文件名
$filename = $uploadDir.'/'.$name.rand(10,20).'.'.$v;
//添加临时文件
$tmp_file[] = $filename;
//验证是否是上传文件
if(is_uploaded_file($file['tmp_name'][$k])){
//移动文件
if(move_uploaded_file($file['tmp_name'][$k],$filename)){
//与用户进行交互
echo '第'.$chineseChar[$ident].'个文件上传成功<br />';
$ident++; //标识自加
}
}
}
//这条有点冗余安全,以防止特殊情况发生
if(count($ext) != $ident ){
//删除掉已经上传成功的文件
foreach($tmp_file as $value){
//判断文件是否存在,存在即删除,如果不存在
if(file_exists($value)){
//这里会出现一个权限问题,是否具有对文件删除的权限,没有写
unlink($value); //删除文件
}
}
die('<b style="color:red">对不起,此次上传存在导常');
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type:text/html;charset=UTF-8" />
<title>多文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="fle_form[]" />
<input type="file" name="fle_form[]" />
<input type="file" name="fle_form[]" />
<input type="submit" name="sbt_form" value="提交" />
</form>
</body>
</html>
原文地址:http://bbs.lampbrother.net/read-htm-tid-116891.html
阅读(70) | 评论(0) | 转发(0) |
上一篇:忘记过去,把握现在,我能行---------猛蛇战队
下一篇:初来兄弟连所感
- 通讯录助手市场大战 触宝助手...
- linux内核的一些预定义...
- 从支付宝全线放弃线下POS业务...
- 石家庄月嫂工资八九千 行业竞...
- 教你三招清洁家里的木地板...
- 毕业五年(续)
- 毕业五年
- 职业生涯规划
- 中国软件开发工程师之痛...
- 闲置书处理!
- 大家都是用什么来管理hadoop集...
- 网站被人挂了吗,添加了些程序...
- Nginx如何保证不走宕机的那个...
- 大家谈谈MYSQL客户端和服务器...
- 以下代码运行后为何会输出5?...
俺就不說話,找虐,直接上代碼。相关推荐
- 出现这些情况,裸辞不是找虐,是解脱!
众所周知,"裸辞"和"骑驴找马"是职场人在跳槽时最常用的两种方式.大家是否想过,当你自己想要跳槽时,究竟会选用这两种方式中的哪一种呢?根据前程无忧"2 ...
- 談JS面向對象【靜態與非靜態類】
雖然我研究過C++,有點C++面向對象的思想,但是其實面向對象僅僅是一種方法而已.使用JavaScript面向對象完全出於偶然,因為大部分時間我都是在無圖形界面的環境下工作,有時候就算是介入了web客 ...
- java求解立方根_java 利用牛頓迭代法求平方根和立方根,不使用Math類
最近遇到一個題目,就是不使用Math方法去求解一個數的立方根和平方根,搜索了好多,現在記錄下自己掌握的方法. 首先,在編碼之前,我們得熟悉 什么是牛頓迭代法.下面我為大家找了兩處鏈接.大家可以去看一下 ...
- 談話的力量:談話技巧助你成功
談話的力量:談話技巧助你成功 多數人誮為,一些人天生就有說話的天賦,而另一些人則沒有.事實上,乲不存在說話的天賦這一說.善於交談的人只不過是懂得一些簡單的技巧而已,而這些技巧是任何人都可以寃會的. 閱 ...
- 開口說英語─生活英語 1000句
[初 級] 生活英語 1-100句 1. I see. 我明白了. 2. I quit! 我不幹了! 3. Let go! 放手! 4. Me too. 我也是. 5. My god! 天哪! 6. ...
- 北电PBX资料_LD 11數位電話機設定
LD 11數位電話機設定 程式提示 輸入指令符號 說 明 備 註 REQ: NEW 增加新數位電話機資料 CHG 修改數位電話機資料 MOV 移動數位電話機資料 OUT 取消數位電話機資料 CPY x ...
- cppan 命令_逐步解說:在命令列上編譯原生 C++ 程式
逐步解說:在命令列上編譯原生 C++ 程式Walkthrough: Compiling a Native C++ Program on the Command Line 04/02/2020 本文內容 ...
- 有没有英语语音测试软件,没有雅思的高分女朋友虐你英语,就善用手机的app录音自测练习...
很多人学了很多年英语,单词也认识不少,听力也不错,甚至已经可以脱离字幕看英文电影和电视剧了,但一到张口说英语就不行了,这种情况更多是对自己的英语发音不自信. 耳朵的输入足够多了,反而实践阶段少了甚至没 ...
- 苦逼在校大学生,二本计算机专业,暑假找Java实习没人要,未来好迷茫啊
憨憨专业 本人普通二本,专业是信息与计算科学这个天坑的专业(以为是计算机其实是统计+数学+大数据+一丢丢计算机的大杂烩),想必也有和我一样想学计算机而误入这个专业的同学,呜呜~~羡慕科班的,计算机四大 ...
最新文章
- php实现上传文件功能,简单实现php上传文件功能
- C语言与C++的区别,从7个角度来区分C语言与C++
- ATcoder-[AGC048B]Bracket Score【结论,贪心】
- 各种搜索算法比较--2015年7月26日16:42:45V1.0版
- 重绘(redraw或repaint),重排(reflow)
- GO语言零基础从入门到精通WEB编程名库讲解全套视频教程
- 一款软件测试脚本生成工具
- Windows Server2019 安装教程
- 【大屏可视化】大屏适配公式
- 2016年末总结--感谢你们的存在
- linux两个邮件服务,Linux系列-Red Hat5平台下的Postfix邮件服务搭建(二)
- jquery 报错提示Uncaught TypeError: $ is not a function
- 路由器什么牌子好?游戏宅强推
- 博士在读,在家无法科研的你,在忙些什么?
- 今年计算机考研又炸了?!
- 在sh_goods表中查询评分小于4的商品的不同分类id。
- 惠普电脑用GHOST XP安装系统设置
- INT 21H中断大全
- 简单的签到代码_Python自动签到
- 华为od统一考试B卷【最少面试官数】Python 实现
热门文章
- php批量裁剪图片,怎么批量裁剪图片 按照一定的比例快速裁剪多张照片的方法,自定义裁剪图片大小...
- Linux 2.6内核配置说明(7----Bus options (PCI, PCMCIA, EISA, MCA, ISA)总线选项)
- 最合理化的中小型企业桌面虚拟化解决方案—Infortrend GSe Pro 100
- 联盟广告平台架构及实践
- 博通Broadcom SDK源码学习与开发9——Interface接口管理
- iphone13配什么蓝牙耳机最好?最适合苹果手机的蓝牙耳机推荐
- 自己写 Netfilter 匹配器
- CHIL-ORACLE-修改
- PX4-AutoPilot教程--搭建并运行第一个应用程序
- 【cocos2d-x 大型ARPG手游研发2----精灵的八面玲珑】