2020-10-27
PHP代码覆盖率统计详解

PHP代码覆盖率统计详解

一 安装php环境 二 统计php代码覆盖率 1 需要安装xdebug 安装步骤: //www.jb51.net/article/116419.htm 测试环境 LNMP 军哥一键包1.3版本 PHP 7.0.7 Xdebug 2.6 配置步骤 git clone git://github.com/xdebug/xdebug.git cd xdebug find / -name phpize /usr/bin/phpize find / -name php-config ./configure --enable-xdebug --with-php-config=/usr/local/php/bin/php-config make make install 开启扩展 find / -name php.ini vi /usr/local/php/etc/php.ini 添加 extension=xdebug.so [Xdebug] xdebug.collect_params=on xdebug.collect_return=on xdebug.remote_autostart=on service restart php-fpm 成功验证:①在linux输入php -version,如下: ②访问index.php(phpinfo()) 2 安装composer curl -sS https://getcomposer.org/installer | php php composer.phar --version Composer version 1.6.5 2018-05-04 11:44:59 3 安装phpcov 和 phpunit 此处选了phpunit 6.5.0 和phpcov 4.0.8,编辑composer.json文件(phpcov是根据phpunit自动匹配的,php和phpunit对应关系可百度或看底部) #composer.json { "name": "root/php-code-coverage", "require-dev": { "phpunit/phpunit":"6.5.0", "phpunit/phpcov": "*" } 执行命令安装 php composer.phar install 安装完成后校验 如下即可(phpunit和phpcov一定要在这个目录下使用) vendor/bin [[email protected] bin]# ll lrwxrwxrwx 1 root root 24 Jul 13 10:22 phpcov -> ../phpunit/phpcov/phpcov lrwxrwxrwx 1 root root 26 Jul 13 10:21 phpunit -> ../phpunit/phpunit/phpunit [[email protected] bin]# .vendor/bin/phpunit --version PHPUnit 6.5.0 by Sebastian Bergmann and contributors. [[email protected] bin]# .vendor/bin/phpcov --version phpcov 4.0.5 by Sebastian Bergmann. 4 编写测试代码 #userinfo.php <?php include_once("*****/prepend.php"); $id = $_POST["user_id"]; if ($id != 10086){ exit(); } $userinfo = array( 'username'=>'jason', 'password'=>'123456', ); $result = array( 'code'=>10000, 'message'=>"success", 'data'=>$userinfo, ); echo json_encode($result); #prepend.php <?php require_once dirname(__FILE__).'/vendor/autoload.php'; # 在composer生成的vender同级目录 use SebastianBergmann\CodeCoverage\CodeCoverage; $coverage = new CodeCoverage; $coverage->filter()->addDirectoryToWhitelist('/var/www/html/userinfo.php'); # 白名单<br>$coverage->filter()->removeDirectoryFromWhitelist('/var/www/html/userinfo.php'); # 从白名单中移除文件夹<br>$coverage->filter()->removeFileFromWhitelist('/var/www/html/userinfo.php'); # 从白名单中移除文件 $coverage->start('<Site coverage>');#开始统计 register_shutdown_function('__coverage_stop',$coverage);#注册关闭方法 function __coverage_stop(CodeCoverage $coverage){ $coverage->stop();#停止统计 $cov = '<?php return unserialize(' . var_export(serialize($coverage), true) . ');';#获取覆盖结果,注意使用了反序列化 //echo $cov; file_put_contents(dirname(__FILE__).'/cov/site.' . date('U') .'.'.uniqid(). '.cov', $cov);#将结果写入到文件中 } 若多个域名或者接口请求要在同一个prepend文件里分别统计,在新建$coverage前加if条件即可,如 if(strpos($_SERVER['HTTP_HOST'],'www.baidu.com') === true){} 5 测试 执行命令 [[email protected] html]# curl -d "user_id=10086" "127.0.0.1/userinfo.php" {"code":10000,"message":"success","data":{"username":"jason","password":"123456"}} 查看prepend.php统计目录cov下 -rw-r--r-- 1 apache apache 4609 Jul 13 14:45 site.1531464305.5b484a71c0a1c.cov 生成xml或者html报告命令如下: ./vendor/bin/phpcov merge --clover cov/coverage.xml cov/ -vvv # 在cov目录下生成xml报告 ./vendor/bin/phpcov merge --html="cov/coverage_html" cov/ -vvv # 在cov目录下生成html报告  6 查看报告结果 8 工程配置 在实际项目中有三种配置方式 在php.ini中引入prepend文件:auto_prepend_file = /***/prepend.php (配置后重启php) --- 所有php请求均会预加载该文件,文件有错误时影响整个php服务 在文件入口文件中引入prepend文件:include_once(/www/***/prepend.conf); (一般为index.php) --- 效果同3,重新部署清掉配置 在nginx.conf中引入prepend文件 --- 对于该域名的请求会加载该文件(配置后重启nginx) location ~ .*\.php?$ { fastcgi_pass 127.0.0.1:9200; fastcgi_index index.php; include common/fastcgi.conf; fastcgi_param MY_ENV pre; fastcgi_param PHP_VALUE 'auto_prepend_file=/www/data/phpcoverage/prepend.php'; }   7 问题: ① 开始使用的phpcov 2.0.2 & phpunit 4.8.7 生成的报告数据全为0 - phpunit4 不能支持 php7,对应版本见⑦ ② 开始总是报错PHP Fatal error: Uncaught Error: Class 'SebastianBergmann\CodeCoverage\CodeCoverage' not found in 是因为没有引用vender目录,在prepend.php里加一句require_once dirname(__FILE__).'/vendor/autoload.php'; 即可 ③ 配置nginx ④ 请求域名没有生成site文件:请求权限不够,不能在对应目录下写文件 chmod 777 -R 域名请求是apache权限,如果与cov文件夹权限不一致则不可写入 ⑤ 生成覆盖率文件有要统计的代码文件,但是命中情况count全为0,有两种可能 A xdebug的collect_param 与collect_return没打开,导致未收集到数据,需要在php.ini里配置 B 如果在php.ini里配置了auto_prepend_file=‘**/prepend.php',则只有用指定目录下的prepend.php文件才能生成覆盖率数据,否则覆盖行全为0 ⑥ 将xml报告集成到jenkins 注意:go 和 c++ 的xml报告可以用 Cobertura 统计到jenkins展示,php 的要用Clover PHP 插件统计,phpcov生成的xml格式Cobertura解析不了会报错 ⑦ php 和 phpunit 的对应关系https://phpunit.de/supported-versions.html ⑧ 问题:观察每日构建的覆盖率,在代码未更新,用例未更新的前提下,覆盖率降低 该方式统计的代码总行数变化,与之前不一致 -- 实际两天的代码完全一致 同一个文件的覆盖行数不一致,发现会出现同一个分支中,上下行未覆盖,而中间行覆盖 和 空行被覆盖(空白行 绿色,鼠标放置提示 1test covers..)的 原因:猜测是 xdebug 统计抽风,因为 xdebug 负责收集统计代码,phpunit phpcov只是汇总整理为可读报告。 解决:暂不能解决,可观察xdebug和phpcoverage官网有类似问题 ⑨ jenkins 配置 cur_path=`pwd` echo ${cur_path} # 删除历史cov文件,保证覆盖率干净 find /www/data/phpcoverage/admin_cov/ -name "site*" | xargs rm -rf rm -rf ${cur_path}/reports/* #在工程入口文件引入 prepend 文件 sed -i '2cinclude_once("/www/data/phpcoverage/prepend.php");' /www/my_project/index.php # 更新自动化用例并执行用例 source /www/data/project3/venv/bin/activate git checkout master git pull python run.py # 统计html和xml报告,html更易读,xml更直观反映历史情况 cd /www/data/phpcoverage ./vendor/bin/phpcov merge --clover ${cur_path}/reports/coverage.xml admin_cov/ -vvv ./vendor/bin/phpcov merge --html="${cur_path}/reports/coverage_html" admin_cov/ -vvv # 从入口文件删除引用 sed -i '2c//' /www/my_project/index.php https://github.com/sebastianbergmann/phpcov 到此这篇关于PHP代码覆盖率统计详解的文章就介绍到这了,更多相关PHP代码覆盖率内容请搜索梦主博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持梦主博客!...
技术教程 1020次浏览 0条评论
2020-10-26
PHP大文件及断点续传下载实现代码

