首页
友人帐
留言板
关于
Search
1
IDE Eval Resetter:JetBrains 全家桶无限试用插件
552 阅读
2
影视资源采集站收录大全
489 阅读
3
linux安装或升级protoc
336 阅读
4
HEU KMS Activator v23.1.0 win10 office2019激活工具
235 阅读
5
Cloudflare国内自选IP节点整理收录
228 阅读
谈天说地
程序源码
技术教程
成品源码
登录
Search
标签搜索
PHP
linux
源码
go
windows
centos
原创
mysql
微信
激活
采集
宝塔
绿色版
API
解析
SDK
图片
破解
域名
html
云青
累计撰写
150
篇文章
累计收到
165
条评论
首页
栏目
谈天说地
程序源码
技术教程
成品源码
页面
友人帐
留言板
关于
搜索到
44
篇与
的结果
2021-09-15
一个漂亮的单文件PHP目录程序
介绍Files Photo Gallery是一个单文件PHP目录程序,可以放置到服务器上的任何目录,立即拥有一个文件和文件夹预览目录。它支持所有文件类型,并允许您预览图像、视频、音频和代码。链接官网: https://files.photo.gallery演示: https://files.photo.gallery/demo文档: https://forum.photo.gallery/viewtopic.php?f=66&t=9964源码:https://cdn.jsdelivr.net/npm/files.photo.gallery/index.php支持单个文件只需将其放入服务器上的任何目录即可。实时搜索和排序文件。高级列表和库布局,可以实时切换。预览 IPTC、EXIF 和 GPS 地图以查看您的照片。使用缓存机制和 CDN 快速加载。高级树菜单导航显示整个目录结构。美丽的代码荧光笔来查看和编辑代码格式。可选登录以保护访问。安装将下载得到的index.php文件放置到需要的网站目录,打开目录即可;PHP版本需要5.5以上,PHP扩展程序安装需求:GD mbstring fileinfo exif宝塔面板安装PHP时已经默认安装了GD和mbstring扩展程序,所以无需额外安装如果没有别的需求也可以不用安装fileinfo和exif扩展,程序依然可以正常使用破解Files Photo Gallery是完全开源的,免费版和授权版一致,没有任何区别只是免费版每次会弹出授权窗口,点击一下No thanks!即可关闭破解授权有两个方法,一是JS本地化,二是JS网络化,当然JS网络化会更加方便快捷JS本地化:打开index.php找到代码:<script src="<?php echo config$assets ?>js/files.js"></script>将其替换为:<script src="js/files.js"></script>再在同目录新建名为js的文件夹,然后下载files.js文件放置在其中即可;files.js文件下载地址:https://cdn.jsdelivr.net/gh/sunpma/cdn/other/files.jsJS网络化:打开index.php找到代码:<script src="<?php echo config$assets ?>js/files.js"></script>将其替换为如下代码即可;替换代码:<script src="https://cdn.jsdelivr.net/gh/sunpma/cdn/other/files.js"></script>常用配置参数// 根目录配置 'root' => '', // 相对路径或者绝对路径,不填代表当前目录,二级目录无需 / 符号 'start_path' => false, // 分配加载到视图中的第一个目录,默认情况下,该目录与root目录相同 // 授权登录 'username' => '', // 用户账号(留空关闭) 'password' => '', // 用户密码(留空关闭) // 排除文件或者目录 'files_exclude' => '', // '/\.(png|jpe?g)$/i' / 解释:排除后缀png.jpeg.jpg 'dirs_exclude' => '', // '/\/AAA|\/doc|\/222(\/|$)/i' / 解释:排除目录AAA.doc.222 // 菜单 'menu_enabled' => true // 启用或禁用左侧文件夹菜单 'menu_show' => true // 文件夹菜单展开或折叠 'menu_sort' => 'name_asc' // 左侧文件夹菜单排序 / name_asc,name_desc,date_asc,date_desc // 布局 'layout' => 'rows' // 主视图区域布局,包括选项 列表,块,网格,行和列 'sort' => 'name_asc' // 主视图区域默认排序 / name_asc,name_desc,date_asc,date_desc使用插件(非必选)下载插件 下载地址:https://cdn.jsdelivr.net/gh/qiantigers/files.photo.gallery@1.1/_files/plugins/tasks.php安置tasks.php 将其放到_files/plugins/使用方法 1. ?task= 放在链接后,举个例子:https://www.a.com/?task=create_cache / menu / folders / images / all / force / dir / ignore_max_depth / time_limit 缓存设置,比如缓存所有图片缩略图,举个例子:https://www.a.com/?task=create_cache&images 3. clear_cache / menu / folders / images / all / force / time_limit 清除缓存,比如删除图片缓存,举个例子:https://www.a.com/?task=clear_cache&images 4. create_html 缓存html,举个例子:https://www.a.com/?task=create_html 使用完插件把插件文件进行改名或者删除,需要时再使用,否则小心被人恶意乱搞哦~结语 这是一款简约而不简单,轻量而不轻薄的PHP应用
2021年09月15日
35 阅读
0 评论
0 点赞
2021-06-21
php调用java类
参考:https://blog.csdn.net/qq_35921925/article/details/108110519http://www.piaoyi.org/php/php-java-bridge-jar-class.html一、centos下 PHP 调用 jar包1.准备工作1.1、php环境【php7.2】,并且将php.ini中的allow_url_include改为On1.2、安装java环境yum install java2.下载 JavaBridge.jar(快捷下载)JavaBridge.jar和Java.inc下载地址: http://php-java-bridge.sourceforge.net/pjb/download.php打一个jar包,将打包好的jar包以及JavaBridge.jar放到ext目录里面cp Hello.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext cp JavaBridge.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext启动JavaBridge.jarjava -jar JavaBridge.jar SERVLET:8080 3 JavaBridge.log新建一个php站点,把Java.inc放到根目录,新建index.php,index.php内容如下<?php header( 'Content-Type: text/html; charset=UTF-8' ); define("JAVA_DEBUG", true); //调试设置 define("JAVA_HOSTS", "127.0.0.1:8080"); //设置javabridge监听端口 /*0: Log nothing, not even fatal errors. 1: Log fatal system errors such as "out of memory error". 2: Log java exceptions.*/ define("JAVA_LOG_LEVEL", 2); //java.log_level: 0-6 require_once "Java.inc"; //php调用java的接口,与该脚本位于同一目录 java_set_file_encoding("UTF-8"); //设置JAVA编码。 $ob = new Java("Hello"); //实例 try{ $res = $ob->h('1333'); echo $res; } catch(Exception $e) { var_dump($e); } // 输出 1333【一些注意事项】:关于PHP-Java-Bridge的各种函数使用:1、高版本的java_require不再使用,也无法使用,由于放到java虚拟机下面,则不需要再手动引入包文件。2、java_value()用于获取值,而且必须使用该函数获取值。(特别注意:如果该值需要存入数据库,那么必须使用该java_value函数,不然会报错,或者无法存入数据库)3、java_inspect()对实例化或者方法进行print_r类似的输出。(注:请不要直接使用var_dump这样的输出方法输出java的类、方法、变量,需要使用java_inspect或者java_value,例如:var_dump(java_inspect($abc)))4、实例化使用 $test = new Java("Test")的方式,如果实例化的方法中存在参数,可以这样new Java("Test","pram")提醒:1、务必确保对java.inc的引用,确保引用正确2、务必确保对jar包放在能引用的地方,比如java虚拟机jre下面3、在PHP中调用Java使用PHP的的写法即可
2021年06月21日
69 阅读
0 评论
0 点赞
2021-05-07
分享自己封装的mysql类 基于pdo
分享自己封装的mysql类 基于pdo由于经常开发小型系统用不到框架,用原生写又太麻烦干脆封装一个MySQL操作类用了连贯操作 用法和tp相似 上手快 Db.zip用法 $res = Db::table('tbl_user')->where('id', 1)->find(); // 获取单个数据 $res = Db::table('tbl_user')->order('id', 'desc')->select(); // 获取结果集 排序 $res = Db::instance()->getLastSql(); // 获取上次执行的sql $res = Db::table("tbl_user")->where('id', 2)->update(['name' => '云青']); // 更新数据 $res = Db::table("tbl_user")->insert(['account' => 'acc', 'name' => 123]); // 插入单个数据 并返回插入id $res = Db::table("tbl_user") ->insertAll( [ ['account' => 'test1', 'name' => 'test1'], ['account' => 'test2', 'name' => 'test2'] ] ); // 批量插入数据 $res = Db::table('tbl_user')->where('id', 5)->delete(); // 删除数据 $res = Db::table('tbl_user')->tbFields(); // 获取数据表字段 $res = Db::table('tbl_user')->count('id'); // 统计数据条数 $res = Db::table('tbl_user')->field('id')->sum(); // 统计id和 $res = Db::table('tbl_user')->doSql("select * from tbl_user"); // 自定义sql $res = Db::instance()->startTrans(); // 开启事务 $res = Db::table("tbl_user") ->insertAll( [ ['account' => 'test1', 'name' => 'test1'], ['account' => 'test2', 'test2' => 'test2'] ] ); // 批量插入数据 $res = Db::instance()->commit(); // 提交 $res = Db::instance()->rollback(); // 回滚 $res = Db::table('tbl_user') ->field('id') ->whereIn('account', 'test1,test2') ->where('id', '!=', 2) ->select(); // whereIn $res = Db::table('tbl_user') // whereIn ->field('id') ->whereIn('account', 'test1,test2') ->whereIn('name', ['test1', 'test2'], 'or') ->where('pmid', '=', 0) ->select();封装类<?php /** * @author anderyly * @email admin@aaayun.cc * @link http://vclove.cn/ * @copyright Copyright (c) 2018 */ namespace ay\lib; class Db { private static $db; private $dbType = 'mysql'; private $pConnect = true; private static $table; private $host; private $port; private $dbName; private $user; private $pass; private $group = ''; private static $sql = false; //最后一条sql语句 private $where = ''; private $order = ''; private $limit = ''; private $field = '*'; private $clear = 0; //状态,0表示查询条件干净,1表示查询条件污染 private static $trans = 0; //事务指令数 /** * 初始化 * Dc constructor. * @param null $conf 数据库配置 */ public function __construct($conf = null) { class_exists('PDO') or halt("PDO模块不存在"); if (is_null($conf)) { $conf = C(); } $this->dbType = $conf['DB_TYPE']; $this->host = $conf['DB_HOST']; $this->port = $conf['DB_PORT']; $this->user = $conf['DB_USER']; $this->pass = $conf['DB_PASS']; $this->dbName = $conf['DB_NAME']; //连接数据库 if (is_null(self::$db)) { $this->connect(); } } /** * PDO连接数据库 * @throws \Exception */ private function connect() { $dsn = $this->dbType . ':host=' . $this->host . ';port=' . $this->port . ';dbname=' . $this->dbName; $options = $this->pConnect ? [\PDO::ATTR_PERSISTENT => true] : []; try { $dbh = new \PDO($dsn, $this->user, $this->pass, $options); $dbh->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false); } catch (\PDOException $e) { throw new \Exception('Connection failed: ' . $e->getMessage()); } $dbh->exec('SET NAMES utf8'); self::$db = $dbh; } /** * @return object */ public static function instance() { return new self(); } /** * 设置数据表名 * @param $table * @return object */ public static function name($table) { if (empty($table)) { halt('不能设置数据表名为空'); } $tableS = C('DB_PRE') . $table; self::$table = self::addChar($tableS); return new self(); } /** * 设置数据表名 * @param $table * @return object */ public static function table($table) { if (empty($table)) { halt('不能设置数据表名为空'); } self::$table = self::addChar($table); return new self(); } /** * 设置当前数据表别名 * @param $alias * @return object */ public function alias($alias): object { if (empty($alias) or empty(self::$table)) { halt('数据库表名设置别名为空'); } self::$table .= ' AS ' . $alias; return $this; } private static function addChar($value, $num = 0) { if (strpos($value, "`") === false and $num == 1 and !is_int($value)) { $data = "'" . trim($value) . "'"; } else if (strpos($value, "`") === false and !is_int($value) and $num != 1) { $data = "`" . trim($value) . "`"; } else { $data = trim($value); } return $data; } /** * 执行查询 主要针对 SELECT, SHOW 等指令 * @param string $sql * @return mixed */ public function doQuery($sql = '', $options = true) { self::$sql = $sql; if ($options) { $result = self::$db->query(self::$sql)->fetchAll(\PDO::FETCH_ASSOC); } else { $result = self::$db->query(self::$sql)->fetch(\PDO::FETCH_ASSOC); } return $result; } /** * 执行语句 针对 INSERT, UPDATE 以及DELETE,exec结果返回受影响的行数 * @param string $sql * @return mixed */ public function doExec($sql = '', $op = '') { self::$sql = $sql; $res = self::$db->exec(self::$sql); if ($op == 'insert') { $res = $this->getLastInsId(); } return $res; } /** * 执行sql语句,自动判断进行查询或者执行操作 * @param string $sql SQL指令 * @return mixed */ public function doSql($sql = '') { $queryIps = 'INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|LOAD DATA|SELECT .* INTO|COPY|ALTER|GRANT|REVOKE|LOCK|UNLOCK'; if (preg_match('/^\s*"?(' . $queryIps . ')\s+/i', $sql)) { return $this->doExec($sql); } else { return $this->doQuery($sql); } } /** * 获取上一次查询的sql * @return string */ public function getLastSql() { return self::$sql; } /** * 插入方法 * @param array $data * @return mixed * @throws \Exception */ public function insert(array $data) { $data = $this->dataFormat($data); if (!$data) { exit('插入数据不能为空'); } $sql = 'INSERT INTO ' . self::$table . '(' . implode(',', array_keys($data)) . ') VALUES(' . implode(',', array_values($data)) . ')'; return $this->doExec($sql, 'insert'); } /** * 批量插入方法 * @param array $data * @return mixed * @throws \Exception */ public function insertAll(array $data) { $value = '('; foreach ($data as $k => $v) { foreach ($v as $k1 => $v1) { $value .= "'" . $v1 . "',"; } $value = rtrim($value, ','); $value .= '), ('; } $value = rtrim($value, ', ('); $sql = 'INSERT INTO ' . self::$table . '(' . implode(',', array_keys($data[0])) . ') VALUES ' . $value; return $this->doExec($sql, false); } /** * 获取最后一次插入时的ID * @return mixed */ public function getLastInsId() { $sql = 'SELECT LAST_INSERT_ID()'; $res = $this->doQuery($sql, false); return isset($res['LAST_INSERT_ID()']) ? $res['LAST_INSERT_ID()'] : 'false'; } /** * 删除方法 * @return mixed * @throws \Exception */ public function delete() { //安全考虑,阻止全表删除 if (!trim($this->where)) { exit('删除条件禁止为空'); } $sql = 'DELETE FROM ' . self::$table . ' ' . $this->where; $this->clear = 1; $this->clear(); return $this->doExec($sql); } /** * 更新方法 * @param array $data * @return mixed|void * @throws \Exception */ public function update(array $data) { //安全考虑,阻止全表更新 if (!trim($this->where)) { exit('更新条件禁止为空'); } $data = $this->dataFormat($data); if (!$data) { return; } $valArr = array(); foreach ($data as $k => $v) { $valArr[] = $k . '=' . $v; } $valStr = implode(',', $valArr); $sql = 'UPDATE ' . trim(self::$table) . ' SET ' . trim($valStr) . ' ' . trim($this->where); return $this->doExec($sql); } /** * 更新语句 字段值加 $number * @param array|string $field * @param null $number * @return mixed|void * @throws \Exception */ public function setInc($field, $number = null) { //安全考虑,阻止全表更新 if (!trim($this->where)) { exit('更新条件禁止为空'); } if (is_array($field)) { $data = $this->dataFormat($field); if (!$data) { return; } $valArr = array(); foreach ($data as $k => $v) { $valArr[] = $k . '=' . $k . '+' . $v; } $valStr = implode(',', $valArr); $sql = 'UPDATE ' . trim(self::$table) . ' SET ' . trim($valStr) . ' ' . trim($this->where); } else if (is_string($field) and is_null($number)) { $sql = 'UPDATE ' . trim(self::$table) . ' SET ' . self::addChar($field) . '=' . self::addChar($field) . '+1 ' . trim($this->where); } else { $sql = 'UPDATE ' . trim(self::$table) . ' SET ' . self::addChar($field) . '=' . self::addChar($field) . '+' . self::addChar($number, 1) . ' ' . trim($this->where); } return $this->doExec($sql); } /** * 更新语句 字段值减 $number * @param array|string $field * @param null $number * @return mixed|void * @throws \Exception */ public function setDec($field, $number = null) { //安全考虑,阻止全表更新 if (!trim($this->where)) { exit('更新条件禁止为空'); } if (is_array($field)) { $data = $this->dataFormat($field); if (!$data) { return; } $valArr = array(); foreach ($data as $k => $v) { $valArr[] = $k . '=' . $k . '-' . $v; } $valStr = implode(',', $valArr); $sql = 'UPDATE ' . trim(self::$table) . ' SET ' . trim($valStr) . ' ' . trim($this->where); } else if (is_string($field) and is_null($number)) { $sql = 'UPDATE ' . trim(self::$table) . ' SET ' . self::addChar($field) . '=' . self::addChar($field) . '-1 ' . trim($this->where); } else { $sql = 'UPDATE ' . trim(self::$table) . ' SET ' . self::addChar($field) . '=' . self::addChar($field) . '-' . self::addChar($number, 1) . ' ' . trim($this->where); } return $this->doExec($sql); } /** * 查询函数 * @return array|boolean 结果集 */ public function select() { $sql = 'SELECT ' . trim($this->field) . ' FROM ' . self::$table . ' ' . trim($this->where) . ' ' . trim($this->order) . ' ' . trim($this->limit) . " " . trim($this->group); $this->clear = 1; $this->clear(); $res = $this->doQuery(trim($sql)); return isset($res[0]) ? $res : []; } /** * 查询函数 * @return array|boolean 结果集 */ public function find() { $sql = "SELECT " . trim($this->field) . " FROM " . self::$table . " " . trim($this->where) . " " . trim($this->order) . " " . trim(" LIMIT 1") . " " . trim($this->group); $this->clear = 1; $this->clear(); return $this->doQuery(trim($sql), false); } /** * 设置条件 * @param string | array $option * @param string $where * @param string $value * @return $this */ public function where($option, $where = null, $value = null) { if ($this->clear > 0) { $this->clear(); } // 判断之前是否使用where语句 if (strpos($this->where, 'WHERE')) { $this->where .= ' AND '; $useWhere = 1; } else { $this->where = ' WHERE '; } // 判断第一个参数为字符 if (is_string($option)) { // 当三个参数都为字符串 if (!is_null($value)): $this->where .= $option . $this->whereTo($where) . $this->addChar($value, 1); endif; // 当第三个参数不存在 if (is_null($value)) { $this->where .= $option . '=' . $this->addChar($where, 1); } else if (is_null($where)) { // 当第二个参数不存在 $this->where .= $option; } } else if (is_array($option)) { // 当第一个参数为数组 $qz = "("; foreach ($option as $v) { // 当第一个参数循环后为数组 if (is_array($v)) { if (strstr($this->where, '(')) { $qz = ' '; } if (isset($useWhere)) { $qz = '('; unset($useWhere); } $condition = $qz . $this->addChar($v[0], 'where') . ' ' . $v[1] . ' ' . $this->addChar($v[2], 1); } else { $this->where .= ' ' . $this->addChar($option[0]) . $option[1] . $option[2]; $cc = 1; break; } $logIc = isset($v[3]) ? ' ' . $v[3] : ' AND'; $this->where .= isset($mark) ? $logIc . $condition : $condition; $mark = 1; } if (!isset($cc)) { $this->where .= ')'; } } return $this; } private function whereTo($field) { switch ($field) { case ($field == 'neq' or $field == '!='): return '!='; case ($field == 'eq' or $field == '='): return '='; case ($field == 'like' or $field == '%'): return 'LIKE'; default: return $field; } } /** * 设置条件 * @param string $option * @param string | array $value * @return $this */ public function whereIn($option, $value, $tj = 'AND') { if ($this->clear > 0) { $this->clear(); } // 判断之前是否使用where语句 if (strpos($this->where, 'WHERE')) { $this->where .= ' ' . $tj . ' '; $useWhere = 1; } else { $this->where = ' WHERE '; } $arr = explode(',', $value); $str = ''; foreach ($arr as $v) { $str .= $this->addChar($v, 1) . ','; } $str = rtrim($str, ','); // 判断第一个参数为字符 if (is_string($value)) { $this->where .= $option . " IN (" . $str . ")"; } else if (is_array($value)) { $str = ''; foreach ($value as $v) { $str .= $this->addChar($v, 1) . ','; } $str = rtrim($str, ','); $this->where .= $option . " IN (" . $str . ")"; } return $this; } /** * 设置条件 * @param $option * @param string $where * @param string $value * @return $this */ public function whereOr($option, $where = null, $value = null) { if ($this->clear > 0) { $this->clear(); } if (strpos($this->where, 'WHERE')) { $this->where .= ' OR '; $ss = 1; } else { $this->where = ' WHERE '; } if (is_string($option)) { if (!is_null($value)): $this->where .= $option . $this->whereTo($where) . $this->addChar($value, 1); endif; if (is_null($value)) { $this->where .= $option . '=' . $this->addChar($where, 1); } else if (is_null($where)) { $this->where .= $option; } } else if (is_array($option)) { $qz = '('; foreach ($option as $v) { $logIc = ' AND'; if (is_array($v)) { if (strstr($this->where, '(')) { $qz = ' '; } if (isset($ss)) { $qz = '('; unset($ss); } $condition = $qz . $this->addChar($v[0]) . ' ' . $v[1] . ' ' . $this->addChar($v[2], 1); } else { $this->where .= ' ' . $this->addChar($option[0]) . $option[1] . $option[2]; $cc = 1; break; } if (isset($v[3]) and ($v[3] == 'or' or $v[3] == 'OR')) { $logIc = ' OR'; $this->where .= isset($mark) ? $logIc . $condition : $condition; } else { $this->where .= isset($mark) ? $logIc . $condition : $condition; } $mark = 1; } if (!isset($cc)) { $this->where .= ')'; } } return $this; } /** * 取得数据表的字段信息 * @return array */ public function tbFields() { $sql = 'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="' . str_replace('`', '', self::$table) . '" AND TABLE_SCHEMA="' . $this->dbName . '"'; $res = $this->doQuery($sql); $ret = array(); foreach ($res as $key => $value) { $ret[] = $value['COLUMN_NAME']; } return $ret; } /** * 过滤并格式化数据表字段 * @param $data * @return array */ public function dataFormat($data) { if (!is_array($data)) { return []; } $table_column = $this->tbFields(); $ret = []; foreach ($data as $key => $val): if (!is_scalar($val)) { continue; } if (array_key_exists($key, $table_column)): $key = $this->addChar($key); if (is_int($val)) { $val = intval($val); } else if (is_float($val)) { $val = floatval($val); } else if (preg_match('/^\(\w*(\+|\-|\*|\/)?\w*\)$/i', $val)) { $val = $val; } elseif (is_string($val)) { $val = '"' . addslashes($val) . '"'; } $ret[$key] = $val; endif; endforeach; return $ret; } /** * 排序 * @param $option * @param null $sort * @return $this */ public function order($option, $sort = null) { if ($this->clear > 0) { $this->clear(); } $this->order = ' ORDER BY '; if (!is_null($sort)) { $this->order .= $option . ' ' . $sort; } else if (is_string($option)) { $this->order .= $option; } else if (is_array($option)) { foreach ($option as $k => $v) { $order = $k . " " . $v; $this->order .= isset($mark) ? ',' . $order : $order; $mark = 1; } } return $this; } /** * @param $option * @return $this */ public function group($option) { if ($this->clear > 0) { $this->clear(); } $this->group = ' GROUP BY ' . $option; return $this; } /** * 分页 * @param $page * @param null $pageSize * @return $this */ public function limit($page, $pageSize = null) { if ($this->clear > 0) { $this->clear(); } if ($pageSize === null) { $this->limit = 'LIMIT ' . $page; } else { $pagEval = intval(($page - 1) * $pageSize); $this->limit = 'LIMIT ' . $pagEval . ',' . $pageSize; } return $this; } /** * 设置字段名 * @param $field * @return $this */ public function field($field) { if ($this->clear > 0) { $this->clear(); } $this->field = $field; return $this; } /** * 查询 左右内全 * @param $tab * @param string $where * @param string $join * @return $this */ public function join($tab, $where = '', $join = 'INNER') { if ($this->clear > 0) { $this->clear(); } if (is_array($tab)) { foreach ($tab as $k => $v): $table = $k . ' AS ' . $v; endforeach; } else { $table = str_replace(' ', ' AS ', $tab); } self::$table .= ' ' . $join . ' JOIN ' . $table . ' ON(' . $where . ')'; return $this; } /** * 计数 * @return mixed */ public function count() { if ($this->clear > 0) { $this->clear(); } $sql = 'SELECT count(' . trim($this->field) . ') AS ' . trim($this->field) . ' FROM ' . self::$table . ' ' . trim($this->where) . " " . trim($this->order); $rows = $this->doQuery($sql, false); return $rows[trim($this->field)]; } /** * 统计 * @return mixed */ public function sum() { if ($this->clear > 0) { $this->clear(); } $sql = 'SELECT SUM(' . trim($this->field) . ') AS ' . trim($this->field) . ' FROM ' . self::$table . ' ' . trim($this->where) . " " . trim($this->order); $rows = $this->doQuery($sql, false); return $rows[trim($this->field)]; } /** * 清理标记函数 */ private function clear() { $this->where = ''; $this->order = ''; $this->limit = ''; $this->field = '*'; $this->clear = 0; } /** * 手动清理标记 * @return $this */ public function clearKey() { $this->clear(); return $this; } /** * 启动事务 */ public function startTrans() { //数据rollback 支持 if (self::$trans == 0) { self::$db->beginTransaction(); } self::$trans++; return; } /** * 用于非自动提交状态下面的查询提交 * @return bool */ public function commit() { $result = true; if (self::$trans > 0) { $result = self::$db->commit(); self::$trans = 0; } return $result; } /** * 事务回滚 * @return bool */ public function rollback() { $result = true; if (self::$trans > 0) { $result = self::$db->rollback(); self::$trans = 0; } return $result; } /** * 关闭连接 */ public function close() { if (!is_null(self::$db)) { self::$db = null; } } }
2021年05月07日
31 阅读
1 评论
0 点赞
2021-03-03
微活码管理系统
微活码系统 微信群满100人以后,就不能扫描二维码入群了怎么办? 用活码就能完美解决这个问题。 使用微信群活码工具,二维码永不过期,不受100人限制,对外统一宣传一个固定的二维码,后台可以随时更换群二维码。 每天海量流量。轻轻松松一天加满上百个群! 什么是微信活码? 在我们平台创建一个活码二维码,然后在这个活码后台上传多张你的群二维码,用户扫描活码,就会分配给他一张群二维码。 用户扫描100次(也可以自定义)后自动切换到下一张群二维码! 微信群裂变利器,不受100人扫码限制 微信群营销推广只需一个固定的群活码,多个群二维码自动轮换,每进群100人自动换新群,所有人都可通过扫码进群,快速裂变。永不过期! 个人号营销不受被动加好友数量限制 个人号营销推广只需一个固定不变的客服码,多个微信个人号二维码自动轮换,不受每天被动加好友人数限制,提升推广效率 多维度的数据统计分析,实现精准营销 提供数据统计报告! 提供精美的分析报告,让你的微信营销数据化! 自定义域名 绑定自己的独立域名,增强品牌识别度,降低被封的风险!微信防封等功能售价 3200个人版开源地址 https://gitee.com/anderyly/HuoMaGe图片预览
2021年03月03日
86 阅读
13 评论
0 点赞
2019-12-25
宝塔面板7.X高级破解版代码
宝塔面板 7.0.3 安装命令Centos安装命令:yum install -y wget && wget -O install.sh http://download.miui.uk:25041/install/install_6.0.sh && sh install.sh 试验性Centos/Ubuntu/Debian安装命令支持ipv6,注意使用root权限执行此命令 (支持Centos8)curl -sSO http://download.miui.uk:25041/install/new_install.sh && bash new_install.sh Ubuntu/Deepin安装命令:wget -O install.sh http://download.miui.uk:25041/install/install-ubuntu_6.0.sh && sudo bash install.sh Debian安装命令:wget -O install.sh http://download.miui.uk:25041/install/install-ubuntu_6.0.sh && bash install.sh Fedora安装命令:wget -O install.sh http://download.miui.uk:25041/install/install_6.0.sh && bash install.sh Linux面板7.0.3升级命令:curl http://download.miui.uk:25041/install/update6.sh|bash 插件相关脚本收费Nginx防火墙(面板先安装在执行脚本):wget -O btwaf.sh http://download.miui.uk:25041/install/btwaf.sh && bash btwaf.sh install 免费Nginx防火墙(无需面板安装):wget -O free_btwaf.sh http://download.miui.uk:25041/install/free_btwaf.sh && bash free_btwaf.sh install 收费Apache防火墙(面板先安装在执行脚本)wget -O btwaf_httpd.sh http://download.miui.uk:25041/install/btwaf_httpd.sh && bash btwaf_httpd.sh install 主机异常登录插件脚本wget -O host_login.sh http://download.miui.uk:25041/install/host_login.sh && bash host_login.sh install 河马webshell查杀插件脚本wget -O hm_shell_san.sh http://download.miui.uk:25041/install/hm_shell_san.sh && bash hm_shell_san.sh install 修复工具解除拉黑、解锁文件脚本:wget -O waf.sh http://download.miui.uk:25041/install/waf.sh && bash waf.sh
2019年12月25日
15 阅读
0 评论
0 点赞
1
2
3
...
9