php_bu
一、上传图片
1、上传图片必须代码“enctype="multipart/form-data”,还必须是post提交
写法:<form action="提交网页地址" method=“post” enctype="multipart/form-data">
2、固定的选择文件按钮
<input type="file" name="uploadFile" id="upload"/>
显示样式:
3、$file = $_FILES['uploadFile']; uploadFile为选择按钮的name=" ";
获得你选择上传图片的信息,是一个二维数组
var_dump($file);输出获得的值,显示如下:
array (size=5) 'name' => string '1.jpg' (length=5) //图片名 'type' => string 'image/jpeg' (length=10) //图片类型 'tmp_name' => string 'E:\Program Files\Apache2.2\wamp\tmp\phpCCE1.tmp' (length=47) //图片虚拟路径 'error' => int 0 //代表上传成功 'size' => int 6542 //代表图片大小
4、将文件上传到服务器的哪里
move_uploaded_file($tmp_name,"img/".$name);
img是建在统一路径下的空文件夹,意思是将上传的图片上传到文件夹img下
二、验证验证码
1、随机生成验证码
<?php session_start(); //打开session $arr = array( //创建一个数组 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x', 'y','z','0','1','2','3','4','5','6','7','8','9' ); $rand = ""; for($i=1;$i<=4; $i++){ $rand .= $arr[rand(0,count($arr)-1)]; } $_SESSION['check_pic'] = $rand; //生成图片 $im = imagecreatetruecolor(100,30); //生成颜色,当第一次调用生成颜色的方法,是生成背景颜色,默认是黑色 //如果想自定义背景颜色,用到imagefill函数 $bg = imagecolorallocate($im,200,200,200); //$aa = imagecolorallocate($im,123,543,100); $ss = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imagefill($im,0,0,$bg); //第二次调用这个方法,是可以生成图片上面的文字或其他样式的颜色 $te = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); $te2 = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); //生成干扰线,就是画线 $posLineX1 = rand(6,30); $posLineX2 = rand(30,60); for($i=0;$i<5;$i++){ $posLinY1=rand(2,10); $posLinY2=rand(11,28); imageline($im,$posLineX1,$posLinY1,$posLineX2,$posLinY2,$te2); $posLineX1 += rand(30,60); $posLineX2 += rand(61,98); } for($i=0;$i<90;$i++){ //随机生成字体颜色 $te3 = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imagesetpixel($im,rand(2,100),rand(2,30),$te3); } //在图片上面生成文字 //imagestring($im,5,rand(3,70),rand(3,15),$rand,$te); $posX = rand(6,45); for($i=0;$i<4;$i++){ $posY = rand(2,15); imagestring($im,rand(2,5),$posX,$posY,substr($rand,$i,1),$te); $posX += rand(8,20); } //要把php当成图片输出,必须给文件一个头申明 ob_clean(); header("Content-type:image/jpeg"); //固定写法,头申明 //最终生成图片 imagejpeg($im); //生成图片格式jpeg,png等都行 ?>
2、验证上面生成的验证码
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> </head> <body> <?php session_start(); if(isset($_POST['check'])){ if($_POST['check'] == $_SESSION['check_pic']){ echo "验证成功"; }else{ echo "验证失败"; } } ?> <form action="check2.php" method="post"> <input type="text" name="check"/> <img src="check1.php" alt="" onclick="refreshImg()" id="chk" style="cursor: pointer"/> <br/> <input type="submit" value="提交"/> </form> <script> function refreshImg(){ ////避免浏览器认为一直访问的同一个页面,所以用随机数传一个值,让它以为访问的是不同页面 var rand = Math.round(Math.random()*10000); //固定写法 var chk = document.getElementById("chk"); chk.src = "check1.php?num="+rand; //赋给num的值是为了让浏览器误以为访问的是不同的页面,才可以一直不停地访问 // chk.src = "check1.php"; } </script> </body> </html>
三、封装函数,方便调用
<?php function test1($str1="",$str2=array()){ //把数组分割成字符串 implode //下个这个方法的意思是:$str2应该是个数组 //然后把这个数组按照逗号来分割组成一个新的字符串 $s1 = implode(",",$str2); // echo $s1; //把字符串分割成数组 explode //这个函数的意思就是:首先$str1是一个字符串,这个字符串是按照一个规格组装出来的 //这个规格就是必须符合前面第一个参数的样式 $s2 = explode("-",$str1); print_r($s2); } //函数的默认值 function test2($db="bbs"){ $conn = mysql_connect(HOST,USER,PWD) or die(mysql_error()); mysql_select_db($db,$conn); mysql_query("set names 'utf8'"); } function test3($str="hello world"){ echo $str; } function formatDateTime($date){ $arr = explode("-",$date); $str = vsprintf("%04d-%02d-%02d",$arr); return $str; } //获取函数全部参数 //获取传过来的所有参数 function test4(){ //获取传过来参数的数量 $num = func_num_args(); //获取所有传入的参数,返回的是一个数组 $arr = func_get_args(); var_dump($arr); } function mysql_ping(){ //获取传入的所有参数的数组 $arr = func_get_args(); //获取第一个参数,在我们这个列子里面,第一个参数其实就是sql语句 $sql = $arr[0]; //传入的sql语句,其实开始是用?替代的变量的位置 //这里需要将变量转化为可以替换格式化字符串的'%s'这样的符号 //替换 $sql = str_replace("?","'%s'",$sql); //array_shift,是将数组最开始的元素移出。返回移出的值,然后数组剩下其余的部分 $values = array_shift($arr); $sql = vsprintf($sql,$arr); echo $sql; } ?>