先简单了解下源码中的2个函数:

<?php

echo  mb_strpos("朋友比生命还重要?或许是吧" . '?',"?");
echo "\n";
echo mb_substr("朋友比生命还重要?或许是吧",0,mb_strpos("朋友比生命还重要?或许是吧" . '?',"?"));

运行结果(先用在线,hhh):
8
朋友比生命还重要
附上源码:

 <?php
    highlight_file(__FILE__);  //对_FILE_文件进行语法高亮显示
    class emmm
    {
        public static function checkFile(&$page)  //&$page是引用传参page(即file)
        {
            //白名单数组
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            //isset()判断是否声明了$page变量,is_string()判断$page是否为字符串
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }
            //如果$page变量在白名单数组中,则返回真
            if (in_array($page, $whitelist)) {
                return true;
            }
            //将?之前的字符串赋值给$_page
            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?') //?在$page . '?'出现的第一个位置
            );
            //如果$_page变量在白名单数组中,则返回真
            if (in_array($_page, $whitelist)) {
                return true;
            }
            //对$page变量url解码
            $_page = urldecode($page);

            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            //如果$_page变量在白名单中,则返回真
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])  //要求$_REQUEST['file']非空
        && is_string($_REQUEST['file']) //是字符串
        && emmm::checkFile($_REQUEST['file']) //$_REQUEST['file']能通过类checkFile()函数的校验
    ) {//同时满足3个条件,则包含$_REQUEST['file']文件
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }
?>

参考链接:https://www.jianshu.com/p/36eaa95068ca

最新文章

  1. 掌握 Cinder 的设计思想 - 每天5分钟玩转 OpenStack(46)
  2. strong &amp; weak
  3. 2008server安装Intel I217V网卡驱动
  4. 【转载】使用barman备份PostgreSQL
  5. 【转】LINUX下一款不错的网站压力测试工具webbench
  6. EasyUI - 一般处理程序 返回 Json值
  7. jQuery中的attr()和prop()使用
  8. 将docker镜像上传到docker hub
  9. 使用JAVA数组实现顺序表
  10. iOS NSArray 的count方法返回的是无符号整形!
  11. 分享下自己写的一个微信小程序请求远程数据加载到页面的代码
  12. C#批量插入数据到Sqlserver中的四种方式 - 转
  13. BZOJ1901Zju2112 Dynamic Rankings——树状数组套主席树
  14. 当面试官问你GET和POST区别的时候,请这么回答.......
  15. ZYNQ. LwIP.PHY.KSZ9031RNX
  16. Android通用框架设计与完整电商APP开发系列文章
  17. PHP实现多进程并行操作,可做守护进程(转,备用)
  18. ASP.NET Web Pages:简介
  19. oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
  20. Solr开发文档(转)

热门文章

  1. matlab中的数组与矩阵
  2. Oracle体系结构中基本概念,数据库
  3. HTML的文档设置标记
  4. kali 所有版本
  5. 基于约束条件的SQL攻击
  6. 完整安装IIS服务
  7. 搭建Hexo实现个人网站详细教程
  8. HihoCoder 1174
  9. 2.7.1 元素定位:selenium消息框处理 (alert、confirm、prompt)
  10. dea创建Maven工程用c3p0连接数据库报错java.sql.SQLException: Connections could not be acquired from the underlying