【PHP/前端】使用PHP+HTML+CSS实现黑客帝国数字雨301跳转

样式:https://moeblog.top/go.php

这个样式一开始是在idannywu的博客中下载东西的时候看到的,感到非常酷炫,向他要源码,无奈于不回复我(他貌似不大上博客后台),只能自己动手了...

先上一张成品图片:2018-09-08 (3).png

首先随便从他网站中找一个下载链接,抓出HTML源码:

2018-09-08.png

 

看到那个百度盘链接了没,那个就是我们要下手的地方。

研究了下在PHP中跳转的方法,主要是用一个字符串:

  1. <?php echo $url;?>

用来取浏览器请求地址栏的后缀,例如http://你的网站/go.php?url=你要访问的IP或者网站地址

然后再加一个禁止其他网站引用的代码,具体可以参照源码(在末尾,源码内默认是被注释掉的,如需打开请删除前面的两个双斜线)

代码改到一半的时候发现一个百度的hm.js,查了下是网站的统计功能,直接给他做掉(滑稽)

将前面加上一系列代码,好让它Post到要去的地址和源站的地址:

  1. <?php
  2. //自定义跳转地址
  3. if(strlen($_SERVER['REQUEST_URI']) > 384 ||
  4.     strpos($_SERVER['REQUEST_URI'], "eval(") ||
  5.     strpos($_SERVER['REQUEST_URI'], "base64")) {
  6.         @header("HTTP/1.1 414 Request-URI Too Long");
  7.         @header("Status: 414 Request-URI Too Long");
  8.         @header("Connection: Close");
  9.         @exit;
  10. }
  11. //通过QUERY_STRING取得完整的传入数据,然后取得url=之后的所有值,兼容性更好
  12. $t_url = htmlspecialchars(preg_replace('/^url=(.*)$/i','$1',$_SERVER["QUERY_STRING"]));
  13. //数据处理
  14. if(!emptyempty($t_url)) {
  15.     //判断取值是否加密
  16.     if ($t_url == base64_encode(base64_decode($t_url))) {
  17.         $t_url =  base64_decode($t_url);
  18.     }
  19.     //对取值进行网址校验和判断
  20.     preg_match('/^(http|https|thunder|qqdl|ed2k|Flashget|qbrowser):\/\//i',$t_url,$matches);
  21. if($matches){
  22.     $url=$t_url;
  23.     $title='页面加载中,请稍候...';
  24. else {
  25.     preg_match('/\./i',$t_url,$matche);
  26.     if($matche){
  27.         $url='http://'.$t_url;
  28.         $title='页面加载中,请稍候...';
  29.     } else {
  30.         $url = 'http://'.$_SERVER['HTTP_HOST'];
  31.         $title='参数错误,正在返回首页...';
  32.     }
  33. }
  34. else {
  35.     $title = '参数缺失,正在返回首页...';
  36.     $url = 'http://'.$_SERVER['HTTP_HOST'];
  37. }
  38. ?>

最后得到源码:

  1. <?php
  2. /**
  3.  * 自动跳转页面
  4.  * @copyright (c) Moeblog
  5.  */
  6. //自定义跳转地址
  7. if(strlen($_SERVER['REQUEST_URI']) > 384 ||
  8.     strpos($_SERVER['REQUEST_URI'], "eval(") ||
  9.     strpos($_SERVER['REQUEST_URI'], "base64")) {
  10.         @header("HTTP/1.1 414 Request-URI Too Long");
  11.         @header("Status: 414 Request-URI Too Long");
  12.         @header("Connection: Close");
  13.         @exit;
  14. }
  15. //通过QUERY_STRING取得完整的传入数据,然后取得url=之后的所有值,兼容性更好
  16. $t_url = htmlspecialchars(preg_replace('/^url=(.*)$/i','$1',$_SERVER["QUERY_STRING"]));
  17. //数据处理
  18. if(!emptyempty($t_url)) {
  19.     //判断取值是否加密
  20.     if ($t_url == base64_encode(base64_decode($t_url))) {
  21.         $t_url =  base64_decode($t_url);
  22.     }
  23.     //对取值进行网址校验和判断
  24.     preg_match('/^(http|https|thunder|qqdl|ed2k|Flashget|qbrowser):\/\//i',$t_url,$matches);
  25. if($matches){
  26.     $url=$t_url;
  27.     $title='页面加载中,请稍候...';
  28. else {
  29.     preg_match('/\./i',$t_url,$matche);
  30.     if($matche){
  31.         $url='http://'.$t_url;
  32.         $title='页面加载中,请稍候...';
  33.     } else {
  34.         $url = 'http://'.$_SERVER['HTTP_HOST'];
  35.         $title='参数错误,正在返回首页...';
  36.     }
  37. }
  38. else {
  39.     $title = '参数缺失,正在返回首页...';
  40.     $url = 'http://'.$_SERVER['HTTP_HOST'];
  41. }
  42. ?>
  43. <html>
  44. <head>
  45. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  46. <meta http-equiv="refresh" content="1;url='<?php echo $url;?>';">
  47. <title>页面加载中,请稍候...</title>
  48. <style type="text/css">
  49. html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video {
  50.     margin: 0;
  51.     padding: 0;
  52.     border: 0;
  53.     font-size: 100%;
  54.     font: inherit;
  55.     vertical-align: baseline
  56. }
  57. body {
  58.     background: #000;
  59. }
  60. #loader-container {
  61.     width: 188px;
  62.     height: 188px;
  63.     color: white;
  64.     margin: 0 auto;
  65.     position: absolute;
  66.     top: 50%;
  67.     left: 50%;
  68.     margin-right: -50%;
  69.     transform: translate(-50%, -50%);
  70.     border: 5px solid #3498db;
  71.     border-radius: 50%;
  72.     -webkit-animation: borderScale 1s infinite ease-in-out;
  73.     animation: borderScale 1s infinite ease-in-out;
  74. }
  75. #loadingText {
  76.     font-family: 'Raleway', sans-serif;
  77.     font-size: 1.4em;
  78.     position: absolute;
  79.     top: 50%;
  80.     left: 50%;
  81.     margin-right: -50%;
  82.     transform: translate(-50%, -50%);
  83. }
  84. @-webkit-keyframes borderScale {
  85.     0% {
  86.         border: 5px solid white;
  87.     }
  88.     50% {
  89.         border: 25px solid #3498db;
  90.     }
  91.     100% {
  92.         border: 5px solid white;
  93.     }
  94. }
  95. @keyframes borderScale {
  96.     0% {
  97.         border: 5px solid white;
  98.     }
  99.     50% {
  100.         border: 25px solid #3498db;
  101.     }
  102.     100% {
  103.         border: 5px solid white;
  104.     }
  105. }
  106. </style>
  107. </script>
  108. </head>
  109. <body>
  110.     <canvas id="canvas" style="background:#111"></canvas>
  111.     <script type="text/javascript">
  112.         window.onload = function(){
  113.             //获取画布对象
  114.             var canvas = document.getElementById("canvas");
  115.             //获取画布的上下文
  116.             var context =canvas.getContext("2d");
  117.             //获取浏览器屏幕的宽度和高度
  118.             var W = window.innerWidth;
  119.             var H = window.innerHeight;
  120.             //设置canvas的宽度和高度
  121.             canvas.width = W - 20;
  122.             canvas.height = H - 20;
  123.             //每个文字的字体大小
  124.             var fontSize = 16;
  125.             //计算列
  126.             var colunms = Math.floor(W /fontSize);
  127.             //记录每列文字的y轴坐标
  128.             var drops = [];
  129.             //给每一个文字初始化一个起始点的位置
  130.             for(var i=0;i<colunms;i++){
  131.                 drops.push(0);
  132.             }
  133.             //运动的文字
  134.             var str ="javascript html5 canvas";
  135.             //4:fillText(str,x,y);原理就是去更改y的坐标位置
  136.             //绘画的函数
  137.             function draw(){
  138.                 context.fillStyle = "rgba(0,0,0,0.05)";
  139.                 context.fillRect(0,0,W,H);
  140.                 //给字体设置样式
  141.                 context.font = "700 "+fontSize+"px  微软雅黑";
  142.                 //给字体添加颜色
  143.                 context.fillStyle ="#00FF00";//可以rgb,hsl, 标准色,十六进制颜色
  144.                 //写入画布中
  145.                 for(var i=0;i<colunms;i++){
  146.                     var index = Math.floor(Math.random() * str.length);
  147.                     var x = i*fontSize;
  148.                     var y = drops[i] *fontSize;
  149.                     context.fillText(str[index],x,y);
  150.                     //如果要改变时间,肯定就是改变每次他的起点
  151.                     if(y >= canvas.height && Math.random() > 0.99){
  152.                         drops[i] = 0;
  153.                     }
  154.                     drops[i]++;
  155.                 }
  156.             };
  157.             function randColor(){
  158.                 var r = Math.floor(Math.random() * 256);
  159.                 var g = Math.floor(Math.random() * 256);
  160.                 var b = Math.floor(Math.random() * 256);
  161.                 return "rgb("+r+","+g+","+b+")";
  162.             }
  163.             draw();
  164.             setInterval(draw,30);
  165.         };
  166.     </script>
  167. <script type="text/javascript">
  168. function alertSet(e) {
  169.     document.getElementById("js-alert-box").style.display = "block", document.getElementById("js-alert-head").innerHTML = e;
  170.     var t = 5,
  171.         n = document.getElementById("js-sec-circle");
  172.     document.getElementById("js-sec-text").innerHTML = t, setInterval(function() {
  173.         //禁止其他网站调用此跳转
  174.         //var MyHOST = new RegExp("<?php echo $_SERVER['HTTP_HOST']; ?>");
  175.         //if (!MyHOST.test(document.referrer)) {
  176.         //  location.href="http://" + MyHOST;
  177.         //}
  178.         if (0 == t) location.href = "<?php echo $url;?>";
  179.         else {
  180.             t -= 1, document.getElementById("js-sec-text").innerHTML = t;
  181.             var e = Math.round(t / 5 * 735);
  182.             n.style.strokeDashoffset = e - 735
  183.         }
  184.     }, 970)
  185. } </script>
  186. <script>alertSet("<?php echo $title;?>");</script>
  187. <script>window.scrollTo(0,document.body.scrollHeight);</script>
  188. </body>
  189. </html>

注意:如果参数为空,则会自动返回网站根目录。

需要下载源码?点击这里跳转至Github

这样就好了。

参阅资料:

iDannyWu Blog go.php

AeBlog《本站自用go.php源码》

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注