<?php
namespace app\publicSport\controller\verify;
/**
* 引入基类
*/
use app\publicSport\controller\comm\Backend;
use think\Db;
class Capzxj extends Backend
{
private $dbNumber;
// PS:
// 1、所访问的页面中必须只能有一个类
public function index()
{
$dbNumber = Db::name('source')
->group('number')
->count();
$this->dbNumber = ++$dbNumber;
$path = ROOT_PATH . 'application/publicSport/controller/verify/Captcha.php';
// $path = ROOT_PATH . 'application/publicSport/controller/comm/Backend.php';
// $result = file_get_contents($path);
// var_dump($result);die;
$file = fopen($path, 'r');
$str = '';
while(! feof($file))
{
$s = fgets($file);
$str .= $s;
// echo $s;
}
fclose($file);
$len = strlen($str);
$newstr = '';
$last = '';
$lastArr = array();//存放刚刚读取的最后20个字符
$quotes = '';//空表示不再引号内,否则值为对应引号
$var = false;//false表示不是变量,true表示正处在一个变量中
$ls = '';//记录之前普通的代码
$alldata = array(
'namespace' => '',
'use' => array(),
'block' => array(),
'function' => array()
);
for($i=0; $i<$len; $i++) {
$skip = false;//是否跳过当前这个字符
/*检测当前代码引号情况*/
if ($str[$i] == '"' || $str[$i] =="'") {
if (!$quotes) {
//说明当前没有进入引号
$quotes = $str[$i];
} else {
if ($quotes == $str[$i] && $last != "\\") {
//说明是真的遇到结尾了
$quotes = '';
}
}
}
/*去掉//的注释*/
if ($str[$i] == '/' && $last == $str[$i] && !$quotes) {
//去掉最后一个字符
$newstr = substr($newstr, 0, -1);
$ls = substr($ls, 0, -1);
/*删除字符串前面的空格*/
$newstr = trim($newstr);
do{
$i++;
if ($str[$i] == "\n") {
$skip = true;
break;
}
} while(1);
continue;
}
/*去掉/*的注释*/
if ($str[$i] == '*' && $last == '/' && !$quotes) {
$last_last = '/';
$newstr = substr($newstr, 0, -1);
$ls = substr($ls, 0, -1);
/*删除字符串前面的空格*/
$newstr = trim($newstr);
do{
$i++;
if (($str[$i] == '/' && $last_last == '*') || ($i >= $len)) {
$skip = true;
break;
}
$last_last = $str[$i];
} while(1);
continue;
}
/*检测当前是否在某个变量内*/
if ($str[$i] == '$' && !$quotes) {
$var = true;
}
/*监测namespace*/
if (!$var && !$quotes && $lastArr[0] == 'e' && $lastArr[1] == 'c' && $lastArr[2] == 'a' && $lastArr[3] == 'p' && $lastArr[4] == 's' && $lastArr[5] == 'e'&& $lastArr[6] == 'm'&& $lastArr[7] == 'a' && $lastArr[8] == 'n') {
if (!preg_match('/^[\s\t]$/', $str[$i])) {
} else {
do{
$i++;
if (!preg_match('/^[a-zA-Z_0-9\\\\\s\t]{1}$/', $str[$i])) {
$alldata['namespace'] = trim($alldata['namespace']);
$newstr = substr($newstr, 0, -9);
// $ls = substr($ls, 0, -9);
$ls = '';
$skip = true;
$this->saveRow('namespace', $alldata['namespace']);
break;
}
$alldata['namespace'] .= $str[$i];
} while(1);
}
}
/*监测use*/
if (!$var && !$quotes && $lastArr[0] == 'e' && $lastArr[1] == 's' && $lastArr[2] == 'u') {
if (!preg_match('/^[\s\t]$/', $str[$i])) {
} else {
// var_dump(implode('', array_reverse($lastArr)));
$now_useLen = count($alldata['use']);
$alldata['use'][$now_useLen] = '';
do{
$i++;
if (!preg_match('/^[a-zA-Z_0-9\\\\\s\t]{1}$/', $str[$i])) {
$alldata['use'][$now_useLen] = trim($alldata['use'][$now_useLen]);
$this->saveRow('use', $alldata['use'][$now_useLen]);
$newstr = substr($newstr, 0, -4);
$ls = substr($ls, 0, -4);
$skip = true;
if (trim($ls)) {
$block_count = count($alldata['block']);
if (trim(trim($ls), '{')) {
$alldata['block'][$block_count] = trim(trim($ls), '{');
$this->saveRow('block', $alldata['block'][$block_count]);
}
// echo trim($alldata['block'][$block_count])."\n";
$ls = '';
}
break;
}
$alldata['use'][$now_useLen] .= $str[$i];
} while(1);
}
}
//检测是否进入class
if (!$var && !$quotes && $lastArr[0] == 's' && $lastArr[1] == 's' && $lastArr[2] == 'a' && $lastArr[3] == 'l' && $lastArr[4] == 'c') {
if (!preg_match('/^[\s\t]$/', $str[$i])) {
} else {
$alldata['class'] = '';
//往前循环看看有没有abstract,final等词语
$eachStr = '';
for ($eachi = $i - 1; $eachi > 0; $eachi--) {
if ($str[$eachi] == "\n") {
break;
}
$eachStr .= $str[$eachi];
}
/*将匹配到的旧的全部去掉*/
$newstr = substr($newstr, 0, $eachi-$i);
$ls = substr($ls, 0, $eachi-$i);
$skip = true;
if (trim($ls)) {
$block_count = count($alldata['block']);
if (trim(trim($ls), '{')) {
$alldata['block'][$block_count] = trim(trim($ls), '{');
$this->saveRow('block', $alldata['block'][$block_count]);
}
// echo trim($alldata['block'][$block_count])."\n";
$ls = '';
}
do{
$i++;
if ($str[$i] == "\n") {
$alldata['class'] = preg_split('/[\s\t]/', trim($alldata['class']));
array_unshift($alldata['class'], strrev(trim($eachStr)));
$classStr = trim(implode(' ', $alldata['class']), '{');
$this->saveRow('class', $classStr);
break;
}
$alldata['class'] .= $str[$i];
} while(1);
/*---------------------------------------------------从现在开始进去这个类-------------------------------------------------*/
/*---------------------------------------------------从现在开始进去这个类-------------------------------------------------*/
/*---------------------------------------------------从现在开始进去这个类-------------------------------------------------*/
/*---------------------------------------------------从现在开始进去这个类-------------------------------------------------*/
/*---------------------------------------------------从现在开始进去这个类-------------------------------------------------*/
if (1) {
//构建新的变量
$quotes2 = '';//空表示不再引号内,否则值为对应引号
$var2 = false;//false表示不是变量,true表示正处在一个变量中
// $ceng = 0;//用来表示大括号进入的层级
$ls = '';
$functionNum = 0;
$functionOver = false;
do {
$skip = false;//是否跳过当前这个字符
/*检测当前代码引号情况*/
if ($str[$i] == '"' || $str[$i] =="'") {
if (!$quotes2) {
//说明当前没有进入引号
$quotes2 = $str[$i];
} else {
if ($quotes2 == $str[$i] && $last != "\\") {
//说明是真的遇到结尾了
$quotes2 = '';
}
}
}
/*去掉//的注释*/
if ($str[$i] == '/' && $last == $str[$i] && !$quotes2) {
//去掉最后一个字符
$newstr = substr($newstr, 0, -1);
$ls = substr($ls, 0, -1);
/*删除字符串前面的空格*/
$newstr = trim($newstr);
do{
$i++;
if ($str[$i] == "\n") {
$skip = true;
break;
}
} while(1);
continue;
}
/*去掉/*的注释*/
if ($str[$i] == '*' && $last == '/' && !$quotes2) {
$last_last = '/';
$newstr = substr($newstr, 0, -1);
$ls = substr($ls, 0, -1);
/*删除字符串前面的空格*/
$newstr = trim($newstr);
do{
$i++;
if (($str[$i] == '/' && $last_last == '*') || ($i >= $len)) {
$skip = true;
break;
}
$last_last = $str[$i];
} while(1);
continue;
}
/*检测当前是否在某个变量内*/
if ($str[$i] == '$' && !$quotes2) {
$var2 = true;
/*去寻找这个类的成员变量*/
//往前循环看看
$varStr = '';
for ($vari = $i; $vari > 0; $vari--) {
if ($str[$vari] == "\n") {
$varStr = strrev($varStr);
break;
}
$varStr .= $str[$vari];
}
/*将匹配到的旧的全部去掉*/
$newstr = substr($newstr, 0, $vari-$i);
$ls = substr($ls, 0, $vari-$i);
$skip = true;
do {
$i++;
if ($str[$i] == "\n") {
$varStr = trim($varStr);
$this->saveRow('var', $varStr);
$alldata['var'][] = $varStr;
break;
}
$varStr .= $str[$i];
} while (1);
}
//检测是否有function
if (!$var2 && !$quotes2 && $lastArr[0] == 'n' && $lastArr[1] == 'o' && $lastArr[2] == 'i' && $lastArr[3] == 't' && $lastArr[4] == 'c' && $lastArr[5] == 'n' && $lastArr[6] == 'u' && $lastArr[7] == 'f') {
if (!preg_match('/^[\s\t]$/', $str[$i])) {
} else {
// $func_num = count($alldata['function']);
//往前循环看看有没有abstract,final等词语
$eachStr2 = '';
for ($eachi2 = $i - 1; $eachi2 > 0; $eachi2--) {
if ($str[$eachi2] == "\n") {
break;
}
$eachStr2 .= $str[$eachi2];
}
/*将匹配到的旧的全部去掉*/
$newstr = substr($newstr, 0, $eachi2-$i);
$ls = substr($ls, 0, $eachi2-$i);
$skip = true;
if (trim($ls) && trim($ls) != '}') {
$block_count = count($alldata['block']);
if (trim(trim($ls), '{')) {
$alldata['block'][$block_count] = trim(trim($ls), '{');
$this->saveRow('block', $alldata['block'][$block_count]);
}
// echo trim($alldata['block'][$block_count])."\n";
$ls = '';
}
$alldata['function'][$functionNum] = '';
//构建新的变量
$quotes4 = '';//空表示不再引号内,否则值为对应引号
$var4 = false;//false表示不是变量,true表示正处在一个变量中
$funKV = array();
$funValue = '';
$lastI = $i;
do{
$last = $str[$i];
$i++;
/*检测当前代码引号情况*/
if ($str[$i] == '"' || $str[$i] =="'") {
if (!$quotes4) {
//说明当前没有进入引号
$quotes4 = $str[$i];
} else {
if ($quotes4 == $str[$i] && $last != "\\") {
//说明是真的遇到结尾了
$quotes4 = '';
}
}
}
/*检测当前是否在某个变量内*/
if ($str[$i] == '$' && !$quotes4 && !$var4) {
$var4 = true;
$funVar = '';
while(1) {
$i++;
if (!preg_match('/[a-zA-Z0-9_\s\t]/', $str[$i])) {
$var4 = false;
if (trim($funVar)) {
$funKV[trim($funVar)] = null;
}
if ($str[$i] != '=') {
$funValue = false;
} else {
$funValue = '';
}
break;
}
$funVar .= $str[$i];
}
}
if ($funValue !== false)
$funValue .= $str[$i];
if (!$var4 && !$quotes4 && ($str[$i] == ',' || $str[$i] == ')')){
$funValue = substr(trim($funValue), 1, -1);
if (trim($funValue)) {
$funKV[trim($funVar)] = trim($funValue);
}
}
$rrrr = trim(trim(trim($alldata['function'][$functionNum]), '{'));
if (!$quotes4 && preg_match('/\)[\s\t\n\r]*?\{/', $alldata['function'][$functionNum])) {
/*不要忘了最后一个变量*/
$funValue = substr(trim($funValue), 0, -1);
if ($funValue) {
$funKV[$funVar] = $funValue;
}
// $alldata['function'][$functionNum] = array('str' => $rrrr);
// $alldata['function'][$functionNum]['prev'] = strrev(trim($eachStr2));
// $this->saveRow('function', $alldata['function'][$functionNum]['prev']. ' ' . $alldata['function'][$functionNum]['str']);
break;
}
$alldata['function'][$functionNum] .= $str[$i];
} while(1);
$i = $lastI;
$alldata['function'][$functionNum] = '';
do{
$i++;
$rrrr = trim(trim(trim($alldata['function'][$functionNum]), '{'));
if (!$quotes4 && preg_match('/\)[\s\t\n\r]*?\{/', $alldata['function'][$functionNum])) {
$alldata['function'][$functionNum] = array('str' => $rrrr);
$alldata['function'][$functionNum]['prev'] = strrev(trim($eachStr2));
$this->saveRow('function', $alldata['function'][$functionNum]['prev']. ' ' . $alldata['function'][$functionNum]['str']);
$functionName = explode('(', $alldata['function'][$functionNum]['str'])[0];
//函数名称 fuunctionName
// var_dump($functionName);
// die;
break;
}
$alldata['function'][$functionNum] .= $str[$i];
} while(1);
// var_dump($funKV);
// die;
/*开始进入function*/
/*---------------------------------------------------entry function-------------------------------------------------*/
/*---------------------------------------------------entry function-------------------------------------------------*/
/*---------------------------------------------------entry function-------------------------------------------------*/
/*---------------------------------------------------entry function-------------------------------------------------*/
/*---------------------------------------------------entry function-------------------------------------------------*/
//构建新的变量
$quotes3 = '';//空表示不再引号内,否则值为对应引号
$var3 = false;//false表示不是变量,true表示正处在一个变量中
$ceng = 0;//用来表示大括号进入的层级
$ls = '';
do {
$skip = false;//是否跳过当前这个字符
/*检测当前代码引号情况*/
if ($str[$i] == '"' || $str[$i] =="'") {
if (!$quotes3) {
//说明当前没有进入引号
$quotes3 = $str[$i];
} else {
if ($quotes3 == $str[$i] && $last != "\\") {
//说明是真的遇到结尾了
$quotes3 = '';
}
}
}
/*去掉//的注释*/
if ($str[$i] == '/' && $last == $str[$i] && !$quotes3) {
//去掉最后一个字符
$newstr = substr($newstr, 0, -1);
$ls = substr($ls, 0, -1);
/*删除字符串前面的空格*/
$newstr = trim($newstr);
do{
$i++;
if ($str[$i] == "\n") {
$skip = true;
break;
}
} while(1);
continue;
}
/*去掉/*的注释*/
if ($str[$i] == '*' && $last == '/' && !$quotes3) {
$last_last = '/';
$newstr = substr($newstr, 0, -1);
$ls = substr($ls, 0, -1);
/*删除字符串前面的空格*/
$newstr = trim($newstr);
do{
$i++;
if (($str[$i] == '/' && $last_last == '*') || ($i >= $len)) {
$skip = true;
break;
}
$last_last = $str[$i];
} while(1);
continue;
}
/*检测当前是否在某个变量内*/
if ($str[$i] == '$' && !$quotes3) {
$var3 = true;
}
if (!$var3 && !$quotes3 && $str[$i] == '{') {
$ceng++;
}
//检查当前是否离开某个变量
if ($var3 && !preg_match('/[a-zA-Z0-9_]/', $str[$i])) {
$var3 = false;
// echo ++$kaa;
}
if (array_unshift($lastArr, $str[$i]) > 20) {
array_pop($lastArr);
}
$last = $str[$i];
if (!$var3 && !$quotes3 && $str[$i] == '}') {
$ceng--;
// echo $ceng;
// var_dump(strrev(implode('', $lastArr)));
if ($ceng < 0) {
//计算这个function中的block
if (trim($ls)) {
$block_count = count($alldata['block']);
if (trim(trim($ls), '{')) {
$alldata['block'][$block_count] = trim(trim($ls), '{');
$this->saveRow('block', $alldata['block'][$block_count]);
}
// echo trim($alldata['block'][$block_count])."\n";
$ls = '';
}
$i++;
break;
}
}
if (!$skip) {
$newstr .= $str[$i];
$ls .= $str[$i];
}
$i++;
} while(1);
$this->saveRow('function', '}');
/*---------------------------------------------------O U T function-------------------------------------------------*/
/*---------------------------------------------------O U T function-------------------------------------------------*/
/*---------------------------------------------------O U T function-------------------------------------------------*/
/*---------------------------------------------------O U T function-------------------------------------------------*/
/*---------------------------------------------------O U T function-------------------------------------------------*/
// var_dump($funKV);
// echo '-------------------------------------'."\n\n";
$insert_type = preg_replace('/[\s\t\n\r]*function/', '', $alldata['function'][$functionNum]['prev']);
// var_dump($insert_type);
foreach ($funKV as $s => $t) {
$insert_l = array();
$insert_l['number'] = $this->dbNumber;
$insert_l['type'] = $insert_type;
$insert_l['name'] = $functionName;
$insert_l['var'] = $s;
$insert_l['val'] = $t;
$insert[] = $insert_l;
}
$functionNum++;
}
}
// echo $str[$i];
//检查当前是否离开某个变量
if ($var2 && !preg_match('/[a-zA-Z0-9_]/', $str[$i])) {
$var2 = false;
// echo ++$kaa;
}
if (array_unshift($lastArr, $str[$i]) > 20) {
array_pop($lastArr);
}
$last = $str[$i];
if (!$skip) {
$newstr .= $str[$i];
$ls .= $str[$i];
}
if ($str[$i] == '}') {
$functionOver = false;
break;
}
$i++;
} while(1);
$this->saveRow('class', '}');
}
/*----------------------------------------------------------over类--------------------------------------------------------*/
/*----------------------------------------------------------over类--------------------------------------------------------*/
/*----------------------------------------------------------over类--------------------------------------------------------*/
/*----------------------------------------------------------over类--------------------------------------------------------*/
/*----------------------------------------------------------over类--------------------------------------------------------*/
}
}
/*检测public 或者 private 或者protected */
// final abstract implents
//检查当前是否离开某个变量
if ($var && !preg_match('/[a-zA-Z0-9_]/', $str[$i])) {
$var = false;
// echo ++$kaa;
}
if (array_unshift($lastArr, $str[$i]) > 25) {
array_pop($lastArr);
}
$last = $str[$i];
if (!$skip) {
$newstr .= $str[$i];
$ls .= $str[$i];
}
// echo $str[$i];
}
// echo $newstr;
// preg_match_all('/namespace.+?\;/', $newstr, $namespace);
Db::name('source_function')->insertAll($insert);
/*从数据读出数据并echo出来*/
echo $this->saveFile($this->dbNumber);
}
private function saveRow($type, $content)
{
Db::name('source')->insert(
['type' => $type, 'content' => $content, 'number' => $this->dbNumber]
);
}
private function saveFile($number)
{
$rows = Db::name('source')
->where('number', $number)
->select();
$result = "<?php\n";
foreach ($rows as $value) {
switch ($value['type']) {
case 'namespace':
$result .= 'namespace ' . $value['content'] . ";\n\n";
break;
case 'use':
$result .= 'use ' . $value['content'] . ";\n";
break;
case 'block':
case 'var':
$result .= $value['content'] . "\n";
break;
case 'class':
if ($value['content'] == '}')
$result .= $value['content'] . "\n";
else
$result .= "\n" . $value['content'] . "\n{" . "\n\t";
break;
case 'function':
if ($value['content'] == '}')
$result .= "\t" . $value['content'] . "\n";
else
$result .= "\n\t" . $value['content'] . "\n\t{" . "\n\t\t";
break;
default:
break;
}
}
return $result;
}
}
- Springboot 上传CSV文件并将数据存入数据库
.xml文件依赖配置 <!--csv依赖 --> <dependency> <groupId>org.apache.commons</groupId> ...
- 2018年,请不要再使用OLE生成EXCEL文件
输出EXCEL文件是ABAP开发工作中的常见需求,为了学习相关技术,我翻译过一篇文章:使用OLE2对象创建EXCEL文件,并且一度乐在其中. 最近几个月,经过与若干EXCEL打印程序的艰苦斗争,以及对 ...
- ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(四)
这是第四步点击保存将信息存入数据库中. 这个就简单了利用ajax将JSON字符串传到后台然后这里有个知识点就是将DataTable直接存入数据库中.代码如下: 一.界面获取数据JS代码: //保存订单 ...
- WPF根据Oracle数据库的表,生成CS文件小工具
开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...
- 解析Excel文件并把数据存入数据库
前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...
- 使用joomla通过CSV文件上传数据存入数据库并使用JavaScript验证码是否符合规则
1,实现效果截图 2,A.php上传CSV文件表单 2-1:html结构使用jqeury.form.min.js表单框架异步提交 <div class="uploadFile bord ...
- Excel数据导入数据库的SQL快速生成
=CONCATENATE("insert into table_name(id, code, name, remark) values (uuid(),'",B2,"', ...
- python xlwt模块生成excel文件并写入数据 xlrd读取数据
python中一般使用 xlwt (excel write)来生成Excel文件(可以控制单元格格式),用 xlrd 来读取Excel文件,用xlrd读取excel是不能对其进行操作的. 1.xlrd ...
- 【JVM】Java中的JavaCore/HeapDump文件及其分析方法
产生时间 Java程序运行时,有时会产生JavaCore及HeapDump文件,它一般发生于Java程序遇到致命问题的情况下. 有时致命问题发生后,Java应用不会死掉,还能继续运行: 但有时致命问题 ...
随机推荐
- Oracle 备份与恢复
在进行生产服务器升级.或更换数据库服务器.搭建测试环境时,需要对生产数据库进行备份以及将来可能的还原. 1.expdp导出 expdp DMS version directory=DATA_PUMP_ ...
- C语言一个程序的存储空间
按区域划分: 堆区:自动分配内存区.//堆栈段 栈区:手动分配内存区.//堆栈段 全局(静态)区:静态变量和全局变量.//数据段(读写) 常量区:存放const全局变量和字符串常量.//数据段(只读) ...
- USB包格式解析(转)
本文对应usb2.0协议的第八章Protocol Layer. 数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN.OUT.SETUP),事务最后构成传输(中断传输 ...
- linux 的基础命令
date 查看时间 cal 查看日历 cal 2009 cal 10 2019 ls 查看目录下的内容 ls -alh tree 以树的形式查看目录内容 bc 计算器 M ...
- JAVA RPC (五) 之thrift序列化RPC消息体
让大家久等了.继续更新thrift序列化的消息体,下面我们一步一步的看一看thrift的rpc是怎么实例化消息体的. 首先我们先准备一个request文件 namespace java bky str ...
- NodeJS笔记(六)-Express HTTP服务器启动后如何关闭
npm start启动网站,提示“3000”端口已经被使用的问题 nodejs WEB服务器并不随着cmd的关闭而终止 查看任务管理器可以看到nodejs的启动进程 可以手动关闭 如果是一直处于cmd ...
- 批量将PowerDesigner中表字段由小写变成大写
通过以下VB脚本即可批量修改,在Tools=>Execute Commands下的Edit/Run Scripts,或者通过Ctrl+Shift+X运行以下脚本即可: '************ ...
- Angular+NodeJs+MongoDB搭建前后端程序
get请求: //angular 前端get请求 this.client.get('http://localhost:3000/id/tom').subscribe(data => { cons ...
- tesseract库
1.简介 # -*-coding:utf8 -*- #图形验证码识别技术 ''' 阻碍我们爬虫的,有时候是在登录或者请求一些数据时候的图形验证码.因此这里我们讲解 一种能将图片翻译成文字的技术.将图片 ...
- flask shell命令
在flask项目目录下,使用pipenv shell激活flask虚拟环境后,调用flask shell能够使用虚拟环境的python解释器进入交互式环境,并且工作目录还保留在flask项目目录. f ...