php生成饼图效果的实现代码
代码如下 | 复制代码 |
<? //+------------------------+ //| pie3dfun.PHP//公用函数 | //+------------------------+ define("ANGLE_STEP", 5); //定义画椭圆弧时的角度步长 function draw_getdarkcolor($img,$clr) //求$clr对应的暗色 { $rgb = imagecolorsforindex($img,$clr); return array($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2); } function draw_getexy($a, $b, $d) //求角度$d对应的椭圆上的点坐标 { $d = deg2rad($d); return array(round($a*Cos($d)), round($b*Sin($d))); } function draw_arc($img,$ox,$oy,$a,$b,$sd,$ed,$clr) //椭圆弧函数 { $n = ceil(($ed-$sd)/ANGLE_STEP); $d = $sd; list($x0,$y0) = draw_getexy($a,$b,$d); for($i=0; $i<$n; $i++) { $d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP); list($x, $y) = draw_getexy($a, $b, $d); imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr); $x0 = $x; $y0 = $y; } } function draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr) //画扇面 { $n = ceil(($ed-$sd)/ANGLE_STEP); $d = $sd; list($x0,$y0) = draw_getexy($a, $b, $d); imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr); for($i=0; $i<$n; $i++) { $d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP); list($x, $y) = draw_getexy($a, $b, $d); imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr); $x0 = $x; $y0 = $y; } imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr); list($x, $y) = draw_getexy($a/2, $b/2, ($d+$sd)/2); imagefill($img, $x+$ox, $y+$oy, $clr); } function draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clr) //3d扇面 { draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr); if($sd<180) { list($R, $G, $B) = draw_getdarkcolor($img, $clr); $clr=imagecolorallocate($img, $R, $G, $B); if($ed>180) $ed = 180; list($sx, $sy) = draw_getexy($a,$b,$sd); $sx += $ox; $sy += $oy; list($ex, $ey) = draw_getexy($a, $b, $ed); $ex += $ox; $ey += $oy; imageline($img, $sx, $sy, $sx, $sy+$v, $clr); imageline($img, $ex, $ey, $ex, $ey+$v, $clr); draw_arc($img, $ox, $oy+$v, $a, $b, $sd, $ed, $clr); list($sx, $sy) = draw_getexy($a, $b, ($sd+$ed)/2); $sy += $oy+$v/2; $sx += $ox; imagefill($img, $sx, $sy, $clr); } } function draw_getindexcolor($img, $clr) //RBG转索引色 { $R = ($clr>>16) & 0xff; $G = ($clr>>8)& 0xff; $B = ($clr) & 0xff; return imagecolorallocate($img, $R, $G, $B); } // 绘图主函数,并输出图片 // $datLst 为数据数组, $datLst 为标签数组, $datLst 为颜色数组 // 以上三个数组的维数应该相等 function draw_img($datLst,$labLst,$clrLst,$a=250,$b=120,$v=20,$font=10) { $ox = 5+$a; $oy = 5+$b; $fw = imagefontwidth($font); $fh = imagefontheight($font); $n = count($datLst);//数据项个数 $w = 10+$a*2; $h = 10+$b*2+$v+($fh+2)*$n; $img = imagecreate($w, $h); //转RGB为索引色 for($i=0; $i<$n; $i++) $clrLst[$i] = draw_getindexcolor($img,$clrLst[$i]); $clrbk = imagecolorallocate($img, 0xff, 0xff, 0xff); $clrt = imagecolorallocate($img, 0x00, 0x00, 0x00); //填充背景色 imagefill($img, 0, 0, $clrbk); //求和 $tot = 0; for($i=0; $i<$n; $i++) $tot += $datLst[$i]; $sd = 0; $ed = 0; 333 $ly = 10+$b*2+$v; for($i=0; $i<$n; $i++) { $sd = $ed; $ed += $datLst[$i]/$tot*360; //画圆饼 draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clrLst[$i]); //$sd,$ed,$clrLst[$i]); //画标签 imagefilledrectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrLst[$i]); imagerectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrt); //imagestring($img, $font, 5+2*$fw, $ly, $labLst[$i].":".$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)", $clrt); $str = iconv("GB2312", "UTF-8", $labLst[$i]); ImageTTFText($img, $font, 0, 5+2*$fw, $ly+13, $clrt, "./simsun.ttf", $str.":".$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)"); $ly += $fh+2; } //输出图形 header("Content-type: image/png"); //输出生成的图片 $imgFileName = "../temp/".time().".png"; imagepng($img,$imgFileName); echo ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' } $datLst = array(30, 10, 20, 20, 10, 20, 10, 20); //数据 $labLst = array("中国科技大学", "安徽理工大学", "清华大学", "北京大学", "南京大学", "上海大学", "河海大学", "中山大学"); //标签 $clrLst = array(0x99ff00, 0xff6666, 0x0099ff, 0xff99ff, 0xffff99, 0x99ffff, 0xff3333, 0x009999); //画图 draw_img($datLst,$labLst,$clrLst); ?> |
效果图如下
下面详细讲到了几点。 1、点击登录跳转到SSO登录页面并带上当前应用的callback地址 2、登录成功后生成COOKIE并将COOKIE传给callback地址 3、callback地址接收SSO的COOKIE并设置在当前域下再跳回到应用1即完成登录 4、再在应用程序需要登录的地方嵌入一个iframe用来实时检测登录状态代码如下 | 复制代码 |
if(isset($_COOKIE['sign'])){ <?php if(isset($_POST['username']) && isset($_POST['password'])){ if(empty($_COOKIE['sign'])){ <form method="post">
<?php <?php
|
计算执行的时间
通过下面这个简单的方法可以计算一段程序的执行时间(微妙)
代码如下 | 复制代码 |
$start_time = microtime(true); //一些需要计算时间的代码 print('代码的运行时间是:'.getExecTime($start_time)); function getExecTime($start_time) require_once 'Benchmark/Timer.php'; // A function that records the time when it is called // Return the times stored in profile, then erase it $profile[] = microtime(); // Set up a tick handler // Initialize the function before the declare block // Run a block of code, throw a tick every 2nd statement // Display the data stored in the profiler |
代码排错
主要介绍的是Advanced PHP Debugger(APD),通过设置可以生成跟踪文件,对文件进行分析可以得到脚本的详细信息
网站压力测试
人们常混淆压力测试和基准测试。基准测试是一种由单独的开发者完成的临时活动,常用Apache HTTP测试工具——ab,该工具可以测试一台HTTP服务器每秒能相应的请求数。压力测试是一种能中断你WEB应用程序的测试技术,通过对断点测试,能识别并修复应用程序中的弱点,为何时购置新硬件提供依据。常用的开源工具是Siege。
提速技巧
通过安装PHP加速器可以有效的提供PHP的执行速度,常见的三种加速器是Alternative PHP Cache(APC)、eAccelerator和ionCube PHP Accelerator(PHPA)。另外需要注意的是加速器的兼容性通常会滞后于新发布的PHP版本。
另外提速技巧是在能不使用正则的时候尽量不要用,通常可替代的方案会比使用正则效率更高。
要实现记住密码自动登录的功能我们大多数据都是利用了客户端的cookies来实现,我们利用php也不例外,有需要的朋友可以参考一下。php制作记住密码自动登录的解决思路,其实也就是对session,cookies的操作
//检查用户是否登录
代码如下 | 复制代码 |
function checklogin(){ if(empty($_SESSION['user_info'])){ //检查一下session是不是为空 if(empty($_COOKIE['username']) || empty($_COOKIE['password'])){ //如果session为空,并且用户没有选择记录登录状 header("location:login.php?req_url=".$_SERVER['REQUEST_URI']); //转到登录页面,记录请求的url,登录后跳转过去,用户体验好。 }else{ //用户选择了记住登录状态 $user = getUserInfo($_COOKIE['username'],$_COOKIE['password']); //去取用户的个人资料 if(empty($user)){ //用户名密码不对没到取到信息,转到登录页面 header("location:login.php?req_url=".$_SERVER['REQUEST_URI']); }else{ $_SESSION['user_info'] = $user; //用户名和密码对了,把用户的个人资料放到session里面 } } } } |
二,用户提交登录信息
代码如下 | 复制代码 |
username = trim($_POST['username']); $password = md5(trim($_POST['password'])); $validatecode = $_POST['validateCode']; $ref_url = $_GET['req_url']; $remember = $_POST['remember']; $err_msg = ''; if($validatecode!=$_SESSION['checksum']){ $err_msg = "验证码不正确"; }elseif($username=='' || $password==''){ $err_msg = "用户名和密码都不能为空"; }else{ $row = getUserInfo($username,$password); if(empty($row)){ $err_msg = "用户名和密码都不正确"; }else{ $_SESSION['user_info'] = $row; if(!empty($remember)){ //如果用户选择了,记录登录状态就把用户名和加了密的密码放到cookie里面 setcookie("username", $username, time()+3600*24*365); setcookie("password", $password, time()+3600*24*365); } if(strpos($ref_url,"login.php") === false){ header("location:".$ref_url); }else{ header("location:main_user.php"); } } } |
三,当用户点退出时,清出记录登录状态
//退出登录
代码如下 | 复制代码 |
function logout(){ unset($_SESSION['user_info']); if(!empty($_COOKIE['username']) || !empty($_COOKIE['password'])){ setcookie("username", null, time()-3600*24*365); setcookie("password", null, time()-3600*24*365); } } |
代码如下 | 复制代码 |
<?php private $img_size; //取得图片的长宽 switch($imginfo[2]) switch($this->watertype) switch ($imginfo[2]) |
相关文章
- php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
- 有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
- 本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25
- 公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
- 本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
jQuery+slidereveal实现的面板滑动侧边展出效果
我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15- 一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
- 翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
- 微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
SQLMAP结合Meterpreter实现注入渗透返回shell
sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25