2023年7月3日发(作者:)
⼀些php功能函数=========php输出的字符串编码和header头信息声明的编码不⼀致时输出乱码=========
下⾯这个函数就是实现这样功能的,它⽆需要知道传过来的字符串是GBK编码还是UTF8编码。代码如下:function getSafeStr($str){ $s1 = iconv('utf-8','gbk',$str); $s0 = iconv('gbk','utf-8',$s1); if($s0 == $str){ return $s1; }else{ return $str; }}==========⼀个判断字符串编码的函数=========function getcode($str) { $s1 = iconv('utf-8','gbk',$str); $s0 = iconv('gbk','utf-8',$s1); if($s0 == $str){ return 'utf-8'; }else{ return 'gbk'; } }===========php 存数组到⽂件============if(isset($_POST['sub'])){$cfg = array(‘contact’=>$_POST['contact']); //把数据存⼊数组file_put_contents(‘./data/’,serialize($cfg));//把数组序列化之后,写到⾥,$this->redirect('other/contact');//跳转}else{$fp = fopen('./data/','r');//读$cf = unserialize(fread($fp,filesize('./data/')));//反序列化,并赋值$this->assign('cfg',$cf);//送到前台模板$this->display('other/contact');}=======thinkphp 3.2.3 使⽤模型单独传⼊连接参数连接别的数据库=========
模型select(); var_dump($aa); }==============**Thinkphp 验证码**================= *⼀、实例化⽣成验证码的类(该⽅法放到IndexController⾥⾯便于访问)*[php] view plaincopy/****验证码⽣成*/public function verify_c(){$Verify=newThinkVerify();$Verify->fontSize=18;$Verify->length=4;$Verify->useNoise=false;$Verify->codeSet='';$Verify->imageW=130;$Verify->imageH=50;//$Verify->expire=600;$Verify->entry();}⼆、前台需要⽣成验证码的图⽚src属性指向[html] view plaincopy
三、写完上⾯的后,页⾯初始化的验证码就可以出现了,下⾯要写的就是点击验证码图⽚后,刷新出新的验证码图⽚(通过jquery修改图⽚的src属性来完成,请求的处理函数⼀样,只是在请求后加⼀个随机数,区别上⼀张图⽚的请求)[javascript] view plaincopy//验证码⽣成var captcha_img=$('#captcha-container').find('img')var verifyimg=captcha_("src");captcha_('title','点击刷新');captcha_(function(){ if(f(' ')>0){ $(this).attr("src",verifyimg+'&random='+());}else{$(this).attr("src",e(/.*$/,'')+''+());}});四、校验验证码输⼊是否正确a.在common⽬录下的⾥加⼊全局函数[php] view plaincopy/***验证码检查*/function check_verify($code,$id=""){$verify=newThinkVerify();return$verify->check($code,$id);}b.在表单提交的controller对应的处理⽅法⾥添加检查代码[php] view plaincopy//检查验证码$verify=I('','');if(!check_verify($verify)){$this->error("亲,验证码输错了哦!",$this->site_url,9);}到此tp3.2验证码的使⽤就可以了。=======================================⽂件上传====================================class UploaderController extends XXXX_Controller { public function index() { $files = array(); $success = 0; //⽤户统计有多少张图⽚上传成功了 foreach ($_FILES as $item) { $index = count($files); $files[$index]['srcName'] = $item['name']; //上传图⽚的原名字 $files[$index]['error'] = $item['error']; //和该⽂件上传相关的错误代码 $files[$index]['size'] = $item['size']; //已上传⽂件的⼤⼩,单位为字节 $files[$index]['type'] = $item['type']; //⽂件的 MIME 类型,需要浏览器提供该信息的⽀持,如"image/gif" $files[$index]['success'] = false; //这个⽤于标志该图⽚是否上传成功 $files[$index]['path'] = ''; //存图⽚路径 // 接收过程有没有错误 if($item['error'] != 0) continue; //判断图⽚能不能上传 if(!is_uploaded_file($item['tmp_name'])) { $files[$index]['error'] = 8000; continue; } //扩展名 $extension = ''; if(strcmp($item['type'], 'image/jpeg') == 0) { $extension = '.jpg'; } else if(strcmp($item['type'], 'image/png') == 0) { $extension = '.png'; } else if(strcmp($item['type'], 'image/gif') == 0) { $extension = '.gif'; } else { //如果type不是以上三者,我们就从图⽚原名称⾥⾯去截取判断去取得(处于严谨性)
$substr = strrchr($item['name'], '.'); if(FALSE == $substr) { $files[$index]['error'] = 8002; continue; continue; } //取得元名字的扩展名后,再通过扩展名去给type赋上对应的值 if(strcasecmp($substr, '.jpg') == 0 || strcasecmp($substr, '.jpeg') == 0 || strcasecmp($substr, '.jfif') == 0 || strcasecmp($substr, '.jpe') == 0 $files[$index]['type'] = 'image/jpeg'; } else if(strcasecmp($substr, '.png') == 0) { $files[$index]['type'] = 'image/png'; } else if(strcasecmp($substr, '.gif') == 0) { $files[$index]['type'] = 'image/gif'; } else { $files[$index]['error'] = 8003; continue; } $extension = $substr; } //对临时⽂件名加密,⽤于后⾯⽣成复杂的新⽂件名 $md5 = md5_file($item['tmp_name']); //取得图⽚的⼤⼩ $imageInfo = getimagesize($item['tmp_name']); $rawImageWidth = $imageInfo[0]; $rawImageHeight = $imageInfo[1]; //设置图⽚上传路径,放在upload⽂件夹,以年⽉⽇⽣成⽂件夹分类存储, //rtrim(base_url(), '/')其实就是⽹站的根⽬录,⼤家⾃⼰处理 $path = rtrim(base_url(), '/') . '/upload/' . date('Ymd') . '/'; //确保⽬录可写 ensure_writable_dir($path); //⽂件名 $name = "$md5.0x{$rawImageWidth}x{$rawImageHeight}{$extension}"; //加⼊图⽚⽂件没变化到,也就是存在,就不必重复上传了,不存在则上传 $ret = file_exists($path . $name) ? true : move_uploaded_file($item['tmp_name'], $serverPath . $name); if($ret === false) { $files[$index]['error'] = 8004; continue; } else { $files[$index]['path'] = $path . $name; //存图⽚路径 $files[$index]['success'] = true; //图⽚上传成功标志 $files[$index]['width'] = $rawImageWidth; //图⽚宽度 $files[$index]['height'] = $rawImageHeight; //图⽚⾼度 $success ++; //成功+1 } } //将图⽚已json形式返回给js处理页⾯ ,这⾥⼤家可以改成⾃⼰的json返回处理代码 echo json_encode(array( 'total' => count($files), 'success' => $success, 'files' => $files, )); } }/***********************分割***************************************/
//这⾥我附上ensure_writable_dir()函数的代码 /** * 确保⽂件夹存在并可写 * * @param string $dir */ function ensure_writable_dir($dir) { if(!file_exists($dir)) { mkdir($dir, 0766, true); chmod($dir, 0766); chmod($dir, 0777); } else if(!is_writable($dir)) { chmod($dir, 0766); chmod($dir, 0777); if(!is_writable($dir)) { throw new FileSystemException("⽬录 $dir 不可写"); } } }==============================判断全路径($url)是否图⽚===============================
PHP 图⽚上传,如果不做任何判断的话,随便⼀个⽂件如 rar,zip,php,java等⽂件改个⽂件名,改个后缀就能以图⽚形式上传的服务器,往往会造成极⼤的危害!
⼯具/原料
PHP
apache / nginx / iis
phpstorm / netbeans / notepad++ / editplus
⽅法/步骤
第⼀种⽅法:如果是只是单纯判断是否是图⽚格式的话,我使⽤ getimagesize ⽅法$filename //远程url(全路径)function checkIsImage($filename){
$alltypes = '.gif|.jpeg|.png|.bmp';//定义检查的图⽚类型 if(file_exists($filename)){ $result= getimagesize($filename); $ext = image_type_to_extension($result); return stripos($alltypes,$ext); }else{ return false; }}第⼆种⽅法⽐较强⼤⼀些,能判断多种格式function getReailFileType($filename){ $file = fopen($filename, "rb"); $bin = fread($file, 2); //只读2字节 fclose($file); $strInfo = @unpack("C2chars", $bin); $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); $fileType = ''; switch($typeCode){ case 7790: $fileType = 'exe';break; case 7784: $fileType = 'midi'; break; case 8297: $fileType = 'rar'; break; case 255216: $fileType = 'jpg';break; case 7173: $fileType = 'gif';break; case 6677: $fileType = 'bmp';break; case 13780: $fileType = 'png';break; default: $fileType = 'unknown'; } return $fileType;}第三种⽅法:
PHP gd类库函数提供了⼀个exif_imagetype() 函数, ⽤来读取图像的第1个字节, 还会对图⽚的签名做检查。 如果格式不对,会返回false。 其实啊, 这个⽅法和第⼀种⽅法有异曲同⼯之妙。 但是因为这个是库函数,效率要⽐第⼀种⽅法⾼得多。 此函数⽤法很简单,传⼊路径,然后通过判断是否等于某个常量, 例如 gif格式的IMAGETYPE_GIF
第四种⽅法:php重绘
效率很低的⼀种⽅法,但也是⼀种思路: 把传输过来的⽂件,不论什么⽂件都以resource 类型绘到图⽚中去, 如果是图⽚,能还原出来。如果不是图⽚,那绘画不出来,⽽且⾥⾯的危险代码也没有了。===============================php下载⽹址导航==========================
发布者:admin,转转请注明出处:http://www.yc00.com/web/1688384753a130043.html
评论列表(0条)