PHP大文件及断点续传下载实现代码

一般来说浏览器要同时下载几个文件,比如pdf文件,会在服务器端把几个文件压缩成一个文件。但是导致的问题就是会消耗服务器的cpu和io资源。 那有没有办法,用户点了几个文件,在客户端同时下载呢? 支持html5的浏览器是可以的,html的a标签有一个属性download <a download="下载的1.pdf" href="1.pdf" rel="external nofollow" rel="external nofollow" >单个文件下载</a>, 经过测试在edge浏览器,firefox和chrome都支持。但是遗憾的是ie浏览器不支持。参考下面的例子。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <title></title> <script src="//libs.baidu.com/jquery/1.11.1/jquery.min.js"></script> </head> <body> <input type="button" class="downloadAll" value="批量下载" /> <script> var filesForDownload = []; filesForDownload[filesForDownload.length] = { path: "1.zip", //要下载的文件路径 name: "file1.txt" //下载后要显示的名称 }; filesForDownload[filesForDownload.length] = { path: "2.zip", name: "file2.txt" }; filesForDownload[filesForDownload.length] = { path: "3.zip", name: "file3.txt" }; function download(obj) { var temporaryDownloadLink = document.createElement("a"); temporaryDownloadLink.style.display = 'none'; document.body.appendChild( temporaryDownloadLink); temporaryDownloadLink.setAttribute( 'href', obj.path); temporaryDownloadLink.setAttribute( 'download', obj.name); temporaryDownloadLink.click(); document.body.removeChild( temporaryDownloadLink); } $('input.downloadAll').click(function( e) { e.preventDefault(); for (var x in filesForDownload) { download(filesForDownload[x]); } }); </script> </body> </html> ie浏览器怎么办呢? 也可以用window.open函数。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="//libs.baidu.com/jquery/1.11.1/jquery.min.js"></script> </head> <body> <a download="下载的1.pdf" href="1.pdf" rel="external nofollow" rel="external nofollow" >单个文件下载</a> <br> <a href="#" rel="external nofollow" class="yourlink">下载全部文件</a> <script> $('a.yourlink').click(function(e) { e.preventDefault(); window.open('1.zip', 'download'); window.open('2.zip', 'download'); window.open('3.zip', 'download'); }); </script> </body> </html> 完整的方案就是根据浏览器类型,调用不同的函数,实现。 另外要下载pdf,而不是在浏览器中打开的话,需要配置apache的配置文件,在httpd.conf中增加下面的配置。 <FilesMatch "\.pdf$"> Header set Content-Disposition attachment </FilesMatch> 或者使用down2组件,下载更简单。 JavaScript: 引入头 <head> <metahttp-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>donw2-多文件演示页面</title> <linktype="text/css" href="js/down.css" rel="external nofollow" rel="Stylesheet" /> <scripttype="text/javascript" src="js/jquery-1.4.min.js"> </script> <scripttype="text/javascript" src="js/down.app.js" charset="utf-8"> </script> <scripttype="text/javascript" src="js/down.edge.js" charset="utf-8"> </script> <scripttype="text/javascript" src="js/down.file.js" charset="utf-8"> </script> <scripttype="text/javascript" src="js/down.folder.js" charset="utf-8"> </script> <scripttype="text/javascript" src="js/down.js" charset="utf-8"> </script> </head> 创建down2对象 var downer = new DownloaderMgr(); downer.Config["Folder"] = ""; //设置默认下载路径。 //挂载事件 downer.event.taskCreate = function(obj) { $(document.body).append("文件ID:" + obj .fileSvr.id) + "<br/>"; }; downer.event.downProcess = function(obj) {}; downer.event.downStoped = function(obj) {}; downer.event.downComplete = function( obj) { $(document.body).append('<div>本地路径:' + obj.fileSvr.pathLoc + '</div>'); }; downer.event.downError = function(obj, err) {}; downer.event.queueComplete = function() { $(document.body).append( "<div>队列完成</div>"); }; 批量下载url $("#btn-down-files").click(function() { if (downer.Config["Folder"] == "") { downer.open_folder(); return; } var urls = [ { fileUrl: "http://res2.ncmem.com/res/images/ie11.png" } , { fileUrl: "http://res2.ncmem.com/res/images/up6.1/down.png" } , { fileUrl: "http://res2.ncmem.com/res/images/firefox.png" } , { fileUrl: "http://res2.ncmem.com/res/images/edge.png" } , { fileUrl: "http://res2.ncmem.com/res/images/up6.1/cloud.png" } , { fileUrl: "http://res2.ncmem.com/res/images/home/w.png" } , { fileUrl: "http://res2.ncmem.com/res/images/img.png" } ]; downer.app.addUrls(urls); }); 当成一个文件夹下载 $("#btn-down-json").click(function() { if (downer.Config["Folder"] == "") { downer.open_folder(); return; } var fd = { nameLoc: "图片列表" , files: [ { fileUrl: "http://res2.ncmem.com/res/images/ie11.png" } , { fileUrl: "http://res2.ncmem.com/res/images/up6.1/down.png" } , { fileUrl: "http://res2.ncmem.com/res/images/firefox.png" } , { fileUrl: "http://res2.ncmem.com/res/images/edge.png" } , { fileUrl: "http://res2.ncmem.com/res/images/up6.1/cloud.png" } , { fileUrl: "http://res2.ncmem.com/res/images/home/w.png" } , { fileUrl: "http://res2.ncmem.com/res/images/img.png" } ] }; downer.app.addJson(fd); }); 下载多级目录 $("#btn-down-fd").click(function() { if (downer.Config["Folder"] == "") { downer.open_folder(); return; } var fd = { nameLoc: "测试文件夹" , files: [ { fileUrl: "http://www.ncmem.com/images/ico-ftp.jpg" } , { fileUrl: "http://www.ncmem.com/images/ico-up.jpg" } ] , folders: [ { nameLoc: "图片1" , files: [ { fileUrl: "http://www.ncmem.com/images/ico-ftp.jpg" } , { fileUrl: "http://www.ncmem.com/images/ico-up.jpg" } , { fileUrl: "http://www.ncmem.com/images/ico-capture.jpg" } , { fileUrl: "http://www.ncmem.com/images/ico-imageuploader.gif" } , { fileUrl: "http://www.ncmem.com/images/ico-wordpaster.gif" } ] , folders: [ { nameLoc: "软件" , files: [ { fileUrl: "http://res2.ncmem.com/res/images/edit-file.png" } ] } ] } ] }; downer.app.addJson(fd); }); 自定义下载文件名称 $("#btn-down-svr").click(function () { if (downer.Config["Folder"] == "") { downer.open_folder(); return; } var urls = [ { fileUrl: "http://localhost:90/db/down.aspx", nameLoc: "test.exe" } , { fileUrl: "http://localhost:90/db/down.aspx", nameLoc: "test-1.exe" } ]; downer.app.addUrls(urls); }); 实现效果: alt="" /> 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持梦主博客。 ...
技术教程 920次浏览 0条评论
2020-10-24
Notepad2轻量级文本编辑器工具

Notepad2轻量级文本编辑器工具

Notepad2,轻量级文本编辑器,基于Scintilla开发,免费开源,体积小巧运行快,与系统自带记事本具备相同资源消耗,支持70种编程语言,具有语法高亮、代码方案、代码折叠、编码转换、行号显示、多步撤销、批量查找替换等功能。Notepad2是Notepad2-Mod的改进版,而metapath程序是原版的修复漏洞版。 增加右键菜单/替换记事本步骤:菜单->设置->高级设置->系统集成 ...
软件下载 1850次浏览 0条评论
2020-10-11
织梦channelartlist标签当前栏目高亮

织梦channelartlist标签当前栏目高亮

目前织梦模板里currentstyle只支持dede:channel,这种只能调取一层栏目,而我们制作织梦网站模板时,在导航栏里经常要调用到一级和二级栏目, 然后让当前栏目高亮,使用特殊样式,要用到dede:channelartlist,现在的织梦currentstyle在 dede:channelartlist里中无法使用的,需要我们自己添加一些代码才行。   channelartlist标签完美支持currentstyle属性,实现自动加载当前栏目CSS样式,可以用来标识当前栏目位置的CSS,解决方法如下:   1、打开文件includetaglibchannelartlist.lib.php 找到: $pv->Fields['typeurl'] = GetoneTypeUrlA($typeids[$i]);   2、在此行代码下方增加以下代码: if($typeids[$i]['id'] == $refObj->Typelink->TypeInfos['id'] || $typeids[$i]['id'] == $refObj->Typelink->TypeInfos['topid'] ){ $pv->Fields['currentstyle'] = $currentstyle ? $currentstyle : 'current'; } else{ $pv->Fields['currentstyle'] = ''; } 添加这个后才能对二级栏目也起作用   4、调用方法: {dede:channelartlist typeid='2' currentstyle='current'} <li class='{dede:field.currentstyle/}'><a href='{dede:field name='typeurl'/}'>{dede:field name='typename'/}</a></li> {/dede:channelartlist}   如果是当前栏目则 li的class属性显示current,否则显示class='' ,也可以修改currentstyle='这里改为你需要的类名'。   -------------------------------------------------------------------------------------------------------------------------   5、也可以与arclist标签相结合使用,这样调用:   {dede:channelartlist typeid='2' currentstyle='current'} <dt ><a class='{dede:field.currentstyle/}' href='{dede:fieldname='typeurl'/}'>{dede:field name='typename'/}</a></dt> {dede:arclist titlelen='42' row='10' currentstyle="<dd><a class='current' href='~typelink~'>~typename~</a></dd>"} [field:array runphp='yes'] if(@me['currentstyle']){ @me = @me['currentstyle']; }else{ @me = "<dd ><a href='{@me['arcurl']}'>{@me['title']}</a></dd>"; } [/field:array] {/dede:arclist} {/dede:channelartlist} ...
dedecms 860次浏览 0条评论
2020-10-11
dedecms文章页单独调用上一篇下一篇方法

dedecms文章页单独调用上一篇下一篇方法

dedecms文章页单独调用上一篇下一篇URL网址链接的方法   上一篇文章URL链接: {dede:prenext get='pro' runphp="yes"} preg_match_all('/<a.*?(?: |\t|\r|\n)?href=['"]?(.+?)['"]?(?:(?: |\t|\r|\n)+.*?)?>(.+?)</a.*?>/sim', @me, $strResult, PREG_PATTERN_ORDER);@me=$strResult[1][0]; {/dede:prenext} 下一篇文章URL链接: {dede:prenext get='next' runphp="yes"} preg_match_all('/<a.*?(?: |\t|\r|\n)?href=['"]?(.+?)['"]?(?:(?: |\t|\r|\n)+.*?)?>(.+?)</a.*?>/sim', @me, $strResult, PREG_PATTERN_ORDER);@me=$strResult[1][0]; {/dede:prenext} ...
dedecms 818次浏览 0条评论
2020-10-11
dedeCMS时间日期标签大全

dedeCMS时间日期标签大全

DEDECMS利用strftime()函数格式化时间的所有参数详解,包括年份日期进制、小时格式等,大家收藏吧,呵.   日期时间格式 (利用strftime()函数格式化时间)0    dedecms首页时间标签:   1、12-27 样式 ([field:pubdate function='strftime("%m-%d",@me)'/])     2、May 15, 2009 样式    ([field:pubdate function='strftime("%b %d, %Y",@me)'/]) 提示:可修改后代码再运行!    dedecms列表页时 间标签:    1、2009-12-27 18:30:02 样式 [field:pubdate function="GetDateTimeMK(@me)"/]     2、2009-12-27  样式    [field:pubdate function="GetDateMK(@me)"/]    dedecms内容页时 间标签:    1、2009-12-27  样式 {dede:field name='pubdate' function='GetDateMk(@me)'/}    2、May 15, 2009 样式    {dede:field name='pubdate' function='strftime("%b %d, %Y",@me)'/}     ============================================================   24小时内的时间显示红色: [field:pubdate runphp='yes'] $a="<font color='#ff0000'>"; $b="</font>"; $c=strftime("%Y年%m月%d日 %H:%M:%S","@me"); $ntime = time(); $oneday = 3600 * 24; if(($ntime - @me)<$oneday) @me = $a.$c.$b; else @me =$c; [/field:pubdate]   最后更新时间 {dede:tagname runphp='yes'}@me = date("Y-m-d H:i:s", time());{/dede:tagname}    XX天前 [field:pubdate runphp='yes'] $today = Floor(time()/(3600 * 24)); $senday= Floor(@me/(3600 * 24)); $updays = $today-$senday; if($updays==0) @me = "今日"; else @me = $updays."天前"; [/field:pubdate]     利用strftime()函数将时间格式化:      %a 星期几的简写 %A 星期几的全称 %b 月分的简写 %B 月份的全称 %c 标准的日期的时间串 %C 年份的后两位数字 %d 十进制表示的每月的第几天 %D 月/天/年 %e 在两字符域中,十进制表示的每月的第几天 %F 年-月-日 %g 年份的后两位数字,使用基于周的年 %G 年分,使用基于周的年 %h 简写的月份名 %H 24小时制的小时 %I 12小时制的小时 %j 十进制表示的每年的第几天 %m 十进制表示的月份 %M 十时制表示的分钟数 %n 新行符 %p 本地的AM或PM的等价显示 %r 12小时的时间 %R 显示小时和分钟:hh:mm %S 十进制的秒数 %t 水平制表符 %T 显示时分秒:hh:mm:ss %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0) %U 第年的第几周,把星期日做为第一天(值从0到53) %V 每年的第几周,使用基于周的年 %w 十进制表示的星期几(值从0到6,星期天为0) %W 每年的第几周,把星期一做为第一天(值从0到53) %x 标准的日期串 %X 标准的时间串 %y 不带世纪的十进制年份(值从0到99) %Y 带世纪部分的十制年份 %z,%Z 时区名称,如果不能得到时区名称则返回空字符。 ...
dedecms 826次浏览 0条评论
2020-10-8
教你如何在Dede分类信息地区名在标题title显示

教你如何在Dede分类信息地区名在标题title显示

一.修改include\taglib\infolink.lib.php 主要增加了  $fields['puper'] = $em_nativeplaces[$toptype]; 与  $fields['puper'] .= ' - ' . $em; 这段代码改成这样 以下为引用的内容: //地区链接 if(empty($nativeplace)) { foreach($em_nativeplaces as $eid=>$em) { if($eid % 500 != 0) continue; $fields['nativeplace'] .= " <a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&nativeplace={$eid}&infotype={$infotype}'>{$em}</a>\r\n"; } } else { $sontype = ( ($nativeplace % 500 != 0) ? $nativeplace : 0 ); $toptype = ( ($nativeplace % 500 == 0) ? $nativeplace : ( $nativeplace-($nativeplace%500) ) ); $fields['nativeplace'] = "<a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&nativeplace={$toptype}&infotype={$infotype}'><b>{$em_nativeplaces[$toptype]}</b></a> >> "; $fields['puper'] = $em_nativeplaces[$toptype]; foreach($em_nativeplaces as $eid=>$em) { if($eid < $toptype+1 || $eid > $toptype+499) continue; if($eid == $nativeplace) { $fields['nativeplace'] .= " <b>{$em}</b>\r\n"; $fields['puper'] .= ' - ' . $em; } else { $fields['nativeplace'] .= " <a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&nativeplace={$eid}&infotype={$infotype}'>{$em}</a>\r\n"; } } } 二、在列表调用里用  {dede:infolink}[field:puper/]{/dede:infolink} 调用  同样适用于其他联动类别 ...
dedecms 923次浏览 0条评论
2020-10-8
禁止浏览器右键查看网页元素代码

禁止浏览器右键查看网页元素代码

常见的阅览器禁止鼠标右键《以防别人查看网页的源代码》 当然想要做到绝对的看不了,不太可能,因为方法千千万万。此代码在阅览器鼠标右键失效。仅此而已、 推荐配合这一片文章一起使用:(使用代码禁止F12查看网页源码教程) //禁右键 <script>function fuckyou(){ window.close(); window.location="about:blank"; } function ck() { console.profile(); console.profileEnd(); if(console.clear) { console.clear() }; if (typeof console.profiles =="object"){ return console.profiles.length > 0; } } function hehe(){ if( (window.console && (console.firebug || console.table && /firebug/i.test(console.table()) )) || (typeof opera == 'object' && typeof opera.postError == 'function' && console.profile.length > 0)){ fuckyou(); } if(typeof console.profiles =="object"&&console.profiles.length > 0){ fuckyou(); } } hehe(); window.onresize = function(){ if((window.outerHeight-window.innerHeight)>10) fuckyou(); }</script> ...
网站运营 781次浏览 0条评论
微信二维码