关于php:2022718-魔术方法之-set

魔术办法之 __set一、__set(一)调用机会设置一个类的成员变量时调用。(二)用处用来在类的内部设置公有属性的值。给一个未定义的属性赋值。(三)例子<?phpclass User{ private $name; private $age; public function __set($property,$val){ switch($property){ case 'name': $this->name = $val; break; case 'age': $this->age = $val; break; default: $this->$property = $val; break; } } public function getProperty($property){ return isset($this->$property) ? $this->$property : $property.' 属性不存在!'; }}$user = new User();$user->name = 'Moonshadow';echo $user->getProperty('name')."\n"; // Moonshadowecho $user->getProperty('weight')."\n"; // weight 属性不存在!$user->weight = 'unknow';echo $user->getProperty('weight'); // unknow剖析:当给公有属性 name 赋值时,__set 办法被调用。 (四)留神 __set办法的参数有且只能是2个,一个是属性名,一个是属性要设置的值。多了少了都会报错。 二、参考资料思否-PHP之十六个魔术办法详解

July 19, 2022 · 1 min · jiezi

关于php:ModStart手动执行模块安装命令

模块装置、降级时都会主动执行 modstart:module-install 命令,如果呈现装置降级模块后局部起因未执行迁徙命令(或执行失败),请参考以下命令手动执行。 进入网站根目录cd /wwwroot/xxx.com 手动执行模块装置命令,Xxx为模块标识php artisan modstart:module-install Xxx

July 19, 2022 · 1 min · jiezi

关于php:2022718-技术细节之continue查询相关以及arrayunique

2022年7月18日技术细节之continue、查问相干以及array_unique(一)Q1:continue 前面的语句是否会执行?答案:不会。 例子:拆散区间 [0-9] 之内的奇数与偶数 <?php// 解决 7月18日的问题$even = $odd = [];for($i=0;$i<9;$i++){ if($i % 2 == 0){ $even[] = $i; continue; } $odd[] = $i; }var_dump($even); // [0=>0,1=>2,2=>4,3=>6,4=>8]var_dump($odd); // [0=>1,1=>3,2=>5,3=>7]// 调整一下语句 $even[] = $i 的地位,放到 continue 之后:$even = $odd = [];for($i=0;$i<9;$i++){ if($i % 2 == 0){ continue; $even[] = $i; } $odd[] = $i; }var_dump($even); // []var_dump($odd); // [0=>1,1=>3,2=>5,3=>7]剖析:把 $even[] = $i 的地位,放到 continue 之后,存储偶数的数组就为空。即continue 之后的语句不会执行。 (二)Q2:查问相干如果某条查问语句获取到了数据,然而有些字段的值为空,该用哪个函数去判断?答案:用 empty。 try{ $pdo = new PDO("mysql:host=localhost;dbname=test;",'root','root'); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM user WHERE id = ?"; $stmt = $pdo->prepare($sql); $data = []; if($stmt->execute([21])){ $data = $stmt->fetchAll(PDO::FETCH_ASSOC); } // var_dump($data); // 二维数组 [0=>['id'=21,'name'=>'','age'=>0]] $re = []; foreach($data[0] as $v){ if(!empty($v)){ $re[] = $v; } } var_dump($re); // [0=>'21']}catch(PDOException $e){ echo $e->getMessage();}如果某个字段未设置值,那么查问返回的后果中,该字段的值为空字符串。 ...

July 19, 2022 · 1 min · jiezi

关于php:还在羡慕其它平台有跨店满减其实你也可以

被玩疯的平台优惠券,你心动了吗?体贴到位的拆单发货,你想领有吗?虚构商品的一席之地,你找到了吗?看过去,在这里你都可能失去!CRMEB 多商户 v2.0 版本,新增平台优惠券、拆单发货、虚构商品,让你的电商玩法更丰盛,让你的店铺流量 up!up!up! 平台优惠券CRMEB 多商户 v2.0 新增平台优惠券,反对由平台创立各种不同类型的优惠券,自定义设置更加灵便。平台优惠券也能够和商户优惠券配合应用,优惠券的营销实力再次晋升!1、优惠券类型平台优惠券次要有 3 类,别离为通用券、品类券、跨店券,依据不同流动,能够自由选择不同类型的优惠券进行设置应用。通用券:实用于平台所有店铺、所有商品、所有用户;品类券:实用于某一个或多个品类的优惠券;跨店券:实用于多个店铺的优惠券;可实现跨店满减!2、获取形式有 3 种不同的的获取形式,均可在优惠券初始设置时进行抉择设定。手动获取:指平台提供给用户,用户可本人抉择支付的优惠券;新人券:指用户注册平台后第一次进入商城首页立刻取得的优惠券;赠送券:指平台在后盾可被动发送给用户的优惠券,用户不必支付;3、平台优惠券应用规定平台优惠券与商户优惠券可叠加应用,但平台优惠券只能应用一张,即一个商品最多可同时应用 3 张优惠券,一张店铺券、一张商品券,一张平台优惠券。4、优惠券对账平台优惠券的老本由平台承当;商户对账单详情里支出项减少平台优惠券补贴;平台对账单详情里收入项减少平台优惠券收入。5、挪动端(1)平台新人券弹窗;(2)查看优惠券路径:集体核心→我的优惠券 ;(3)挪动端领券核心:优惠券类型包含全副、通用券、品类券、跨店券、店铺券;普通商品、预售商品、虚构商品均能够应用平台优惠券。 拆单发货拆单发货能够把一个订单中的多个商品离开别离发货,让拼单的订单抉择更多,也为参加拼单流动的商户省去了很多困扰,让拼单解决更不便!(1)订单中有多件商品,且须要在不同的中央发货时,能够抉择分单发货;(2)订单中的多个不同商品可单个发货或组合发货;(3)分单发货后,会生成全新的订单,用户退款时可间接抉择相应订单独自退款,不影响拼单中的其它商品; 虚构商品CRMEB 多商户 v2.0 更新新增虚构商品售卖性能,商户可依据理论状况设置上架虚构商品,在平台内实现虚构商品交易。1、商户后盾(1)增加商品时,减少商品类型抉择:  普通商品、虚构商品;(2)增加商品时,减少自定义表单、题目和内容;内容有:文本框、数字、邮件、日期、工夫、身份证、手机号、图片;挪动端能够多个自定义留言同时显示。(3)虚构商品不能退出购物车;(4)虚构商品能够应用优惠券、可参加分佣。2、订单治理订单治理后盾地位:商户后盾→订单→虚构订单→发送货在这里能够看到所有订单信息,也能够查问出全副订单、一般订单、核销订单、虚构订单的各类订单数据信息。3、虚构发货虚构商品发货地位:商户后盾→订单→虚构订单→发送货性能:默认虚构发货,提交即订单状态从待发货变为待收货。源码附件曾经打包好上传到百度云了,大家自行下载即可~链接: https://pan.baidu.com/s/14G-b...提取码: yu27百度云链接不稳固,随时可能会生效,大家放松保留哈。如果百度云链接生效了的话,请留言通知我,我看到后会及时更新~开源地址码云地址:http://github.crmeb.net/u/defuGithub 地址:http://github.crmeb.net/u/defu

July 18, 2022 · 1 min · jiezi

关于php:即时通讯一般用什么技术开发的如何实现离线推送呢

即时通讯是近年来比拟热门的话题,互联网技术的倒退以及信息时代的推动让当今时代每个人都通过网络连接起来,即时通讯的呈现更是逐步取代了传统通信形式,让网络视频、语音、直播等成了拉近人们关系的重要媒介。即时通讯不仅在私人通信中施展着良好的作用,在企业办公以及业务办理上更是具备重要的意义。那么即时通讯个别须要用什么技术开发,即时通讯的离线推送又是怎么实现的呢? 即时通讯是一种软件系统,想要设计和开发一项即时通讯软件首先须要具备良好的网络工程学常识,可能编写即时通讯源码,以后市场上各大平台和服务商也为不同需要的客户提供了开源和非开源的源码,可能帮忙大家更好的进行即时通讯程序的编撰。 想要开发一个优质的即时通讯软件,不仅须要具备根底的编程技术,还要具备通信技术、网络技术、P2P技术以及窃密技术等诸多技术手段,另外现阶段即时通讯大多须要整合视音频输出和传输零碎,在进行即时通讯软件开发时也须要具备相应的教训。理解即时通讯,征询星动云 即时通讯软件开发中不仅须要对系统的底层逻辑有良好的认知,还要理解不同即时通讯软件的功能设计以及网络通讯编程等不同内容,在进行即时通讯软件开发是,选用c语言等不同开发语言也会对即时通讯的最终成果产生影响,目前的支流即时通讯,采纳的Java技术进行开发的比拟广泛。以后市面上存在的即时通讯软件中不乏优质的编程实用案例,而更多的服务商也可能为客户提供更加个性化、集成化的优质即时通讯软件,客户能够依据本人的需要定制相应的即时通讯软件。 即时通讯的离线推送是一项比拟重要的性能。 现阶段大多数即时通讯软件都须要具备肯定的离线推送能力,以便于在APP退至后盾或者过程终止的状况下及时揭示用户新音讯,防止用户在应用即时通讯软件时产生信息脱漏,或者解决不及时等问题。并且鉴于现阶段即时通讯软件在IOS零碎和Android零碎中的不同特点,在进行离线推送时也须要构建不同的推送条件。IOS零碎中APNs推送通常须要进行设置Token、切后盾上报未读讯息、切前台进行告诉以及Ext扩大设置等环节,在设置推送Ext扩大字段时,为了不便用户点击跳转,还须要填写到即时通讯的Ext字段,便于即时通讯IM将字段填写至推送中,帮忙用户及时进行信息查阅。另外推送还应该留神设计音讯揭示,常见的比方推送振动、推送声音等揭示,也须要TIMCustomElem中设置相应的字段,来帮忙实现推送声音和振动等设置。Android零碎的离线推送设置与IOS的推送设置环节具备肯定相似性,在理论设计中可依据具体情况进行调整。

July 16, 2022 · 1 min · jiezi

关于php:SplFileObjectseek-返回错误行数

背景版本:php < 8.0.1SplFileObject::seek 当参数为 1 时,却返回了第 3 行数据(0为首行)这个是php的一个bug 第一种解决方案https://www.php.net/manual/en...https://3v4l.org/O89dJ 第二种解决方案https://bugs.php.net/bug.php?...

July 15, 2022 · 1 min · jiezi

关于php:封装-Laravel-自定义表单请求

背景Laravel 提供的主动表单验证申请类,通常一个 class 是利用到一个 Action 上的,虽说能够利用到多个 Action 上,但验证参数很少说齐全一样,粒度太细了,如果一个 Controller 有 10 个 Action 那就得对应创立10个验证规定类,会导致文件太多,所以能够封装一下 Request ,把粒度由 Action 变成 Controller 级别得粒度,这样一个 Controller 就只用创立一个表单申请类了, 实现成果如下,后果都统一: 原有验证形式创立验证规定app/Http/Requests ├── Requests│ ├── DeleteBlog.php│ ├── StoreBlog.php│ └── UpdateBlog.php为了不便展现,放在了一个文件内 namespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest;class StoreBlogRequest extends FormRequest { public function rules() { return [ 'title' => 'required|max:100', 'content' => 'required|max:1000' ]; } public function messages() {return []; }}class UpdateBlogRequest extends FormRequest { public function rules() { return [ 'id' => 'required|integer', 'title' => 'required|max:100', 'content' => 'required|max:1000' ]; } public function messages() {return []; }}class DeleteBlogRequest extends FormRequest { public function rules() { return [ 'id' => 'required|integer', ]; } public function messages() {return []; }}应用验证规定app/Http/Comtrollers/PostController ...

July 15, 2022 · 3 min · jiezi

关于php:ModStart模块预发布功能上线啦

降级后模块版本公布流程如下① 开发中 → ② 审核中 → ③ 预公布 → ④已公布审核中:模块版本的内容不可批改,默认创立一个模块版本会进入该状态已回绝:模块公布审核失败,须要从新批改模块版本材料进行公布预公布:模块版本审核胜利后会进入该状态,该状态模式下在ModStart系列零碎可通过登录雷同的账号测试模块一键装置性能,其余用户不可装置该模块版本。已公布:在预公布模式下点击全网公布,模块可进入该状态。该状态下所有登录到ModStart模块市场的用户均能够装置该版本。模块版本预公布环境下测试装置的办法第一步,提交模块版本并审核通过,进入预公布模式第二步,在ModStart系列戏中模块市场中,登录和开发账号雷同的ModStart账号,抉择装置其余版本第三步,正在预公布环境的模块版本会标识为“预览”标签,能够点击其后的装置实现预公布模块版本的装置

July 15, 2022 · 1 min · jiezi

关于php:结合php-xdebug-webGrind一图查看调用链路及性能适合老项目梳理与维护

背景:因为近期保护老我的项目,各种factory类,各种parent嵌parent。各种abstract extends,而且依赖我的项目外的许多common和中间件等。IDE内无奈间接跳转,而且急需缕清办法的调用链路。调研后有了以下组件的组合。此文不波及具体装置步骤,外围就是文末的链接地址^_^ 波及根本组件python3 gprof2dot.py scriptphp7.*xdebug(php extension)graphviz(dot)webgrind 【图形化输入,留神须要依据本身机器装置的python的地位,去更改config.php】 成果 点击上图中的 Show Call Graph,且抉择你须要追踪的接口(上图下拉框中列表),即可有以下图 可选组件openssl (次要是解决 pip3 install gprof2dot的'SSLError'问题,此文章不波及解决此问题) 如何应用装置应用时在申请的url里增加参数?XDEBUG_PROFILE,即可生成剖析文件, 比方 xx.com?XDEBUG_PROFILE xdebug配置,波及次要是profiler相干选项 [xdebug]zend_extension = /home/r/php7.13/lib/php/extensions/no-debug-non-zts-20151012/xdebug.soxdebug.idekey = "PHPSTORM"xdebug.default_enable = On#xdebug.remote_connect_back = 1xdebug.remote_port = 9001xdebug.remote_enable=onxdebug.remote_host = 10.2.23.200xdebug.remote_port = 9001xdebug.remote_handler = "dbgp"xdebug.mode=profile,trace,debugxdebug.remote_autostart="On"xdebug.auto_trace=1xdebug.trace_output_dir="/tmp/xdebug"xdebug.profiler_output_dir="/tmp/xdebug"xdebug.profile_output_name="script.%t-%s"xdebug.profiler_output_dir = "/home/r/php7/xdebug/profiler"#xdebug.trace_output_dir = "/home/r/www/xdebug_trace" #xdebug.trace_output_dir = "/home/r/www/xdebug_trace" #xdebug.trace_output_name= "%R.html"#xdebug.collect_params=2#xdebug.collect_return=1#xdebug.show_mem_delta=1#xdebug.trace_format=2xdebug.profiler_enable_trigger=1xdebug.profiler_output_name = cachegrind.out.%t.%pxdebug.profiler_enable=1xdebug.profiler_append=0xdebug.profiler_aggregare=0webgrind 我的项目的 nginx 配置 server{ listen 80; server_name p.webgrind.com; root /home/r/www/webgrind/webgrind; index index.php;access_log /home/r/nginx/logs/webgrind.access.log;error_log /home/r/nginx/logs/webgrind.error.log; location / { index index.php; try_files $uri $uri/ /index.php?$args; } location ~ .*\.(php|php7)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; client_max_body_size 30M; client_body_temp_path /data; }}centos 6*版本下载阿里云的Centos-6.repo文件wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo ...

July 14, 2022 · 1 min · jiezi

关于php:现代化个人博客系统-ModStartBlog-v530-留言接口新增富文本升级

零碎介绍ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定。 零碎演示 性能个性丰盛的模块市场,后盾一键疾速装置 会员模块通用且残缺,反对残缺的API调用 大文件分片上传,进度条显示,已上传文件治理 弱小的模块扩大性能,所有模块能够无缝集成,反对在线装置、卸载模块 欠缺的开发助手,实现模块、主题的的一键创立 欠缺的后盾权限治理,反对基于RBAC的权限管理系统 后盾治理反对应用手机、平板、PC,无论何时何地都可方便管理 第三方登录(QQ、微信、微博、支付宝、微信小程序) 第三方领取反对(微信、支付宝、支付宝当面付、微信扫码、微信小程序) 第三方云存储反对,反对云贮存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云) 第三方短信反对(阿里云、腾讯云、华为云、百度云、253云通信、聚合、七牛云、融云、赛邮、UCloud、云片、网易云) V5.3.0版本更新2022年07月13日ModStartBlog公布v5.3.0版本,减少了以下12个个性: [新性能] 模块市场预览包性能反对 [新性能] 博客首页轮播地位动静注册(须要后盾从新设置博客首页轮播图片) [新性能] 系统升级揭示开关可配置 [新性能] 系统升级敞开开关可配置 [新性能] 内容审核提供者新增内容链接 [新性能] 博客留言新增接口 [新性能] 模块治理模块降级判断逻辑批改 [系统优化] UEditorPlus降级为v2.2.0 [系统优化] 富文本文件抓取CDN域名逻辑 [系统优化] 富文本编辑移除地图功能 [系统优化] 字符串工具类中的特殊字符解决反复 [Bug修复] 博客留言接口提交异样的问题 模块市场一键装置零碎内置模块市场,有行业利用、插件、云存储、云短信等功能模块,后盾反对一键装置、启用、禁用、卸载,可疾速搭建属于本人的零碎利用。 功能模块 零碎演示与文档码云仓库:https://gitee.com/modstart/Mo... Github仓库:https://github.com/modstart/M... 零碎演示:https://cms.demo.tecmz.com/ 下载试用:https://modstart.com/download 开发者文档:https://modstart.com/doc 模块市场:https://modstart.com/store

July 13, 2022 · 1 min · jiezi

关于php:数组回调相关函数

数组回调相干函数一、array_filter(一)语法array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )(二)参数array:数组;callable:回调函数(可选)。(三)性能array_filter() 函数用回调函数过滤数组中的元素。(四)自定义 array_filterfunction myArrFilter(array $arr,callable $func){ foreach($arr as $k =>$v){ if($func($v)){ $re[$k] = $v; } } return $re;} 二、array_map(一)语法array_map(myfunction,array1,array2,array3...)(二)参数myfunction:回调函数;array:数组;(三)性能将用户自定义函数作用到给定数组的每个值上,返回新的值。(四)自定义 array_mapfunction myArrMap(callable $func,array $arr){ foreach($arr as $v){ $re[] = $func($v); } return $re;}目前自定义的 myArrMap 函数并没有齐全实现 array_map 的性能,先占位吧,当前再欠缺。 (五)例子:<?phpfunction myfunction($num){ return($num*$num);} $a=array(1,2,3,4,5);print_r(array_map("myfunction",$a));/* [0=>1,1=>4,2=>9,3=>16,4=>25]*/三、array_walk(一)语法array_walk(array,myfunction,parameter...)(二)参数array:数组;myfunction:回调函数。(三)性能对数组中的每个成员利用用户函数。(四)自定义 array_walkfunction myArrWalk(array $arr,callable $func){ foreach($arr as $k => $v){ $func($v,$k); }}四、array_reduce(一)语法array_reduce(array,myfunction,initial)(二)参数array:数组;myfunction:回调函数;initial:初始值,规定发送到函数解决的第一个值。(三)性能发送数组中的值到用户自定义函数,并返回一个字符串。正文:如果数组是空的或者初始值未传递,该函数返回 NULL。(四)自定义 array_reducefunction myArrReduce(array $arr,callable $func,$init = ''){ if(empty($arr) || empty($init)){ return NULL; } foreach($arr as $v){ $re = $func($init,$v); $init = $re; } return $re;}

July 13, 2022 · 1 min · jiezi

关于php:系统数组函数的分类

零碎数组函数的分类一、创立填充(一)创立编号函数形容1array()创立数组。2range()创立一个蕴含指定范畴的元素的数组。3compact()创立一个蕴含变量名和它们的值的数组。(二)填充编号函数形容1array_fill()用给定的键值填充数组。2array_fill_keys()用给定的指定键名的键值填充数组。3array_pad将指定数量的带有指定值的元素插入到数组中。二、存在查看编号函数形容1array_key_exists()查看指定的键名是否存在于数组中。2in_array()查看数组中是否存在指定的值。三、汇合运算(一)并集编号函数形容1array_intersect()比拟数组,返回两个数组的交加(只比拟键值)。2array_intersect_key()比拟数组,返回两个数组的交加(只比拟键名)。3array_intersect_assoc比拟数组,返回两个数组的交加(比拟键名和键值)。(二)差集编号函数形容1array_diff()比拟数组,返回两个数组的差集(只比拟键值)。2array_diff_key()比拟数组,返回两个数组的差集(只比拟键名)。3array_diff_assoc比拟数组,返回两个数组的差集(比拟键名和键值)。四、数据结构编号函数形容1array_shift()删除数组中的第一个元素,并返回被删除元素的值。2array_unshift()在数组结尾插入一个或多个元素。3array_push将一个或多个元素插入数组的开端(入栈)。4array_pop删除数组中的最初一个元素(出栈)。五、指针函数编号函数形容1reset()重置指针,使数组指针回到首位;2end()将数组的外部指针指向最初一个单元。3prev指针上移,获取上一个元素的值;4next指针下移,获取下一个元素的值。5currentcurrent:获取以后指针对应的元素值;(指针不挪动)6key获取以后指针对应的下标值。(指针不挪动)六、回调相干编号函数形容1array_map()将用户自定义函数作用到给定数组的每个值上,返回新的值。2array_filter()用回调函数过滤数组中的元素。3array_walk对数组中的每个成员利用用户函数。4array_reduce过应用用户自定义函数,迭代地将数组简化为一个字符串,并返回。七、聚合函数借鉴了 MySQL 中聚合函数的概念。 编号函数形容1array_sum()返回数组中所有值的和。2array_product()计算数组中所有值的乘积。3count返回数组中元素的数目。4array_count_values用于统计数组中所有值呈现的次数。八、排序函数编号函数形容1sort()对数组进行程序排序。2rsort()对数组进行逆序排序。3asort对数组进行程序排序并放弃索引关系。4arsort数组进行逆序排序并放弃索引关系。5ksort对数组依照键名进行程序排序。6krsort对数组依照键名进行逆序排序。7shuffle随机打乱数组程序。九、宰割合并编号函数形容1array_chunk()把一个数组宰割为新的数组块。2array_merge()把一个或多个数组合并为一个数组。3array_combine通过合并两个数组(一个为键名数组,一个为键值数组)来创立一个新数组。十、获取数据(一)获取键编号函数形容1array_keys()返回数组中所有的键名。2array_rand()返回一个蕴含随机键名的数组。(感觉这个函数名获得不贴切,并不能依据函数名就晓得它的性能)3array_key_first/last获取指定数组的第一个(最初一个)键值。(二)获取值编号函数形容1array_values()返回数组中所有的值。2array_column()返回输出数组中某个繁多列的值。(多维数组)(三)获取部分编号函数形容1array_slice()返回数组中的选定局部。十一、其余函数(一)去重编号函数形容1array_unique()删除数组中反复的值。(二)翻转编号函数形容1array_flip()键值翻转。2array_reverse()程序翻转。(三)替换编号函数形容1array_replace()应用第二个数组(&dollar;a2)的值替换第一个数组(&dollar;a1)的值;(感觉这个函数有点多余)2array_splice()把数组中的指定元素去掉并用其它值取代。(截肢-假肢)(四)其余编号函数形容1array_change_key_case()将数组的所有的键转换为大写字母。2list()为一组变量赋值。参考资料PHP Array 简介怎么疾速记忆系统数组函数PHP 数组函数分类和整顿注:加粗意为没怎么接触过或者不相熟,回调相干的数组函数改天再写一篇博客。

July 13, 2022 · 1 min · jiezi

关于php:如何快速搭建一个产品帮助中心

产品设计员应将拜访咱们零碎的每个用户视为老手,为他们提供足够的领导帮忙他们相熟网站的产品和服务。同时帮忙零碎的有效性与设置的整体品质有间接关系。设计不当的帮忙零碎(无论其内容如许杰出)都会导致用户体验低劣。 什么是帮忙零碎?咱们看到在网站设计中应用的帮忙零碎的许多术语和类型:“帮忙”,“反对”,“ FAQ”,“文档”,“知识库”等。所有这些网页均旨在提供帮忙给用户。 它们之所以至关重要,是因为网站帮忙页面是访问者在决定放弃并搜寻另一个能够满足其要求的网站之前会寻找的最初一个中央。因而,帮忙零碎对于留存网站访问者至关重要。 如何疾速搭建一个帮忙零碎拜访便捷对于帮忙页面而言,非常要害,如果用户须要话费大量工夫能力找到入口,那成果将会大打折扣。 在页眉和页脚中的导航栏中链接到它们,尤其是在长页面和主页上。用户不用深刻开掘深埋的页面。 魔众帮忙核心零碎,提供了便捷的首页导航栏,在长页面和主页上,用户能够疾速触达想要的内容。 粗疏的分类导航帮忙核心作为聚合类文档,内容个别都较多为防止观看起来的凌乱感,构建者必须花工夫在展现架构上。对内容的展现层级进行划分,例如将重要的介绍和常见问题放在构造中较高的地位。 同时能够思考应用图标来减少类别的视觉提醒,并减少页面的外观。 可搜寻的内容搜寻性能的准确性很大水平上决定了帮忙核心页面是否无效; 除了须要设置随处可见的搜寻框、还需对搜寻的内容进行精确的展现(后果是否匹配 关键词是否高亮展现); 分割窗口的设置管理者无奈确保本人制作的帮忙核心是欠缺的,当用户找不到所需的内容时,他们会询问,这时将管理者的联系方式:邮箱、电话等放在帮忙页面中。将会起到很大的帮忙作用。

July 12, 2022 · 1 min · jiezi

关于php:mac安装PHP遇到-has-been-disabled-because-it-is-deprecated-upstream

两年前开发的一个我的项目,明天在运维的时候发现本地的PHP环境用不了了,于是又开始搭建PHP环境了。之前用的PHP版本是php7.2,在应用brew装置PHP环境的时候,提醒Error: php@7.2 has been disabled because it is deprecated upstream! 谬误。 查了相干材料,是因为php7.2官网曾经不再保护,所以Hombrew将该php版本移出了repository,所以装置不了。 解决方案: 既然不再受官网保护的旧php版本,那么能够从第三方仓库中装置比方(所有旧版php仓库地址https://github.com/shivammath...) //将第三方仓库退出brewbrew tap shivammathur/php//装置PHPbrew install shivammathur/php/php@7.2

July 12, 2022 · 1 min · jiezi

关于php:点餐外卖系统源码PHP点餐系统源码

 点餐外卖零碎源码容许客户通过网页或应用程序向餐厅下订单,可抉择送货或取货。除了这些根本的订购性能,点餐外卖零碎源码还能够帮忙餐厅经营者获取有价值的客户数据。这使您可能理解您的客户是谁,并就您的餐厅能够采取哪些措施来推动销售和忠诚度做出理智的决定。 点餐演示:c.ymzan.top 点餐外卖零碎装置 下载并解压提供的源代码zip文件。 在提取的源代码文件夹的“数据库”中找到数据库 MDF 文件。 关上您的MS SQL Server Management Studio。而后连贯到服务器。 将MDF 文件附加到数据库。 在提取的源代码文件夹中的“orderingRestaurant”文件夹中找到解决方案文件。解决方案文件称为“ orderingRestaurant.sln”。 应用您的MS Visual Studio 软件关上解决方案文件。 依据您的SQL Server 数据库凭据配置连贯字符串。能够在“clsInsert.cs”中找到配置,在类文件中有一个名为“dbPath”的变量,这是您配置连贯字符串的中央。 按键盘上的“F5”键运行ordering餐厅零碎。 登录详细信息 用户名:Admin 明码:Admin 点餐外卖零碎源码是一个十分遍及的零碎,桌面餐厅应用程序也具备宽泛的性能,使餐厅操作变得非常简单和欢快。点餐外卖零碎源码是应用C# 作为前端和 MSSQL server作为后端开发的。让咱们来看看这个应用程序领有的一些性能: 注销: 该应用程序蕴含几个注册表单,有助于辨认一些重要操作: 员工注销 用户注册 账目注销 菜单分组注册 菜单注册 主动 Kot 生成 主动生成员工 ID 作废付款类型 菜单项、员工、销售等的搜索引擎 追踪 登录历史 此性能容许管理员跟踪应用程序的日常应用状况 - 谁登录或退出以及日期和工夫进出。 ...

July 11, 2022 · 1 min · jiezi

关于php:递归匿名函数手动实现-httpbuildquery-系统函数

最近感觉 http_build_query 函数的性能蛮神奇的。能够将任意一个简单数组转换成一个简单的 URL 查问字符串。于是本人尝试手动实现了一下(user_http_build_query)。版本一、主函数递归额定辅助函数实现/** * http_build_query 的实现。 * * @param array $queryPayload * @param string $numericPrefix * @param string $argSeparator * @param int $encType * * @return string */function user_http_build_query(array $queryPayload, string $numericPrefix = '', string $argSeparator = '&', int $encType = PHP_QUERY_RFC1738): string{ reset($queryPayload); $queryStr = ''; foreach ($queryPayload as $k => $v) { // 非凡值解决 if ($v === null) { continue; } if ($v === 0 || $v === false) { $v = '0'; } // 为了对数据进行解码时获取非法的变量名 if (is_numeric($k) && ! is_string($k)) { $k = $numericPrefix . $k; } $queryStr .= is_scalar($v) ? sprintf("%s=%s$argSeparator", $encType === PHP_QUERY_RFC3986 ? rawurlencode($k) : urlencode($k), $encType === PHP_QUERY_RFC3986 ? rawurlencode($v) : urlencode($v)) : to_query_str($k, $v, $argSeparator, $encType); } return substr($queryStr, 0, -strlen($argSeparator));}/** * 转换值是非标量的状况 * * @param string $key * @param array|object $value * @param string $argSeparator * @param int $encType * * @return string */function to_query_str(string $key, $value, string $argSeparator, int $encType): string{ $queryStr = ''; foreach ($value as $k => $v) { // 非凡值解决 if ($v === null) { continue; } if ($v === 0 || $v === false) { $v = '0'; } $fullKey = "{$key}[{$k}]"; $queryStr .= is_scalar($v) ? sprintf("%s=%s$argSeparator", $encType === PHP_QUERY_RFC3986 ? rawurlencode($fullKey) : urlencode($fullKey), $encType === PHP_QUERY_RFC3986 ? rawurlencode($v) : urlencode($v)) : to_query_str($fullKey, $v, $argSeparator, $encType); // 递归调用 } return $queryStr;}版本二、单函数递归匿名函数实现用两个函数去实现一个函数的性能,显然是不太称心的。略微改变一下,提取辅助函数为匿名函数到主函数外部,递归匿名函数就能够了。/** * http_build_query 的实现。 * * @param array $queryPayload * @param string $numericPrefix * @param string $argSeparator * @param int $encType * * @return string */function user_http_build_query(array $queryPayload, string $numericPrefix = '', string $argSeparator = '&', int $encType = PHP_QUERY_RFC1738): string{ /** * 转换值是非标量的状况 * * @param string $key * @param array|object $value * @param string $argSeparator * @param int $encType * * @return string */ $toQueryStr = static function (string $key, $value, string $argSeparator, int $encType) use (&$toQueryStr): string{ $queryStr = ''; foreach ($value as $k => $v) { // 非凡值解决 if ($v === null) { continue; } if ($v === 0 || $v === false) { $v = '0'; } $fullKey = "{$key}[{$k}]"; $queryStr .= is_scalar($v) ? sprintf("%s=%s$argSeparator", $encType === PHP_QUERY_RFC3986 ? rawurlencode($fullKey) : urlencode($fullKey), $encType === PHP_QUERY_RFC3986 ? rawurlencode($v) : urlencode($v)) : $toQueryStr($fullKey, $v, $argSeparator, $encType); // 递归调用 } return $queryStr; }; reset($queryPayload); $queryStr = ''; foreach ($queryPayload as $k => $v) { // 非凡值解决 if ($v === null) { continue; } if ($v === 0 || $v === false) { $v = '0'; } // 为了对数据进行解码时获取非法的变量名 if (is_numeric($k) && ! is_string($k)) { $k = $numericPrefix . $k; } $queryStr .= is_scalar($v) ? sprintf("%s=%s$argSeparator", $encType === PHP_QUERY_RFC3986 ? rawurlencode($k) : urlencode($k), $encType === PHP_QUERY_RFC3986 ? rawurlencode($v) : urlencode($v)) : $toQueryStr($k, $v, $argSeparator, $encType); } return substr($queryStr, 0, -strlen($argSeparator));}测试$queryPayload = [ 1 => 'a', '10' => 'b', '01' => 'c', 'keyO1' => null, 'keyO2' => false, 'keyO3' => true, 'keyO4' => 0, 'keyO5' => 1, 'keyO6' => 0.0, 'keyO7' => 0.1, 'keyO8' => [], 'keyO9' => '', 'key10' => new \stdClass(), 'pastimes' => ['golf', 'opera', 'poker', 'rap'], 'user' => [ 'name' => 'Bob Smith', 'age' => 47, 'sex' => 'M', 'dob' => '5/12/1956' ], 'children' => [ 'sally' => ['age' => 8, 'sex' => null], 'bobby' => ['sex' => 'M', 'age' => 12], ], ];dd( $queryStr1 = http_build_query($queryPayload), $queryStr2 = user_http_build_query($queryPayload), $queryStr3 = urldecode($queryStr1), $queryStr4 = urldecode($queryStr2), $queryStr1 === $queryStr2, $queryStr3 === $queryStr4,);// "1=a&10=b&01=c&keyO2=0&keyO3=1&keyO4=0&keyO5=1&keyO6=0&keyO7=0.1&keyO9=&pastimes%5B0%5D=golf&pastimes%5B1%5D=opera&pastimes%5B2%5D=poker&pastimes%5B3%5D=rap&user%5Bname%5D=Bob+Smith&user%5Bage%5D=47&user%5Bsex%5D=M&user%5Bdob%5D=5%2F12%2F1956&children%5Bsally%5D%5Bage%5D=8&children%5Bbobby%5D%5Bsex%5D=M&children%5Bbobby%5D%5Bage%5D=12"// "1=a&10=b&01=c&keyO2=0&keyO3=1&keyO4=0&keyO5=1&keyO6=0&keyO7=0.1&keyO9=&pastimes%5B0%5D=golf&pastimes%5B1%5D=opera&pastimes%5B2%5D=poker&pastimes%5B3%5D=rap&user%5Bname%5D=Bob+Smith&user%5Bage%5D=47&user%5Bsex%5D=M&user%5Bdob%5D=5%2F12%2F1956&children%5Bsally%5D%5Bage%5D=8&children%5Bbobby%5D%5Bsex%5D=M&children%5Bbobby%5D%5Bage%5D=12"// "1=a&10=b&01=c&keyO2=0&keyO3=1&keyO4=0&keyO5=1&keyO6=0&keyO7=0.1&keyO9=&pastimes[0]=golf&pastimes[1]=opera&pastimes[2]=poker&pastimes[3]=rap&user[name]=Bob Smith&user[age]=47&user[sex]=M&user[dob]=5/12/1956&children[sally][age]=8&children[bobby][sex]=M&children[bobby][age]=12"// "1=a&10=b&01=c&keyO2=0&keyO3=1&keyO4=0&keyO5=1&keyO6=0&keyO7=0.1&keyO9=&pastimes[0]=golf&pastimes[1]=opera&pastimes[2]=poker&pastimes[3]=rap&user[name]=Bob Smith&user[age]=47&user[sex]=M&user[dob]=5/12/1956&children[sally][age]=8&children[bobby][sex]=M&children[bobby][age]=12"// true// true原文链接https://github.com/guanguans/guanguans.github.io/issues/47

July 11, 2022 · 3 min · jiezi

关于php:lcobuccijwt-41-双Token的简单封装

为防止在应用JWT的时候,Token过期后,会主动退出零碎回到登录页面,最好是采纳双Token的机制;具体过程简略形容一下: 用户登录,零碎返回两个令牌,AccessToken和RefreshToken,AccessToken是资源拜访令牌,有效期较短;RefreshToken是刷新令牌,有效期较长。用户通过主动在Header传递AccessToken。申请资源拜访,直到AccessToken过期。AccessToken过期后,前端主动应用RefreshToken向服务器申请新的AccessToken客户端应用新的AccessToken申请资源,直到RefreshToken生效Jwt 4.0以上版本的封装网上的参考比拟少,在这里,提供一份简略的封装,至于双令牌的具体实现,前面再陆续分享。 前提条件:PHP 7.4版本及以上,lcobucci/jwt 4.1.5 封装类文件:utils/JwtTools.php <?phpnamespace utils;use Lcobucci\Clock\SystemClock;use Lcobucci\JWT\Configuration;use Lcobucci\JWT\Signer\Key\InMemory;use Lcobucci\JWT\Signer\Hmac\Sha256;use Lcobucci\JWT\UnencryptedToken;use Lcobucci\JWT\Validation\Constraint\IssuedBy;use Lcobucci\JWT\Validation\Constraint\PermittedFor;use Lcobucci\JWT\Validation\Constraint\SignedWith;use Lcobucci\JWT\Validation\Constraint\StrictValidAt;use Lcobucci\JWT\Validation\RequiredConstraintsViolated;use think\exception\ValidateException;class JwtTools{ protected $issuedBy = 'rds.server'; protected $permittedFor = 'rds.client'; protected $issuedAt; protected $expiresAtAccess; protected $expiresAtRefresh; protected $secrect = 'aHR0cDovL3Jkcy5yYWlzZWluZm8uY24='; public function __construct() { config('system.jwt_issued_by') ? $this->issuedBy = config('system.jwt_issued_by') : null; config('system.jwt_permitted_for') ? $this->permittedFor = config('system.jwt_permitted_for') : null; config('system.jwt_secrect') ? $this->secrect = config('system.jwt_secrect') : null; $this->issuedAt = new \DateTimeImmutable(); $this->expiresAtAccess = $this->issuedAt->modify(config('system.jwt_expires_at_access') ? config('system.jwt_expires_at_access') : '+1 minute'); $this->expiresAtRefresh = $this->issuedAt->modify(config('system.jwt_expires_at_refresh') ? config('system.jwt_expires_at_refresh') : '+5 minute'); } /** * 生成Jwt配置对象 * @return Configuration */ private function createJwt(){ return Configuration::forSymmetricSigner(new Sha256(),InMemory::base64Encoded($this->secrect)); } /** * 生成Token * @param array $bind 必须存在字段 uid * @param string $type * @return string */ public function getToken(array $bind=[], $type = 'Access'){ $config = $this->createJwt(); $builder = $config->builder(); // 拜访Token能够携带用户信息,刷新Token只携带用户编号 if(is_array($bind) && !empty($bind)){ foreach ($bind as $k => $v){ $builder->withClaim($k,$v); } $builder->withClaim('scopes',$type == 'Access' ? 'Access' : 'Refresh'); } $token = $builder ->issuedBy($this->issuedBy) ->permittedFor($this->permittedFor) ->issuedAt($this->issuedAt) ->canOnlyBeUsedAfter($this->issuedAt->modify('+1 second')) ->expiresAt($type == 'Access' ? $this->expiresAtAccess : $this->expiresAtRefresh) ->getToken($config->signer(),$config->signingKey()); return $token->toString(); } /** * 校验Token * @param $token * @return bool */ public function verify($token){ $config = $this->createJwt(); try { $token = $config->parser()->parse($token); assert($token instanceof UnencryptedToken); } catch (\Exception $e){ \think\facade\Log::error('令牌解析失败[1]:'.$e->getMessage()); return ['status'=>1,'msg'=>'令牌解析谬误']; } // 验证签发端是否匹配 $validate_issued = new IssuedBy($this->issuedBy); $config->setValidationConstraints($validate_issued); $constraints = $config->validationConstraints(); try { $config->validator()->assert($token,...$constraints); } catch (RequiredConstraintsViolated $e){ \think\facade\Log::error('令牌验证失败[2]:' . $e->getMessage()); return ['status'=>2,'msg'=>'签发谬误']; } //验证客户端是否匹配 $validate_permitted_for = new PermittedFor($this->permittedFor); $config->setValidationConstraints($validate_permitted_for); $constraints = $config->validationConstraints(); try { $config->validator()->assert($token,...$constraints); } catch (RequiredConstraintsViolated $e){ \think\facade\Log::error('令牌验证失败[3]:' . $e->getMessage()); return ['status'=>3,'msg'=>'客户端谬误']; } // 验证是否过期 $timezone = new \DateTimeZone('Asia/Shanghai'); $time = new SystemClock($timezone); $validate_exp = new StrictValidAt($time); $config->setValidationConstraints($validate_exp); $constraints = $config->validationConstraints(); try { $config->validator()->assert($token,...$constraints); } catch (RequiredConstraintsViolated $e){ \think\facade\Log::error('令牌验证失败[4]:' . $e->getMessage()); return ['status'=>4,'msg'=>'已过期']; } // 验证令牌是否已应用预期的签名者和密钥签名 $validate_signed = new SignedWith(new Sha256(),InMemory::base64Encoded($this->secrect)); $config->setValidationConstraints($validate_signed); $constraints = $config->validationConstraints(); try { $config->validator()->assert($token,...$constraints); } catch (RequiredConstraintsViolated $e){ \think\facade\Log::error('令牌验证失败[5]:' . $e->getMessage()); return ['status'=>5,'msg'=>'签名谬误']; } return ['status'=>0,'msg'=>'验证通过']; } /** * 获取token的载体内容 * @param $token * @return mixed */ public function getTokenContent($token){ $config = $this->createJwt(); try { $decode_token = $config->parser()->parse($token); $claims = json_decode(base64_decode($decode_token->claims()->toString()),true); } catch (\Exception $e){ throw new ValidateException($e->getMessage()); } return $claims; }} 配套配置文件:config/system.php ...

July 11, 2022 · 3 min · jiezi

关于php:php设计模式十代理模式

代理模式在客户端和实体之间建设一个代理对象(proxy),客户端对实体进行操作全副委派给代理对象,暗藏具体的实现,例如,mysql的主从构造,不批改业务代码,在代理中实现读写拆散Proxy还能够与业务代码拆散,部署到另外的服务器,业务代码中通过rpc来委派工作class Proxy { public function getUserName($id){ $db = Factory::getDatabase('slave'); $db->query("select * from user where id =$id"); } public function setUserName(){ $db = Factory::getDatabase('master'); $db->query("update user set name=$name whereid=$id limit 1"); }}// 其实还应该封装下,在执行语句的时候主动依据语句连贯主从库

July 10, 2022 · 1 min · jiezi

关于php:H5实现生成urlscheme并从H5跳转到小程序

在2022年之前,想要在H5关上小程序只须要在平台上设置urlscheme即可,然而自 2022 年 4 月 11 日起,URL Scheme有效期最长 30 天,不再反对永恒无效的URL Scheme、不再辨别短期无效URL Scheme与长期有效URL Scheme。若在微信外关上,用户能够在浏览器页面点击进入小程序。每个独立的URL Scheme被用户拜访后,仅此用户能够再次拜访并关上对应小程序,其余用户无奈再次通过雷同URL Scheme关上该小程序。 在本次规定调整失效前曾经生成的URL Scheme,如果有效期超过30天或长期会被降级为30天无效,只能被1个用户拜访,开始工夫从调整日期开始计算。【官网文档】 然而官网提供了动静获取urlscheme办法 步骤如下:1:获取access_token2:依据access_token获取urlscheme3:依据urlscheme实现H5跳转小程序 具体实现1. 通用的调用接口办法/** * curl */public function httpRequest($url, $format = 'get', $data = null, $headerArray = []){ //设置头信息 $curl=curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if ($format == 'post') { //post传值设置post传参 curl_setopt($curl, CURLOPT_POST, 1); if ($data) { $data = json_encode($data); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); if ($headerArray) { curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray); } $data=json_decode(curl_exec($curl), true); curl_close($curl); //返回接口返回数据 return $data;}2. 获取access_token文档:【获取access_token】$appId = 'XXX';$appsecret = 'XXX';$data = $this->httpRequest( 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appId.'&secret='.$appsecret, 'get', null, array("Content-type:application/json;","Accept:application/json"));$accessToken = isset($data['access_token']) ? $data['access_token'] : '';3:依据access_token获取urlscheme【获取urlscheme】$data = $this->httpRequest( 'https://api.weixin.qq.com/wxa/generatescheme?access_token='.$accessToken, 'post', [ 'jump_wxa' => [ 'path' => "/pages/index/index",//跳转小程序地址 'query' => ""//跳转小程序额定参数 ], 'expire_type' => 0 ]);$openlink = isset($data['openlink']) ? $data['openlink'] : '';4:依据urlscheme跳转小程序<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script><script>window.location.href = openlink;</script>

July 9, 2022 · 1 min · jiezi

关于php:解决PHP导出CSV乱码问题

导出csv在windows下关上容易呈现乱码,须要在文件头部写入BOM标识,曾经封装成一个函数了 /** * @param array $rows * @param array $fields * @param string $filename */ function kg_export_csv($rows, $fields = [], $filename = '') { $filename = $filename ?: kg_uniqid(); header("Content-Type: text/csv"); header("Content-Disposition:filename={$filename}.csv"); $fp = fopen('php://output', 'w'); fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); if ($fields) fputcsv($fp, $fields); $index = 0; foreach ($rows as $row) { if ($index == 1000) { $index = 0; ob_flush(); flush(); } $index++; fputcsv($fp, $row); }要害局部,文件头写入BOM标识 ...

July 9, 2022 · 1 min · jiezi

关于php:优化-Go-错误处理魔改-Go-recover-靠谱吗

大家好,我是煎鱼。 Go 的错误处理始终是体现最突出的一块中央,许许多多的同学都提出了各种提案,例如:引入 try-catch、用 panic 代替 if err != nil、引入新的关键字等。但这些都被一一驳回了。 不过社区仍然还没放弃,周末看到有一个新的提案《proposal: runtime: add parameters to recover to only return specific types》挺有意思。 明天就由煎鱼带大家一起学习。 语法阐明Go 的 panic、recover、defer 的根本应用形式。如下代码: package mainimport "fmt"func mayPanic() { panic("a problem")}func main() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered. Error:\n", r) } }() mayPanic() fmt.Println("After mayPanic()")}输入后果: Recovered. Error: a problem新提案因为有 Go1 兼容性保障,新提案是在原有的 recover 函数上动小手术。心愿能够现在运行时的 recover 中退出参数,仅反对返回特定的类型。 函数签名: recover(except ...interface{})案例代码: defer func(){ if err := recover(&MyError{}, &HelloError{}); err != nil { switch e := err.(type) { case *MyError: fmt.Println(e) case *HelloError: fmt.Println(e) } }}下面代码中,recover 函数只反对传入 MyError 和 HelloError 的指针类型。再在解决逻辑中依据所传入的谬误类型,进行断言分类,实际上去做不同的逻辑解决。 ...

July 8, 2022 · 2 min · jiezi

关于php:ModStart前端开发

前端开发ModStart框架应用了 jQuery 等根底前端技术,页面不限于应用 Vue、React 作为前端技术集成。 前端代码地位ModStart根底前端代码位于 vendor/modstart/modstart/resources/asset/。不同模块的前端代码位于 module/Xxx/resources/asset/前端代码须要应用 nodejs 构建,须要事后理解前端应用 webpack, gulp 打包的基础知识。 前端代码如何编译Windows装置 nodejs进入官网 http://nodejs.cn/ ,下载对应的nodejs安装包下载,实现装置。 举荐装置 node 14 ,其余版本未齐全测试验证关上 nodejs 命令窗口装置实现后,点击windows启动,关上 Node.js command prompt 命令窗口 装置 cnpm 和打包依赖装置 cnpm 次要是为了解决国内拜访 npm 速度太慢的问题,可依据本人的状况自行抉择装置cnpm npm install -g cnpm --registry=https://registry.npmmirror.com装置webpack和gulp依赖 cnpm install -g webpack-cli@4 webpack@4 gulp@4编译前端代码编译ModStart代码 通常状况下零碎的前端代码无需批改# 进入到零碎动态资源根目录cd c:\xxx\vendor\modstart\modstart\resources\asset\# 装置依赖cnpm install# 打包前端CSS、图片等动态资源gulp# 调试模式:打包前端JS单页动态资源webpack --env dev# 生产模式:打包前端JS单页动态资源webpack# 开发模式:打包前端JS单页动态资源,边开发边刷新webpack --env dev --watch编译模块代码 编译模块前端代码前,请确保ModStart的动态资源曾经装置过依赖(cnpm install)# 进入到模块动态资源根目录cd c:\xxx\module\Xxx\resources\asset\# 装置依赖cnpm install# 打包前端CSS、图片等动态资源gulp# 调试模式:打包前端JS单页动态资源webpack --env dev# 生产模式:打包前端JS单页动态资源webpack# 开发模式:打包前端JS单页动态资源,边开发边刷新webpack --env dev --watchOSX / Linux装置 nodejs进入官网 http://nodejs.cn/ ,下载对应的nodejs安装包下载,实现装置。 ...

July 8, 2022 · 1 min · jiezi

关于php:CRMEB-单商户-v40-升级稳得很

CRMEB 单商户根底版 V4.0 更新内容要点,对底层代码进行全新重构,前后台全副采纳前后端拆散开发,前端框架改为 uni-app,多端合一,首页页面降级为后盾可视化操作,后盾 UI 降级为 iview 框架。 框架降级 后盾系统升级将后盾降级为前后端拆散,后盾 UI 框架为 VUE+iview 框架。 前端框架降级前端框架改为 uni-app,公众号、小程序、H5 等多端合一。 减少商业受权验证(1)减少商业受权,受权文件加密,本地解密,不影响二开; (2)零碎设置体验时长,体验期过后需购买商业受权。 性能更新 页面治理a. 首页页面降级为后盾可视化操作,可点击页面的模块,批改此模块的相干数据; b. 后盾减少挪动端的页面链接 商品治理a. 商品增加时主动生成商品 SPU 以及商品规格的 SKU 码 b. 新增商品批量高低架性能 c. 后盾根据理论领取金额对立设置生产赠送积分比例 d. 商品增加减少优惠券抉择,可多选(领取实现后,在领取实现页面下边加增送优惠券信息)。 用户治理a.“会员治理” 菜单名称批改为 “用户治理” b. 微信用户治理栏目去除,用户治理分为全副用户、公众号用户、微信小程序用户、H5 用户; c. 减少用户标签性能,商品可关联用户标签,用户购买对应商品,绑定对应的用户标签; d.user 表和 wx user 表调整,uid 不跟 wx user 表同步,wx user 表减少主键。 会员治理4.1 原有会员性能调整 a. 保留会员等级 b. 引入会员教训体系,每个会员等级设置降级教训; c. 会员工作调整,用户实现会员工作取得教训。 会员工作暂如下: 【1】签到获取教训 【2】购买商品获取教训 【3】邀请新用户 4.2 会员开关 ...

July 8, 2022 · 1 min · jiezi

关于php:ModStart数据表单

数据表单疾速入门ModStart\Form\Form 类用于疾速生成表单页面,参照例子 数据表格→疾速入门 能够通过如下代码疾速定义个数据表单 return Form::make('blog', function (Form $form) { // 定义题目字段,格局为单行文本 $form->text('title', '题目'); // 定义封面字段,格局为单张图片 $form->image('cover', '封面'); // 定义摘要字段,格局为多行文本 $form->textarea('summary', '摘要'); // 定义内容字段,格局为富文本 $form->richHtml('content', '内容');});获取以后模型数据在闭包内能够获取到以后模型的数据 return Form::make('blog', function (Detail $detail) { dd($detail->item());});字段自定义渲染$form->text('content', '字段名称')->hookRendering(function (AbstractField $field, $item, $index) { // 是否为一般表单模式、减少表单模式、批改表单模式,可依据不同模式反馈不同的渲染内容 // $field->context()->isModeForm() // $field->context()->isModeAdd() // $field->context()->isModeEdit() return <<<HTML<div class="line"> <div class="label">内容</div> <div class="field"> <div style="border:2px solid red;padding:10px;"> 字段自定义显示,其中name须要和字段column雷同 <input type="text" name="content" value="内容" /> </div> </div></div>HTML; });字段反对显示 display$form->display('field','名称');单行文本 text$form->text('field', '名称');多选 checkbox$form->checkbox('field', '名称');标签 tags$form->tags('field', '名称');代码 code$form->code('field', '名称');树状组件 tree$form->tree('field', '名称');类型 type$form->type('field', '类型');明码 password$form->password('field', '类型');单张图片 image$form->image('field', '类型');多张图片 images$form->type('field', '类型');多张图片(长期门路) imagesTemp$form->type('field', '类型');链接 link$form->link('field', '类型');开关 switch$form->switch('field', '类型');多行文本 textarea$form->textarea('field', '类型');色彩 color$form->color('field', '类型');日期 date$form->date('field', '类型');日期工夫 datetime$form->datetime('field', '类型');工夫 time$form->time('field', '类型');单选 radio$form->radio('field', '类型');下拉 select$form->select('field', '类型');富文本 richHtml// 默认富文本$form->richHtml('field', '类型');// 简略版富文本$form->richHtml('field', '类型')->editorMode('simple');Markdown markdown$form->markdown('field', '类型');键值对列表 keyValueList$form->keyValueList('field', '类型');多值 values$form->values('field', '类型');HTML html$form->html('field', '类型');数字 number$form->number('field', '类型');百分比 percent$form->percent('field', '类型');小数 decimal$form->decimal('field', '类型');货币 currency$form->currency('field', '类型');ID id$form->id('field', '类型');验证码 captcha$form->captcha('field', '类型');临时文件 fileTemp$form->fileTemp('field', '类型');文件 file$form->file('field', '类型');视频 video$form->video('field', '类型');音频 audio$form->audio('field', '类型');中国地区 areaChina$form->areaChina('field', '类型');暗藏域 hidden$form->hidden('field', '类型');图标 icon$form->icon('field', '类型');更多内置组件请参照 ModStart\Support\Manager\FieldManager 中的定义 ...

July 8, 2022 · 1 min · jiezi

关于php:ModStart开发者文档CMS主题教程

主题开发教程模板主题是一个模块,以 CmsTheme 结尾,如 CmsThemeBlue、CmsThemeGreen 等。 主题模块构造CmsThemeMyTest├── Admin│ ├── Controller│ │ └── ConfigController.php → 后盾配置文件│ └── routes.php├── Asset → 主题资源文件│ ├── css│ │ └── theme.css│ └── js│ └── theme.js├── Core│ └── ModuleServiceProvider.php → 模块外围注册器├── Docs → 模块文档│ ├── doc│ │ └── Manual.md│ ├── module│ │ ├── content.md│ │ ├── demo.md│ │ ├── mobilePreview.md│ │ └── preview.md│ └── release│ └── 1.0.0.md├── Provider│ └── ThemeSiteTemplateProvider.php → 主题注册器├── View → 模块视图主目录│ └── pc → 自适应默认为PC│ ├── cms│ │ ├── list → 列表视图│ │ │ ├── cases.blade.php│ │ │ ├── default.blade.php│ │ │ ├── job.blade.php│ │ │ ├── news.blade.php│ │ │ └── product.blade.php│ │ ├── detail → 详情视图│ │ │ ├── cases.blade.php│ │ │ ├── default.blade.php│ │ │ ├── job.blade.php│ │ │ ├── news.blade.php│ │ │ └── product.blade.php│ │ ├── form → 表单视图│ │ │ └── default.blade.php│ │ ├── page → 单页视图│ │ │ └── default.blade.php│ │ ├── index.blade.php│ ├── footer.blade.php│ ├── frame.blade.php → 模板框架视图│ └── header.blade.php├── config.json → 模块配置文件└── demo_data.php → 演示数据初始化视图数据实体栏目Cat{ "id": 5, "created_at": "2021-11-02 20:53:18", "updated_at": "2021-12-19 10:03:07", "pid": 0, "sort": 0, "title": "新闻资讯", "url": "news", "modelId": 9, "listTemplate": "news.blade.php", "detailTemplate": "news.blade.php", "seoTitle": "11", "seoDescription": "22", "seoKeywords": "33", "icon": "", "cover": "", "subTitle": "为宽广企业提供更加轻便、高效、经济的人力资源服务", "bannerBg": "", "pageTemplate": null, "formTemplate": null, "_model": { "id": 9, "created_at": "2021-11-02 20:42:42", "updated_at": "2021-12-19 10:03:07", "title": "新闻征询", "name": "news", "detailTemplate": "news.blade.php", "listTemplate": "news.blade.php", "pageTemplate": null, "mode": 1, "formTemplate": null, "_customFields": [] }}内容ContentSimple{ "id": 102, "created_at": "2021-12-20 10:54:03", "updated_at": "2021-12-20 10:54:03", "catId": 5, "modelId": 9, "alias": null, "title": "2020整体橱柜十大品牌排行榜", "summary": "这是2020年评比进去的橱柜十大品牌排行榜,小编对这个排行没有意见,只是仁者见仁,智者见智,排行自有肯定的情理,至于其中有什么", "cover": "vendor/image/news-3.jpg", "postTime": "2021-01-01 00:00:20", "wordCount": null, "viewCount": null, "status": 1, "commentCount": null, "likeCount": null, "isRecommend": 1, "isTop": null, "tags": [], "author": null, "source": null, "seoTitle": null, "seoDescription": null, "seoKeywords": null, "_url": "/a/102", "_day": "2021-01-01"}内容Content{ "id": 102, "created_at": "2021-12-20 10:54:03", "updated_at": "2021-12-20 10:54:03", "catId": 5, "modelId": 9, "alias": null, "title": "2020整体橱柜十大品牌排行榜", "summary": "这是2020年评比进去的橱柜十大品牌排行榜,小编对这个排行没有意见,只是仁者见仁,智者见智,排行自有肯定的情理,至于其中有什么", "cover": "vendor/image/news-3.jpg", "postTime": "2021-01-01 00:00:20", "wordCount": null, "viewCount": null, "status": 1, "commentCount": null, "likeCount": null, "isRecommend": 1, "isTop": null, "tags": null, "author": null, "source": null, "seoTitle": null, "seoDescription": null, "seoKeywords": null, "_tags": [], "_data": { "id": 102, "created_at": "2021-12-20 10:54:03", "updated_at": "2021-12-20 10:54:03", "content": "<p>橱柜生产企业也由94年的20多家倒退到当初的3000多家,规模企业100多家,行业前50家销售额占全行业的30%以上。也因而在橱柜行业内涌现出一批优良的企业和品牌。</p>\n<p>然而对于中国橱柜十大品牌评比的版本却有很多,然而不论是由谁提出的什么版本,要害是要用重要数据谈话。以品牌知名度、质量标准、产品研发、生产能力、销售规模、品牌口碑、可继续倒退能力等方面综合来评定才有足够说服力。品质标量是一个知名品牌的生命力,产品研发、生产能力、销售规模、可继续倒退能力是一个知名品牌的倒退力,品牌知名度、品牌口碑是一个知名品牌的影响力。</p>\n<p>2018年从品牌知名度、质量标准、产品研发、生产能力、销售规模、品牌口碑、可继续倒退能力等方面综合评定出的中国橱柜十大品牌名单榜中榜上,皮阿诺排列其中,然而,如果单纯以橱柜终端理论网点,理论销售额来评估,皮阿诺凭借700家终端专卖店和售后服务核心能够位列十大橱柜品牌之首,而在早先由腾讯举办的网友“十大橱柜品牌评比”流动中,皮阿诺更是以高票位居三甲。</p>" }模型Model{ "id": 9, "created_at": "2021-11-02 20:42:42", "updated_at": "2021-12-19 10:03:07", "title": "新闻征询", "name": "news", "detailTemplate": "news.blade.php", "listTemplate": "news.blade.php", "pageTemplate": null, "mode": 1, "formTemplate": null, "_customFields": [ { "id": 19, "created_at": "2021-12-19 15:48:57", "updated_at": "2021-12-19 15:48:57", "modelId": 20, "sort": 1, "title": "手机", "name": "phone", "fieldType": "text", "fieldData": [], "isRequired": 0, "isSearch": 0, "isList": 0, "placeholder": null, "listTemplate": null, "showTemplate": null, "maxLength": 100 }, { "id": 20, "created_at": "2021-12-19 15:48:57", "updated_at": "2021-12-19 15:48:57", "modelId": 20, "sort": 2, "title": "姓名", "name": "name", "fieldType": "text", "fieldData": [], "isRequired": 0, "isSearch": 0, "isList": 0, "placeholder": null, "listTemplate": null, "showTemplate": null, "maxLength": 100 } ]}列表视图内置变量 cat以后栏目信息,数据结构构造参考 栏目Cat ...

July 8, 2022 · 5 min · jiezi

关于php:php设计模式九-迭代器模式

迭代器模式不理解外部实现前提下,遍历一个对象// 继承内置的迭代器接口,实现五个办法class Alluser implements \Iterator{ private $ids; // 存入所有须要迭代的数据 private $index; // 记录以后迭代器地位 public function __construct(){ $rlt = "select id from user"; $this->ids = $rlt-。fetch(); } public function current() { return $this->ids[$this->index]; } // 下一个元素 public function next(){ $this->index++; } // 验证元素是否存在 public function valid(){ return !empty($this->ids[$this->index]); } // 初始化迭代器到头部 public function rewind(){ $this->index = 0; } // 获取以后索引 public function key(){ return $this->index; }}$users = new AllUser();foreach($users as $user){ var_dump($user);}

July 7, 2022 · 1 min · jiezi

关于php:积极响应号召ModStart支持用户主动注销账号功能

依据电信和互联网要求,互联网信息服务提供者在用户终止应用电信服务或者互联网信息服务后,该当进行对用户个人信息的收集和应用,并为用户提供登记号码或账号的服务。 网络平台账户销户其实很难,在各家平台推动过程中会呈现重重妨碍。ModStart 为了踊跃响应号召和要求,现已为 ModStartCMS 零碎提供了用户被动登记号码和账号的服务。 用户申请登记账号后,零碎会保留1个月的反悔期,该期间用户的账号依然能够失常登录应用。反悔期完结后,零碎会默认发出用户的账号。 ModStart,始终在前行,致力做一个有翻新的开源开发框架。

July 7, 2022 · 1 min · jiezi

关于php:ModStartCMS-企业内容建站系统支持-Laravel9v430

企业内容建站零碎 ModStartCMS v4.3.0 用户自主登记,批量禁用账号零碎介绍ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定,收费且不限度商业应用。 零碎演示 性能个性丰盛的模块市场,后盾一键疾速装置会员模块通用且残缺,反对残缺的 API 调用大文件分片上传,进度条显示,已上传文件治理弱小的模块扩大性能,所有模块能够无缝集成,反对在线装置、卸载模块欠缺的开发助手,实现模块、主题的的一键创立欠缺的后盾权限治理,反对基于 RBAC 的权限管理系统后盾治理反对应用手机、平板、PC,无论何时何地都可方便管理第三方登录(QQ、微信、微博、支付宝、微信小程序)第三方领取反对(微信、支付宝、支付宝当面付、微信扫码、微信小程序)第三方云存储反对,反对云贮存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云)第三方短信反对(阿里云、腾讯云、华为云、百度云、253 云通信、聚合、七牛云、融云、赛邮、UCloud、云片、网易云)V4.3.0 版本更新2022 年 07 月 08 日 ModStartCMS 公布 v4.3.0 版本,减少了以下 20 个个性: [新性能] 账号删除性能,后盾可手动删除用户[新性能] 用户积分名称全局可批改(如批改为金豆)[新性能] 后盾用户治理减少删除性能[新性能] 用户自主登记申请性能[新性能] 后盾治理用户信息查看列表新增用户 ID[新性能] 后盾治理用户批量禁用账户的性能[新性能] 后盾用户列表新增受权登录标记[新性能] 内容审核提供者新增内容链接[新性能] 用户核心微信小程序受权绑定逻辑优化调整[新性能] 后盾新增用户积分流水详情列表[新性能] 登记账号性能,用户可被动申请登记账号[新性能] 用户积分名称全局可批改[新性能] 接口不存在时提醒显示接口门路[新性能] 后盾新增用户钱包流水详情列表[系统优化] 用户音讯发送模板查找逻辑降级[系统优化] 调整用户设置相干菜单到用户核心[系统优化] 字符串工具类中的特殊字符解决反复[系统优化] UEditorPlus 降级为 v2.2.0[系统优化] 后盾登录验证码缓存问题[系统优化] 用户受权登录 OpenId 绑定 key 逻辑模块市场一键装置零碎内置模块市场,有行业利用、插件、云存储、云短信等功能模块,后盾反对一键装置、启用、禁用、卸载,可疾速搭建属于本人的零碎利用。 功能模块 零碎演示与文档码云仓库:https://gitee.com/modstart/Mo...Github 仓库:https://github.com/modstart/M...零碎演示:https://cms.demo.tecmz.com/下载试用:https://modstart.com/download开发者文档:https://modstart.com/doc模块市场:https://modstart.com/store

July 7, 2022 · 1 min · jiezi

关于php:php设计模式八装饰器模式

装璜器模式动静的增加批改类性能一个类提供了一项性能,如果要在批改并增加额定的性能,传统计划须要写一个子类继承,并从新实现类办法应用装璜器模式,仅须要在运行时减少一个装璜器对象// 例如批改Canvas的draw办法class Canvas { private $data; private $decorators; // 用于保留所有装璜器 public function init($hei,$wid){ for($i=0;$i<$hei;$i++){ for($i=0;$i<$wid;$i++){ $data[$i][$j] = "*"; } } $this->data = $data; } public function rect($a1,$a2,$b1,$b2) { foreach($this->data as $k1->$line){ if($k1<$a1 or $k1 > $a2) continue; foreach($line as $k2 => $item){ if($k2<$b2 or $k2> $b2) contine; $this->data[$k1][$2] = ' '; } } } public function draw(){ foreach ($this->data as $line){ foreach ($lien as $item) { echo $item; } echo PHP_EOL: } } // 用于减少装璜器 public function addDecorator(Decorator $decorator){ $this->decorators[] = $decorator; } // 前置执行 public function before(){ foreach($this->decorators as $decorator) { $decorator->before(); } } public function after(){ $decorators = array_reserse($this->decorator); foreach($decorators as $decorator) { $decorator->before(); } }}// 装璜器接口 在某个办法之前,之后退出额定操作interface Decorator { public function beforDraw(); public function afterDraw();}class ColorDecorator implements Decorator { private $color; public function __construct($color){ $this->color = $color; } public function before(){ echo 'before'.$this->color; } public function after(){ echo 'after'; }}$c = new Canvas();$c->addDecorator(new ColorDecorator('red')); // 减少不同的装璜器,进行不同的批改$c->rect(1,6,2,12);$c->draw();

July 6, 2022 · 1 min · jiezi

关于php:laravel-中-in-多列特殊查询类型解决方案

SQL 查问中有一种 in 多列非凡查问类型,大略是这个样子 select * from order where (id,buyer) in(( 1, '张三' ),( 2, '李四' )) and order.deleted_at is null。laravel 的查问构建器并没有间接反对该类型的查问。我这边通过查问构建器 Macroable 新增了一个 whereIns 查询方法不便该类型的查问。应用示例<?phpuse App\Models\Order;Order::query() // ->whereRaw("(id,buyer) in(( 1, '张三' ),( 2, '李四' ))") ->whereIns(['id', 'buyer'], [ ['buyer' => '张三', 'id' => 1], [2, '李四'] ]) ->dump() ->get();// "select * from `order` where (id,buyer) in ((?,?),(?,?)) and `order`.`deleted_at` is null"// array:4 [// 0 => 1// 1 => "张三"// 2 => 2// 3 => "李四"// ]新建 QueryBuilderMacro<?phpnamespace App\Support\Macros;use Illuminate\Contracts\Support\Arrayable;class QueryBuilderMacro{ public function whereIns(): callable { /* @var Arrayable|array[] $values */ return function (array $columns, $values, string $boolean = 'and', bool $not = false) { /** @var \Illuminate\Database\Eloquent\Builder $this */ $type = $not ? 'not in' : 'in'; $rawColumns = implode(',', $columns); $values instanceof Arrayable and $values = $values->toArray(); $values = array_map(function ($value) use ($columns) { if (array_is_list($value)) { return $value; } return array_reduce($columns, function ($sortedValue, $column) use ($value) { $sortedValue[$column] = $value[$column] ?? trigger_error( sprintf( '%s: %s', 'The value of the column is not found in the array.', $column ), E_USER_ERROR ); return $sortedValue; }, []); }, $values); $rawValue = sprintf('(%s)', implode(',', array_fill(0, count($values), '?'))); $rawValues = implode(',', array_fill(0, count($columns), $rawValue)); $raw = "($rawColumns) $type ($rawValues)"; return $this->whereRaw($raw, $values, $boolean); }; } public function whereNotIns(): callable { return function (array $columns, $values) { /** @var \Illuminate\Database\Eloquent\Builder $this */ return $this->whereIns($columns, $values, 'and', true); }; } public function orWhereIns(): callable { return function (array $columns, $values) { /** @var \Illuminate\Database\Eloquent\Builder $this */ return $this->whereIns($columns, $values, 'or'); }; } public function orWhereNotIns(): callable { return function (array $columns, $values) { /** @var \Illuminate\Database\Eloquent\Builder $this */ return $this->whereIns($columns, $values, 'or', true); }; }}AppServiceProvider 注册 QueryBuilderMacro 即可<?phpnamespace App\Providers;use App\Support\Macros\QueryBuilderMacro;use Illuminate\Database\Eloquent\Builder as EloquentBuilder;use Illuminate\Database\Eloquent\Relations\Relation;use Illuminate\Database\Query\Builder as QueryBuilder;use Illuminate\Support\ServiceProvider;class AppServiceProvider extends ServiceProvider{ ... public function boot() { QueryBuilder::mixin($queryBuilderMacro = $this->app->make(QueryBuilderMacro::class)); EloquentBuilder::mixin($queryBuilderMacro); Relation::mixin($queryBuilderMacro); } ...}原文链接https://github.com/guanguans/guanguans.github.io/issues/46

July 5, 2022 · 2 min · jiezi

关于php:PHP后端面试85问

1.(int)'0xff'为什么是0?0xff是字符串 字符串转int 第一个是0 能够转换胜利 xff转换失败 2. PHP中10进制与16进制互转#10转16dechex(52558);或gmp_strval(52558,16);#16转10hexdec('0xcd4e');3. 通过aux命令查问cup和内存前十的记录ps -aux --sort -pcpu,-pmem | head -n 10 pcpu是CPU利用率 pmem是内存利用率 --sort -是降序,+是升序4. 面向对象根本准则?繁多职责准则SRP(Single Responsibility Principle) :是指一个类的性能要繁多,不能无所不包。凋谢关闭准则OCP(Open-Close Principle) 一个模块在扩展性方面应该是凋谢的而在更改性方面应该是关闭的。替换准则(the Liskov Substitution Principle LSP) :子类该当能够替换父类并呈现在父类可能呈现的任何中央。依赖倒置准则(the Dependency Inversion Principle DIP) 具体依赖形象,下层依赖上层。接口拆散准则(the Interface Segregation Principle ISP) 模块间要通过形象接口隔离开,而不是通过具体的类强耦合起来。5. 设计模式分类,设计准则创立型模式、结构型模式、行为模式 参考:https://github.com/jiayisheji... 创立型模式,就是创建对象的模式,形象了实例化的过程。 简略工厂模式(Simple Factory)工厂办法模式(Factory Method)形象工厂模式(Abstract Factory)创建者模式(Builder)原型模式(Prototype):利用原型实例来“克隆”创立新的对象。单例模式(Singleton)结构型模式:解决类或对象间的组合。是为解决怎么组装现有的类,设计它们的交互方式,从而达到实现肯定的性能目标。 外观模式/门面模式(Facade门面模式)适配器模式(Adapter)代理模式(Proxy)装璜模式(Decorator)桥接模式(Bridge)组合模式(Composite):享元模式(Flyweight)行为型模式波及到算法和对象间职责的调配,行为模式形容了对象和类的模式,以及它们之间的通信模式。 模板办法模式(Template Method)观察者模式(Observer)状态模式(State)策略模式(Strategy)职责链模式(Chain of Responsibility)命令模式(Command)访问者模式(Visitor)调停者模式(Mediator)备忘录模式(Memento)迭代器模式(Iterator)解释器模式(Interpreter)6. PHP一次web申请的流程浏览器发送URL申请DNS解析域名获取到IP后开始拜访IP和Port开发发送TCP申请到NginxNginx解析server name ,而后发送到 php-fpm治理过程php-fpm把具体的申请交给PHP执行7. PHP动态变量有几种?动态变量属于动态存储形式,其存储空间为内存中的静态数据区(在动态存储区内调配存储单元)。 动态变量能够在任何能够申请的中央申请,一旦申请胜利后,它将不再承受其余的同样申请。 动态变量的值可变,但不会随着函数的调用和退出而发生变化。 动态局部变量:static类型的外部变量是一种只能在某个特定函数中应用,但始终占据存储空间的变量。 动态变量的初始值为0。 动态全局变量:全局变量(内部变量)的申明之前再冠以static 就形成了动态的全局变量。 7.局部变量和动态局部变量,全局变量和动态全局变量的区别?把局部变量扭转为动态变量后是扭转了它的存储形式,即扭转了它的生存期。 把全局变量扭转为动态变量后是扭转了它的作用域(动态全局变量只在定义该变量的源文件内无效),限度了它的应用范畴。 php之static动态变量详解 9.array_merge和array+array的区别?$a=[0,1,2,3]; $b=[1,2,3,4,5]; $a+=$b; echo json_encode($a);//[0,1,2,3,5]array_merge()不会笼罩掉原来的值 ...

July 5, 2022 · 5 min · jiezi

关于php:php调优

 php.ini配置文件调优 1. expose_php off 2. register_globals off(重要,避免GET和POST变量主动注册为全局变量,肯定要敞开) 3. 关上magic_quotes_gpc来避免SQL注入,重要!是避免SQL注入的重要伎俩,该参数将用户提交的SQL查问进行转换,如将'转换为'。 4. display errors off 4. max_excution_time 30s 最长执行工夫。 5. memory_limit,一个脚本能申请到的最大内存,避免脚本耗尽服务器内存资源。须要编译装置的时候增加--enable-memory_limit参数能力开启。 6. upload_max_filesize , max_file_uploads 7. cgi_fix_pathinfo =0 避免NGINX文件类型解析破绽 8. 会话session配置: a,默认保留形式为files, session.save_handler files 如想设置成自定义的解决形式比方数据库,能够应用user 如想设置成为memcache,能够设置成memcache, 前提是编译的时候指定参数--enable-memcache-session. 示例: session.save_handler= memcache session.save_path= "tcp://192.168.0.60:11211" b,默认保留地位为session.save_path= "/tmp"

July 3, 2022 · 1 min · jiezi

关于php:PHP设计模式七原型模式

原型模式与工厂模式相似与工厂模式实现不同,原型模式时先创立好一个原型对象,而后通过clone原型对象来创立新对象,免去了类创立时的初始化操作原型模式实用于大对象创立,创立大对象开销大,每次new就会耗费很大,原型模式仅需内存拷贝class Canvas { private $data; public function init($hei,$wid){ for($i=0;$i<$hei;$i++){ for($i=0;$i<$wid;$i++){ $data[$i][$j] = "*"; } } $this->data = $data; } public function rect($a1,$a2,$b1,$b2) { foreach($this->data as $k1->$line){ if($k1<$a1 or $k1 > $a2) continue; foreach($line as $k2 => $item){ if($k2<$b2 or $k2> $b2) contine; $this->data[$k1][$2] = ' '; } } } public function draw(){ foreach ($this->data as $line){ foreach ($lien as $item) { echo $item; } echo PHP_EOL: } } }$canvas = new Canvas1();$canvas->init(3,6,4,12);$canvas->draw();// 传统 ,再new一个对象,画其余长方形// 原型模式$prototype = new Canvas();$prototype->init();$canvas2= clone $prototype; // 克隆一个, 残余的都走clone就能够了,不须要再new了$canvas2->rect(1,3,2,6);$canvas2->draw();

July 2, 2022 · 1 min · jiezi

关于php:PHP数组转树状结构的两种方法递归引用

递归/** * 数组转树状构造 * @param arr $list 要转换的数据 * @param int $pid 父级ID * @param str $pid_field 父级字段名 * @param str $id_field 主键名 */ function getTree($list, $pid=0, $pid_field='pid', $id_field='id'){ $result=[]; foreach ($list as $k => $v) { if($list[$k][$pid_field] == $pid){ unset($list[$k]); $children = getTree($list,$v[$id_field]); if($children){ $v['children'] = $children; } $result[]=$v; } } return $result; }援用/** * 数组转树状构造 * @param arr $list 要转换的数据 * @param str $pid_field 父级字段名 * @param str $id_field 主键名 */ function getTree($list, $pid_field='pid', $id_field='id'){ $items=[]; foreach ($list as $k => $v) { $items[$v[$id_field]]=$v; } $tree=[]; foreach ($items as $k => $v) { if(isset($items[$v[$pid_field]])){ $items[$v[$pid_field]]['children'][]=&$items[$k]; }else{ $tree[]=&$items[$k]; } } return $tree; }

July 1, 2022 · 1 min · jiezi

关于php:Go119-那些事国产芯片内存模型等新特性你知道多少

大家好,我是煎鱼。 感觉工夫过得很快,Go1.18 公布没太久,泛型还在风风火火,看了看上次的投票后果,绝大部分同学还没有在生产环境利用泛型。 这不,Go1.19 Beta1 曾经正式公布了。明天就由煎鱼和大家围观《Go 1.19 Release Notes》中一些有意思的个性。 内存模型Go 的内存模型已被订正,以使 Go 与 C、C++、Java、JavaScript、Rust 和 Swift 应用的内存模型保持一致。Go 只提供程序统一的原子学,而不是其余语言中的任何更宽松的模式。 另外随着内存模型的更新,Go1.19 在 sync/atomic 包中引入了新的类型,使之更容易应用原子值,如 atomic.Int64 和 atomic.Pointer[T]。 文档做了以下具体的批改: 记录 Go 的整体内存模型形容。记录 multiword 竞态会导致解体的状况。记录 runtime.SetFinalizer 的 happens-before。记录(或链接)更多同步类型的产生前。记录同步/原子的产生工夫,匹配 C++ 的程序统一的原子(以及Java、JavaScript、Rust、Swift、C...)。记录不容许的编译器优化。这个只是 “订正”,是改了文档和定义,并不波及内存模型的代码变更。 为此 Russ Cox 写了 Go Memory Model 的三篇文章作为系列阐明: 《Hardware Memory Models》《Programming Language Memory Models》《Updating the Go Memory Model》有趣味的同学能够浏览。 文档标准Russ Cox 在提案《Proposal: go/doc: headings, lists, and links in Go doc comments》中,减少了对文档正文中的链接、列表和更清晰的题目的反对。 Go 1.19 文档曾经产生了变动。如下: ...

July 1, 2022 · 2 min · jiezi

关于php:php设计模式五数据对象映射模式-orm

数据对象映射模式 orm对象和数据存储映射,对对象的操作映射为对数据的存储操作// 映射到user表class User { public $id; public $name; public $regtime; private $db; public function __counstruct($id){ $this->db = (new Factory())->createDB); $this->db->connect($host,$user,$pwd,$dbname); // 这里为工厂模式创立,能够改为这册器模式,进一步进行优化,例如一次业务中须要实例化这个类屡次。 这里不能用单利模式,因为每个id应该为不同的实例 $rlt = $this->db->query("select * from user where id ='$id'")->fetchAll(); // 建设映射关系 $this->id = $rlt['id']; $this->name = $rlt['name']; $this->regtime = $rlt['regtime']; } public function __destruct(){ $this->db->exec("update user set name = $this->name regtime=$this->regtime where id = $id"); }}$user = new User(1); // 操作id为1的用户$user->name="aa";$user->regtiem = time();

June 29, 2022 · 1 min · jiezi

关于php:MyCms-自媒体商城-v341-发布使用手册更新

MyCms 是一款基于 Laravel 开发的开源收费的自媒体 CMS + 商城零碎,助力开发者常识技能变现。 MyCms 基于 Apache2.0 开源协定公布,收费且可商业应用,欢送继续关注咱们。 v3.4.1 更新内容 新增:PHPStudy 装置文档新增:收货地址应用文档新增:文章分类应用文档新增:文章治理应用文档新增:文章评论应用文档新增:商品分类应用文档新增:商品治理应用文档新增:订单治理应用文档新增:广告插件应用文档新增:网站地图插件应用文档新增:友情链接插件应用文档新增:必应推送插件应用文档新增:阿里云 OSS 插件应用文档新增:织梦数据导入插件应用文档新增:文章自定义模板阐明新增:分类自定义模板阐明优化:网站地图插件优化:命令生成插件优化:公布评论接口参数修改:后盾评论列表文章 ID 字段显示

June 29, 2022 · 1 min · jiezi

关于php:ModStartBlog-现代化个人博客系统-v520-主题开发增强新增联系方式

现代化集体博客零碎 ModStartBlog v5.2.0 主题开发加强,新增联系方式零碎介绍ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场领有丰盛的性能利用,反对后盾一键疾速装置,让开发者能快的实现业务性能开发。 零碎齐全开源,基于 Apache 2.0 开源协定。 零碎演示 性能个性丰盛的模块市场,后盾一键疾速装置会员模块通用且残缺,反对残缺的 API 调用大文件分片上传,进度条显示,已上传文件治理弱小的模块扩大性能,所有模块能够无缝集成,反对在线装置、卸载模块欠缺的开发助手,实现模块、主题的的一键创立欠缺的后盾权限治理,反对基于 RBAC 的权限管理系统后盾治理反对应用手机、平板、PC,无论何时何地都可方便管理第三方登录(QQ、微信、微博、支付宝、微信小程序)第三方领取反对(微信、支付宝、支付宝当面付、微信扫码、微信小程序)第三方云存储反对,反对云贮存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云)第三方短信反对(阿里云、腾讯云、华为云、百度云、253 云通信、聚合、七牛云、融云、赛邮、UCloud、云片、网易云)V5.2.0 版本更新2022 年 06 月 29 日 ModStartBlog 公布 v5.2.0 版本,减少了以下 6 个个性: [新性能] 创立文件夹失败时记录日志[新性能] 接口不存在时提醒显示接口门路[新性能] 博客联系方式(QQ、邮箱、微博、微信)[新性能] 主题开发加强,新增联系方式[新性能] 博客模板开发性能优化[系统优化] 后盾登录验证码缓存问题模块市场一键装置零碎内置模块市场,有行业利用、插件、云存储、云短信等功能模块,后盾反对一键装置、启用、禁用、卸载,可疾速搭建属于本人的零碎利用。 功能模块 零碎演示与文档码云仓库:https://gitee.com/modstart/Mo...Github 仓库:https://github.com/modstart/M...零碎演示:https://cms.demo.tecmz.com/下载试用:https://modstart.com/download开发者文档:https://modstart.com/doc模块市场:https://modstart.com/store

June 29, 2022 · 1 min · jiezi

关于php:Gmail如何快速将邮件全部已读

本文具体解说如何将Gmail邮箱中的未读邮件批量设为全副已读。 以前,Gmail邮箱还提供全副未读邮件一键已读的性能,但当初,这个性能被勾销了。即便如此,咱们还是能够用上面的办法,疾速的筛选出未读邮件,并疾速的设为已读。 本文原文出自LOYSEO:https://loyseo.com/gmail-mark-all-as-read/ 首先,Gmail每页的默认邮件数量是50,咱们能够将它改为100,这样每次解决未读邮件的数量就更多。 请在右上角找到设置图标,点击后,在开展的面板中,找到查看所有设置 在设置的惯例页面中,找到页面大小下限,设为100,并在页面底部点击保留。 而后,在邮箱顶部的搜寻邮件输入框右侧,点击筛选图标 在筛选面板中,设置搜寻为未读邮件,而后点击搜寻按钮 而后,你会发现,在输入框中呈现了is:unread文案,当然,你也能够间接将这个文案,放到输入框并回车实现——筛选出所有未读邮件。 最初,点击下图2处的全选按钮,再点击3处的标记为已读,那么就能将当前页的100条未读邮件设为已读了。并且,这100条已读的会主动从以后筛选后果中隐没,你能够持续按2、3进行疾速的操作,直至所有邮件全副已读。 相干Gmail操作技巧教程:Gmail:如何跟踪邮件浏览状态Gmail:如何撤回收回的邮件? 本文由专一于外贸建站的LOYSEO 公布

June 29, 2022 · 1 min · jiezi

关于php:php设计模式四策略模式

策略模式策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境举例:例如,男女用户跳转到不同的页面,并且所有的广告位展现不同的广告, 如果某天新增了一种中性的性别,则须要在所有判断的中央进行批改,应用策略模式躲避批改实现依赖倒置、管制反转// 策略接口 约定策略的行为interface UserStrategy { public function showAD();}// 女性class FemaleUser implements UserStrategy { public function showAD(){ echo "nv"; }}// 男class MaleUser implements UserStrategy { public function showAD(){ echo "男"; }}// 展现类// page类依赖Female和MaleStrategy,然而当初只是依赖UserStrategy,Female和male依赖UserStrategy,从而实现反转,// 个别依赖反转的实现计划:一个类依赖另一个类,个别是依赖几个办法,将这几个办法形象处一个接口,依赖的类,实现这个借口,就实现了倒置 详情见DIP准则class Page { private $s; public function index(){ $this->a->showAD(); } public function setStrategy(UserStrategy $class){ $this->s = $class; }}// 只在一个中央判断,配置策略对象(Page),其余中央应用if($type=='male' ){ $obj = new MaleUser();}if($type == 'Female'){ $obj = new FemaleUser();}$p = new Page();$p->setStrategy($obj);$p->index();

June 28, 2022 · 1 min · jiezi

关于php:NFT双币流动性挖矿分红系统开发

 NFT双币流动性挖矿分成零碎开发【181-开发-2591-零碎-3365】LP单币质押挖矿APP零碎开发方式,LP单币质押挖矿零碎开发技术。 (揭示:玩家留神-玩家留神-玩家留神-内容仅供参考-玩家请绕道-谢谢!) 什么是流动性挖矿? 流动性挖矿(liquiditymining)是一种通过质押加密货币,来获取更多加密货币的办法。它是去中心化金融(DeFi)中的一种新趋势,可能让加密货币投资者充分发挥其加密资产的作用并取得较高的收益回报,并且任何人都能够参加这个生态系统。简略来说,这意味着锁定加密货币即可取得处分。 NFT挖矿攻略 NFT或NFTs挖矿的劣势是更容易判断NFT场景是否有市场和价值,因为NFT就是为利用落地而生。 NFT题材的区块链网络可能有电子现金、抵押借贷性能,但相对是辅助性能,甚至能够不要,也不会影响NFT的落地。 打金模式 比方在区块链网络上的游戏,其金币代币化后,能够流向生态链,这就是一种很好的模式。 美国有很多美刀玩家须要更多区块链游戏代币帮忙其取得更好的配备、属性等,而菲律宾利用其低廉的人力老本参加打金流动,双赢。 流动性挖矿模式 当打金团队打出多余的代币或者游戏玩家长期须要代币时,流动性挖矿场景就呈现了。 流动性挖矿矿工能够向玩家借贷代币,也能够帮打金玩家放贷代币,以取得收益。 所以,NFT挖矿更适宜创新型挖矿玩家,从策略上判断NFT根底链、利用根底链及NFT资产的将来价值,以精细化的形式经营挖矿过程。

June 24, 2022 · 1 min · jiezi

关于php:php设计模式三适配器模式

适配器模式适配器模式将截然不同的函数接口封装成对立的api理论利用:php数据操作有mysql、mysqli、pdo,能够适配器模式对立成统一的。相似还有cache适配器。将memecache、redis、file、apc等不同缓存,对立成统一 // 应用数据库进行演示interface IDatabase { public function connect($host,$user,$passwd,$dbname); public function query($sql); public function close();}class mysql implements IDatabase { public function connect($host,$user,$pwd,$dbname){ mysql_connect(); mysql_select_db(); } public function query ($sql) { mysql_query($sql); } public function close(){ mysql_close() }}class PDO implements IDatabase { private $pdo; public function connect($host,$user,$pwd,$dbname){ $this->pdo = new \PDO('mysql:host=$host;dbname=$dbname',$user,$pwd); } public function query ($sql) { $this->pdo->query($sql) } public function close(){ unset($this->pdo) }}

June 23, 2022 · 1 min · jiezi

关于php:docker安装RabbitMQ

摘要本文次要介绍了应用docker装置rabbitmq音讯队列服务,并简述了应用php操作rabbitmq的必要composer安装包php-amqplib`的装置办法。同时概述了应用rabbitmq进行业务开发的次要步骤。如想理解php操作rabbitmq的具体源码,请查看 php极速开发源码包之super.rabbitmq 装置RabbitMQ参考文档拉取镜像docker pull docker.io/rabbitmq:3.8-management运行容器(会主动启动)docker run --name rabbitmq -d -p 15672:15672 -p 5672:5672 rabbitmq:3.8-management启动rabbitmq服务(若曾经启动能够跳过)docker start rabbitmq拜访127.0.0.1:15672 默认账号密码 guest/guest 默认端口:15672 为网页治理 5672 为 AMQP端口(连贯mq时应用) 补充内容装置composer依赖php composer.phar require php-amqplib/php-amqplib开发步骤治理页面创立 vhost(虚拟机)并创立用户绑定vhost(用户能够操作此vhost)创立exchange(交换机) 并绑定vhost创立queue,并绑定exchange和指定routekey(发送到此exchange的routekey音讯将被散发到此queue)生产者连贯vhost并将音讯推送到exchange并指定routekey消费者连贯vhost并指定队列进行生产(无需指定routekey和exchange)exchange散发模式direct生产者音讯的routekey必须和队列绑定的routekey齐全匹配才会调配到队列 topic生产者音讯的routekey只有合乎队列绑定的routekey通配符规定就会调配到队列 routekey通配符设置routekey 个别都是有一个或多个单词组成,多个单词之间以”.”宰割,例如: item.insert通配符规定:# 匹配一个或多个词, 匹配不多不少恰好1个词,例如:item.# 可能匹配 item.insert.abc 或者 item.insert,item. 只能匹配 item.insert相干文章php极速开发源码包之super.rabbitmq原文链接原文来自《稻田代码》点击查看原文《docker装置RabbitMQ》

June 23, 2022 · 1 min · jiezi

关于php:GeneratePress全局颜色设置教程

本教程解说如何在GeneratePress主题中配置网站的全局色彩。 本文原文出自:https://loyseo.com/tutorial/generatepress/global-colors/ 您能够在自定义(customize) > 色彩(colors)中找到GeneratePress主题的全局色彩(global colors)配置项。 关上色彩面板后,您将下图中的全局色彩和元素列表。 全局色彩GeneratePress主题默认增加了 7 种颜色,每种色彩都有特定的用处。 从左到右,别离有如下色彩: 对比色(contrast)——最深的文字色彩对比色 2 – 较浅的文本色彩对比色 3 – 最浅的文本/边框色彩根底(base) – 深色背景根底 2 – 较浅的背景根底 3 – 最浅的背景(红色)强调(accent)——品牌主色调您能够删除或重命名这些默认色彩。然而,如果您这样做,您须要更新应用了这些已删除或重命名色彩的色彩字段,因为这些字段将不再具备色彩值。 您还能够依据须要增加任意数量的自定义色彩。留神,要放弃您的全局色彩的简略和最小化——这些色彩是您将在整个设计和内容中重复使用的色彩。这里的益处是:您能够随时更换色彩以齐全扭转您网站的格调。 对比色 对比色通常是文本/边框色彩。 根底色 根底色通常是您的背景色。这些色彩和您的对比色之间应该有足够的对比度,以便您的文本依然容易看清。 强调色 您的强调色是您网站上应用起码的色彩。它们旨在吸引注意力(链接、按钮、非凡题目等……)。 为元素抉择色彩你能够将将鼠标点选须要配置的元素,譬如primary navigation(菜单),在开展的配置项里,将悬停在色彩选项上以理解每个选项的用处。 例如:初始(initial)/悬停(hover)/以后选中(current)色彩选项,你能够为主菜单和子菜单设置背景、文本、子菜单的不同色彩。 抉择色彩的操作很简略,你能够单选一个全局色彩,或依据须要抉择新的色彩。 查看更多GeneratePress主题教程 本文由专一于外贸建站的LOYSEO 公布

June 23, 2022 · 1 min · jiezi

关于php:Go-为什么不支持前缀自增运算符

大家好,我是煎鱼。 习惯性比照,类比学习,是大家把握新技能时会习惯性的关联操作。像 Go 这种比拟有滋味的编程语言,其有一个细节也是大家很好奇的。 其实 Go 只反对后自增/自减,明天煎鱼和大家一起钻研为什么。 语法根本的 Go 自增,非常简单。间接见代码: a := 1a++fmt.Println(a)输入后果: 2如果答复输入后果错了,倡议右拐语法了。接下来看看其余几个例子,与你料想的运行后果是否统一。 例子 1,代码如下: func main() { a := 1 b := a++ fmt.Println(b)}输入的后果: # command-line-arguments./main.go:9:8: syntax error: unexpected ++ at end of statement例子 2,代码如下: func main() { a := 1 ++a fmt.Println(a)}输入的后果: # command-line-arguments./main.go:9:2: syntax error: unexpected ++, expecting }你会发现这两个例子,在其余常见语言中都是失常的。但在 Go 中居然会运行谬误? 起因Go 在设计上: 没有反对前缀自增自减的运算语句,也就是不容许 ++a。运算符 ++ 和 -- 只能作为一个语句来应用,不能够作为表达式被赋值给其它的变量应用。参照以下例子: 在语句中,++ 是能够的。在赋值 = 中 ++ 是不能够。那为什么就不反对了呢?实质上 Go 的设计者是为了让代码领有更好的可读性,也不须要纠结求值程序了。 ...

June 22, 2022 · 1 min · jiezi

关于php:php设计模式二注册树

注册器模式将全局对象注册到全局树上,将对象进行初步加载,laravel app类的三个办法就是注册器模式 class Register { static protected $obj; // 将对象注册 public function set($alias,$object) { self::$obj[$alias] = $object; } // 删除注册 public function _unset($alias){ unset(self::$obj[$alias]) } public function get($alias){ return self::$obj[$alias]; }}// DataBase中能够应用Register进行注册,其余中央的调用,也能够间接应用register类get到class Factory { static function createDB(){ Register::set('db1',new Database()); return Register::get('db1'); }}

June 21, 2022 · 1 min · jiezi

关于php:Gmail如何跟踪邮件阅读状态

本文具体解说如何应用Mailtrack对Gmail收回的邮件进行浏览状态跟踪,以便你理解邮件是否送达、是否浏览。 如果你还没有Gmail邮箱,请先看这篇教程注册Gmail。 本文原文出自LOYSEO:https://loyseo.com/how-to-track-the-reading-status-of-gmail-emails/ 装置谷歌浏览器扩大Mailtrack首先,确保你应用的是谷歌浏览器(Chrome),在谷歌浏览器的设置中,找到more tools(更多工具)-Extensions(扩大) 找到mailtrack扩大程序 进入这个扩大程序并点击增加至Chrome。 点选须要启用邮件跟踪的Gmail账号。 抉择收费的跟踪套餐 收费和付费的跟踪套餐的区别如下 抉择套餐后你将看到两个按钮,一个是返回Gmail,一个是让你去装置Gmail addon以便在手机利用上跟踪邮件。 ![Mailtrack Installation Complete ](https://loyseo.com/wp-content... "mailtrack installation complete - Gmail:如何跟踪邮件浏览状态") 1.点击返回Gmail按钮,你能在右上角看到下图所示的Mailtrack的绿色图标。点击它便能够查看到相应的状态和配置性能;如果你看到的是灰色的图标,阐明在以后邮件账户中还未启用邮件跟踪,请点击它并enable启用即可。 2.装置Gmail addon以便在手机利用上发邮件后也能跟踪邮件 倡议不要间接点击界面中的按钮去装置,我试过,装置不胜利,能够按上面的流程自行装置。 返回你的邮箱,点击设置-查看所有设置 在设置-插件中,点击治理 在治理中,输出mailtrack,找到下图所示的利用,点击进入并装置 ![Google Workspace Marketplace Mailtrack](https://loyseo.com/wp-content... "google workspace marketplace mailtrack 1 - Gmail:如何跟踪邮件浏览状态") ![Google Workspace Marketplace Mailtrack](https://loyseo.com/wp-content... "google workspace marketplace mailtrack 2 - Gmail:如何跟踪邮件浏览状态") 如果你有多个Gmail账号,须要自行抉择给谁装 选完后,点击容许mailtrack的各项要求 装置实现后,有两个提示信息,别离点击下一页、实现,也能够敞开跳过。 ...

June 21, 2022 · 1 min · jiezi

关于php:推荐一个PHP-Tree无限级分类组件-BlueMTree

github地址:https://github.com/BlueM/Tree 假如数据为:$data = [...];初始化:$tree = new BlueM\Tree( $data, ['rootId' => -1, 'id' => 'nodeId', 'parent' => 'parentId']);常见用法:// Rebuild the tree from new data$tree->rebuildWithData($newData);// Get the top-level nodes (returns array)$rootNodes = $tree->getRootNodes();// Get all nodes (returns array)$allNodes = $tree->getNodes();// Get a single node by its unique identifier$node = $tree->getNodeById(12345);额定这个插件默认转json的话,只会输入一层数据,如果想返回多层数据,须要在初始化的时候多加一个参数: $tree = new Tree($data, ['jsonSerializer' => new Tree\Serializer\HierarchicalTreeJsonSerializer()]

June 20, 2022 · 1 min · jiezi

关于php:Go-内联优化能让程序快多少

大家好,我是煎鱼。 最近周末在家学习时看到 @Dave Cheney 的《Inlining optimisations in Go》还是有不少营养的,翻译分享给大家,有所修整、删减。 这是一篇介绍 Go 编译器如何实现内联的文章,以及这种优化将如何影响你的 Go 代码。 接下来和煎鱼一起开始汲取常识。 什么是内联?内联是将较小的函数合并到它们各自的调用者中的行为。其在不同的计算历史期间的做法不一样,如下: 晚期:这种优化通常是由手工实现的。当初:内联是在编译过程中主动进行的一类根本优化之一。为什么内联很重要?内联是很重要的,每一门语言都必然会有。具体的起因如下: 它打消了函数调用自身的开销。它容许编译器更无效地利用其余优化策略。外围来讲,就是性能更好了。 函数调用的开销基本知识在任何语言中调用一个函数都是有代价的。将参数编入寄存器或堆栈(取决于ABI),并在返回时反转这一过程,这些都是开销。 调用一个函数须要将程序计数器从指令流中的一个点跳到另一个点,这可能会导致流水线停滞。一旦进入函数,通常须要一些前言来为函数的执行筹备一个新的堆栈框架,在返回调用者之前,还须要一个相似的序幕来退掉这个框架。 Go 中的开销在 Go 中,一个函数的调用须要额定的老本来反对动静堆栈的增长。在进入时,goroutine 可用的堆栈空间的数量与函数所需的数量进行比拟。 如果可用的堆栈空间有余,序言就会跳转到运行时逻辑,通过将堆栈复制到一个新的、更大的地位来减少堆栈。 一旦这样做了,运行时就会跳回到原始函数的终点,再次进行堆栈查看,当初通过了,而后持续调用。通过这种形式,goroutines能够从一个小的堆栈调配开始,只有在须要时才会减少。 这种查看很便宜,只须要几条指令,而且因为goroutine的堆栈以几何级数增长,查看很少失败。因而,古代处理器中的分支预测单元能够通过假如堆栈查看总是胜利来暗藏堆栈查看的老本。在处理器谬误预测堆栈查看并不得不抛弃它在投机执行时所做的工作的状况下,与运行时增长goroutine堆栈所需的工作老本相比,管道停滞的老本绝对较小。 Go 里的优化尽管每个函数调用的通用组件和 Go 特定组件的开销被应用投机执行技术的古代处理器很好地优化了,但这些开销不能齐全打消,因而每个函数调用都带有性能老本,超过了执行有用工作的工夫。因为函数调用的开销是固定的,较小的函数绝对于较大的函数要付出更大的代价,因为它们每次调用的有用工作往往较少。 因而,打消这些开销的解决方案必须是打消函数调用自身,Go 编译器在某些条件下通过用函数的内容替换对函数的调用来做到这一点。这被称为内联,因为它使函数的主体与它的调用者保持一致。 改善优化的机会Cliff Click 博士将内联形容为古代编译器进行的优化,因为它是常量流传和死代码打消等优化的根底。 实际上,内联容许编译器看得更远,容许它在特定函数被调用的状况下,察看到能够进一步简化或齐全打消的逻辑。 因为内联能够递归利用,优化决策不仅能够在每个独自的函数的上下文中做出,还能够利用于调用门路中的函数链。 进行内联优化不容许内联内联的成果能够通过这个小例子来证实: package mainimport "testing"//go:noinlinefunc max(a, b int) int { if a > b { return a } return b}var Result intfunc BenchmarkMax(b *testing.B) { var r int for i := 0; i < b.N; i++ { r = max(-1, i) } Result = r}运行这个基准能够失去以下后果: ...

June 20, 2022 · 2 min · jiezi

关于php:php设计模式一单例工厂

咱们首先讲,单例、工厂模式,两个最最根本的设计模式 设计模式中罕用的魔术办法__get/__set 拜访不存在的属性时__call(fun_name,para)/__callStatic 拜访类不存在的办法时调用__tostring 将对象当做字符串时,调用,比方echo一个对象__invoke($param) 将对象当做函数应用的时候调用工厂模式如果一个类产生名字、参数等批改,能够间接在工厂里批改,不必在每个new的中央批改 class Factory { static function createDB(){ return new DataBases(); }}单例模式屡次实例化和一次实例化成果统一,节俭资源 class DataBases{ static private $db; // 避免new private function __construct(){ } private function __clone(){} static public function instance(){ if(!self::$db){ self::$db = new self(); } return self::$db; } }DataBases::instance();

June 19, 2022 · 1 min · jiezi

关于php:精品SSM框架个人健康服务预约系统设计和实现源码查重报告代码讲解论文中期检查ppt已降重

 博主介绍:✌退职Java研发工程师、专一于程序设计、源码分享、技术交换、专一于Java技术畛域和毕业设计✌文末获取源码分割 我的项目地址 项目名称SSM框架集体衰弱服务预约零碎设计和实现源码 视频成果SSM框架集体衰弱服务预约零碎设计和实现源码 零碎阐明 (1)医生性能需要 医生登录平台次要性能是个人信息的批改、首页的查看、出诊信息查看、预约挂号的查看、评估等等操作。医生用例图如图2-1所示。 编辑 图2-1医生用例图 (2)管理员性能需要 管理员登录平台次要性能是首页内容的治理、个人信息保护、用户和医生信息管理、科室信息保护、出诊信息查看和保护、预约工夫和挂号治理、就诊、留言板等等系统管理。管理员用例图如图2-2所示。 编辑 图2-2 管理员用例图 (3)用户性能需要 用户次要是预约挂号,抉择本人要挂的科室和医生,对历史挂号信息能够进行查看和勾销,曾经就诊过的号能够进行评估等等操作。用户用例图如图2-3所示。 编辑 环境须要1.运行环境:最好是java jdk 1.8,咱们在这个平台上运行的。其余版本实践上也能够。2.IDE环境:IDEA,Eclipse,Myeclipse都能够。举荐IDEA;3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本;6.是否Maven我的项目:否; 技术栈 后端:Spring+SpringMVC+Mybatis前端:JSP+CSS+JavaScript+jQuery应用阐明 应用Navicat或者其它工具,在mysql中创立对应名称的数据库,并导入我的项目的sql文件;应用IDEA/Eclipse/MyEclipse导入我的项目,Eclipse/MyEclipse导入时,若为maven我的项目请抉择maven;若为maven我的项目,导入胜利后请执行maven clean;maven install命令,而后运行;将我的项目中springmvc-servlet.xml配置文件中的数据库配置改为本人的配置;运行我的项目,在浏览器中输出http://localhost:8080/ 登录运行截图编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑  用户管理控制层:package com.houserss.controller; import javax.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody; import com.houserss.common.Const;import com.houserss.common.Const.Role;import com.houserss.common.ServerResponse;import com.houserss.pojo.User;import com.houserss.service.IUserService;import com.houserss.service.impl.UserServiceImpl;import com.houserss.util.MD5Util;import com.houserss.util.TimeUtils;import com.houserss.vo.DeleteHouseVo;import com.houserss.vo.PageInfoVo; /** Created by admin */@Controller@RequestMapping("/user/")public class UserController { @Autowiredprivate IUserService iUserService;/** * 用户登录 * @param username * @param password * @param session * @return */@RequestMapping(value = "login.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<User> login(User user,String uvcode, HttpSession session){ String code = (String)session.getAttribute("validationCode"); if(StringUtils.isNotBlank(code)) { if(!code.equalsIgnoreCase(uvcode)) { return ServerResponse.createByErrorMessage("验证码不正确"); } } ServerResponse<User> response = iUserService.login(user.getUsername(),user.getPassword()); if(response.isSuccess()){ session.setAttribute(Const.CURRENT_USER,response.getData()); } return response;}} ...

June 18, 2022 · 5 min · jiezi

关于php:利用微信公众号提供的官方API上传图片获取永久图片素材当图床用

需要本人开发的小程序,例如社区类、电商类、新闻、博客等类型小程序,会须要贮存很多图片,图片资源会给集体开发者带来很多老本,万一访问量大了,网站带宽、流量也会不堪重负,所以图片资源必然不适合贮存在本人的服务器外面,而很多厂商提供的弹性贮存也是按需付费的。 想法微信公众平台提供了一个素材治理,外面能够上传图片、视频、音频等类型的素材,那么是否能够将图片素材上传上去,获取到url作为本人小程序我的项目的图片服务器呢?当然没问题! 依据开发文档的说法:永恒图片素材新增后,将带有URL返回给开发者,开发者能够在腾讯系域名内应用(腾讯系域名外应用,图片将被屏蔽)。简略来说就是你只能在腾讯的平台应用这个图片素材URL,否则无奈展现,因为有防盗链。 开发依据微信公众平台开发文档提供的【新增永恒素材】接口可知,分为以下几个步骤实现上传图片素材到微信服务器。 获取access_token调用新增永恒素材接口进行上传素材获取到素材的永恒URL代码如下: <?php// 返回JSONheader("Content-type:application/json");// 容许上传的图片后缀$allowedExts = array("jpeg", "jpg", "png");// 后缀名if ($allowedExts[0] == 'jpeg') { $hzm = 'jpg';}else{ $hzm = $allowedExts[0];}// 获取抉择的文件$temp = explode(".", $_FILES["file"]["name"]);// 获取文件后缀名$extension = end($temp);if ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/jpg")|| ($_FILES["file"]["type"] == "image/pjpeg")|| ($_FILES["file"]["type"] == "image/x-png")|| ($_FILES["file"]["type"] == "image/png"))&& ($_FILES["file"]["size"] < 10485760)&& in_array($extension, $allowedExts)){ if ($_FILES["file"]["error"] > 0){ $result = array( 'code' => 201, 'msg' => '上传失败'.$_FILES["file"]["error"] ); }else{ // 重命名 $new_file = date("Y-m-d")."-".rand(10000,99999).".".$hzm; // 上传到本人的服务器 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$new_file); // 获取实在地址 $filepath = realpath(dirname(__FILE__)); $upload_filepath = $filepath."/upload/".$new_file; // 上传到微信服务器 $imgurl = upload_img($upload_filepath); // 验证上传后果 if(strpos($imgurl,'http') !== false){ // 上传胜利 $result = array( 'code' => 200, 'msg' => '上传胜利', 'url' => $imgurl ); // 删除本地素材 unlink($upload_filepath); }else{ // 上传失败 $result = array( 'code' => 202, 'msg' => '上传失败' ); } }}// 获取access_tokenfunction getToken(){ // appid和secret $appid='填写你公众号的appid'; $appsecret='填写你公众号的appsecret'; // 读取access_token include './access_token.php'; // 判断是否过期 if (time() > $access_token['expires']){ // 如果曾经过期就得从新获取并缓存 $access_token = array(); $access_token['access_token'] = getNewToken($appid,$appsecret); $access_token['expires']=time()+7000; // 将数组写入php文件 $arr = '<?php'.PHP_EOL.'$access_token = '.var_export($access_token,true).';'.PHP_EOL.'?>'; $arrfile = fopen("./access_token.php","w"); fwrite($arrfile,$arr); fclose($arrfile); // 返回以后的access_token return $access_token['access_token']; }else{ // 如果没有过期就间接读取缓存文件 return $access_token['access_token']; }}// 获取新的access_tokenfunction getNewToken($appid,$appsecret){ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}"; $access_token_Arr = https_request($url); return $access_token_Arr['access_token'];}// curl申请函数function https_request ($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $out = curl_exec($ch); curl_close($ch); return json_decode($out,true);}// 上传图片素材到微信服务器function upload_img($realpath){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token='.getToken().'&type=image'); $data = array( 'media' => new CURLFile($realpath) ); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $upimg = curl_exec($ch); return json_decode($upimg)->url; curl_close($ch);}// 返回JSON对象echo json_encode($result,JSON_UNESCAPED_UNICODE);?>申请返回{"media_id":"8IZhZUPXxsG_omeA5giO5By8VyHnjk7_oy0Co9jVWwxpgm-sqhx_Hkz_9rLVF9Ws","url":"http:\/\/mmbiz.qpic.cn\/mmbiz_png\/5zLSKyuEW2Kt5ZGZg7XUx05QyGOVFCpHqKic74qQP4gxzQJYXjwN4aGEiadtfUXax4fCXXV5ia1UnvSwdqxuqLCqA\/0?wx_fmt=png","item":[]}代码解释 ...

June 17, 2022 · 2 min · jiezi

关于php:不用编码的高端网站建设神器

如果对编程语言及网页设计工具并不纯熟,不用哀愁。可借助优良的建站神器实现疾速搭建网站,你不须要晓得HTML、CSS、PHP和其余艰涩难懂的语言。此类建站相当于拎包入住精装修样板房,摸着装修门路后,还可自在随便DIY改装,非常便捷实用。1、IM Creator IM Creator是一个风行的收费网站建设工具,它的易用性和多功能性超过了很多客户的预期。只须要你把控住超级菜单,依据您的须要做相应的拖放和性能抉择。它们包含视频、图片、画廊和幻灯片、按钮、超链接、甚至一个HTML小部件。最酷的中央在与你不须要创立繁琐的帐户,你能够轻松上路。 2、Kopage Kopage是一个十分疾速、弱小、易于应用的建站工具,有着许多玲珑的网页部件:包含相册、幻灯片、画廊、HTML和视频。它的最大特点是,它反对Cpanel主动装置,让你的网站在几分钟内筹备好。 3、WebStartToday.com WebStartToday.com提供了超过1000个不同的网页模板来匹配你的需要!甚至那些很少见的模版:旅行、夜生活、豪华轿车服务、锁匠、美食、目不暇接数之不尽!这里的模板能够保障是独此一家的。 4、MadeFreshly Madefreshly各具特色异样丰盛,足以满足日常建站须要。 5、sitestar!建站之星 国内自主开发的一款高端建站工具。提供超过2000个网页模板,可自行设计来合乎你的个性化需要,最大的亮点:可视化装修,相似WORD一样可撤销、复原;多个功能模块和插件像沉积木一样可高低叠加 ,轻轻松松、拖拖拽拽就是一个网站。反对多语言设置。 6、Webydo 如果你正在寻找在一家设计网页的业余公司,Webydo很适宜,甚至比设计师更能了解您的的需要!前提是你创立一个帐户,当然在Webydo这里是疾速的、简略的更是收费的。 7、Aircus Aircus是一个很有范的网络建设工具,模板不是很多,都只是简略的、优雅的和易于拜访的。你的网站在几分钟内就能够实现。 8、Wix Website提供着优良的网站建设服务,模板通过搜索引擎优化。这里还提供了一对一的征询以及每个月的网站保护。 9、Website.com Website提供着优良的网站建设服务,模板通过搜索引擎优化。这里还提供了一对一的征询以及每个月的网站保护。 10、Webzai Webzai的网站在电脑和手机以及便携设施上都有良好的兼容性!您能够应用模板或从头开始构建本人须要的所有。拖拽搜寻菜单容许您批改任何一个细节。 11、Ucoz Ucoz是一个受欢迎的网站,有着最佳的组合定价和风行性能。Ucoz曾经服务超过200万沉闷网站。反对16个语言本地化。

June 17, 2022 · 1 min · jiezi

关于php:聊聊PHP中的-运算符为什么比-快

这篇文章带你探索一下在php中什么为什么运算符===比==要快,文章中给大家介绍的十分具体,对大家的学习或工作都具备肯定的参考价值 在上一篇《聊聊PHP中require_once()函数为什么不好用》中给大家介绍了PHP中require_once()为什么不好用的起因,感兴趣的敌人能够去浏览理解一下~ 那么本文将给大家介绍PHP中的===运算符为什么比==快? PHP中的===和==运算符,这两个运算符属于PHP中的比拟运算符。 ===运算符称为相对等于,==运算符称为等于。 语法示例: $a == $b,如果在类型转换后 $a 等于 $b,则为 TRUE; $a === $b,如果 $a 等于 $b,并且两者的类型雷同,则为 TRUE; 如果操作数的类型不同,那么==和===将产生不同的后果。在这种状况下,操作符的速度会有所不同,因为==将执行类型转换,而后进行比拟。 如果操作数是雷同类型的,那么==和===将产生雷同的后果。在这种状况下,这两个操作符的速度简直雷同,因为任何操作符都不执行类型转换。 ==操作符会长期转换数据类型,以查看其值是否等于另一个操作数,而===不须要进行任何类型转换,因而实现的工作更少,这也就使得它比==操作符快。 代码示例1: var_dump(0 == "a"); // 1 == 1 -> truevar_dump("1" == "01"); // 10 == 10 -> truevar_dump("10" == "1e1"); // 100 == 100 -> truevar_dump(100 == "1e2"); var_dump(0 === "a"); // "1" === "01" -> falsevar_dump("1" === "01"); // "10" === "1e1" -> falsevar_dump("10" === "1e1"); // 100 == "1e2" -> falsevar_dump(100 === "1e2"); switch ("a") { case 0: echo "第一种状况"; break; case "a": echo "第二种状况"; break;}输入: ...

June 16, 2022 · 1 min · jiezi

关于php:php复制文件后改名的实例代码

在本篇文章里小编给大家整顿的是一篇对于php复制文件后改名的办法及相干内容,有趣味的敌人们能够学习下。 1、o函数来实现复制文件后批改文件名,该函数能够将一个文件复制(拷贝)到指定目录中。 2、语法“copy($file, $newfile)”;如果执行胜利则返回TRUE,如果执行失败则返回FALSE。 实例 <?phpheader("Content-type:text/html;charset=utf-8");$file = 'test.txt';$newfile = 'newtest.txt';if(copy($file, $newfile)){ echo '文件复制胜利!';}else{ echo '文件复制失败!';}?>实例扩大: <?php header("Content-type: text/html; charset=utf-8"); // 将原文件复制 function recurse_copy($src,$des){ $dir = opendir($src); mkdir($des); while(($file=readdir($dir)) !== false){ if ($file != '.' && $file != '..') { if (is_dir($src.'/'.$file)) { recurse_copy($src.'/'.$file,$des.'/'.$file); }else{ copy($src.'/'.$file,$des.'/'.$file); } } } closedir($dir); } recurse_copy('./img','./header'); // 将复制后的文件重新命名并输入$dir = './header';$filename = scandir($dir);$match = null; foreach($filename as $k=>$v){ if ($v!='.' && $v!='..') { $v = @iconv('GB2312','UTF-8',$v); preg_match('/\d+\s*(.*).jpg/',$v,$match); // preg_match('/(.*).jpg/',$v,$match); // var_dump($v); if($v != false){ $name = $match[1]; // echo $dir.'/'.$v.'<br>'; // echo ($k-1).'--'.$name.'<br>'; $oldname = $dir.'/'.$v; $newname = $dir.'/'.($k-1).'.jpg'; // echo $newname.'---'.$oldname.'<br>'; if (file_exists($newname)) { echo "指标文件已存"; // return false; }else{ // WINDOW零碎中中文默认编码是GBK善意塞,中文文件批改始终报错 // rename($oldname,$newname); rename(iconv('UTF-8','GBK',$oldname), iconv('UTF-8','GBK',$newname)); } } echo '<img src="'.$newname.'"" alt="'.$name.'">'; }} ?>到此这篇对于php复制文件后改名的实例代码的文章就介绍到这了。 ...

June 16, 2022 · 1 min · jiezi

关于php:php如何处理setcookie失效的问题

在本篇文章里小编给大家整顿的是一篇对于php如何解决setcookie生效的问题,有趣味的敌人们能够跟着学习下。 1、浏览器开启cookie。 2、删除在setcookie()之前的任何HTTP头部输入。 3、应用php的setcookie()来创立cookie即可。 应用php的setcookie()来创立cookie和php中开启session的 session_start()一样,在setcookie()之前不能有任何HTTP头部输入。我去查看代码,发现如下代码 var_dump($qOpenId);setcookie('qOpenId',$openid,time() + 30 * 24 * 3600,'/');果决正文var_dump($OpenId)这行,测试,胜利。 集体认为,setcookie应该是间接设置http header外面的内容,所以后面不能有任何头部输入,var_dump,echo 什么的都不能有。 知识点扩大: 用法setcookie(name,value,expire,path,domain,secure) 参数 形容 name 必须。规定 cookie 的名称。value 必须。规定 cookie 的值。expire 可选。规定 cookie 的有效期。path 可选。规定 cookie 的服务器门路。domain 可选。规定 cookie 的域名。secure 可选。规定是否通过平安的 HTTPS 连贯来传输 cookie。 setcookie("webURL",www.jb51.net, time()+3600*24);

June 16, 2022 · 1 min · jiezi

关于php:Laravel框架实现点播上传阿里云功能

这篇文章次要介绍了Laravel框架实现点播上传阿里云性能,本文给大家分享一段残缺的实例代码,代码简略易懂,须要的敌人能够参考下 1、确认框架中装置了第三方alibabacoud控件实现代码如下 上传过程中遇到工作问题,能够进行留言 <?php namespace App\Api\xxxx\Controllers;use DB;use Illuminate\Http\Request;use AlibabaCloud\Tea\Utils\Utils;use AlibabaCloud\SDK\Vod\V20170321\Vod;use AlibabaCloud\SDK\Vod\V20170321\Models\DeleteImageRequest;use AlibabaCloud\SDK\Vod\V20170321\Models\GetPlayInfoRequest;use AlibabaCloud\SDK\Vod\V20170321\Models\DeleteVideoRequest;use AlibabaCloud\SDK\Vod\V20170321\Models\GetImageInfoRequest;use AlibabaCloud\SDK\Vod\V20170321\Models\CreateUploadVideoRequest;use AlibabaCloud\SDK\Vod\V20170321\Models\CreateUploadImageRequest;use Darabonba\OpenApi\Models\Config;use OSS\OssClient;use AlibabaCloud\Tea\Tea;class CommonController extends XXController{ //视频点播上传 public function uploadVideo($fileName,$title) { $title = explode('.',$param['title']); $fileName = $param['fileName']; if($title[1] == 'mp4') { $cateId = 3479;//分类ID,阿里云点播能够设置 } $client = self::createClient("xxx", "xxx");//依据申请的值放入 $createUploadVideoRequest = new CreateUploadVideoRequest([ 'Action' => 'CreateUploadVideo',//申请的上传函数 "fileName" => $fileName,//文件名称 "cateId" => $cateId,//类型名称 'title' => $param['title'],//题目 ]); $createRes = $client->createUploadVideo($createUploadVideoRequest); $videoId = $createRes->body->videoId; //获取视频播放地址须要的参数 $formats = $title[1]; //base64解码 $uploadAddress = json_decode(base64_decode($createRes->body->uploadAddress), true); $uploadAuth = json_decode(base64_decode($createRes->body->uploadAuth), true); // 应用UploadAuth和UploadAddress初始化OSS客户端 $ossClient = $this->init_oss_client($uploadAuth, $uploadAddress); $localFile = $fileName; // 须要上传到VOD的本地视频文件的残缺门路 改这个有成果 // 上传文件,留神是同步上传会阻塞期待,耗时与文件大小和网络上行带宽无关 $result = $this->upload_local_file($ossClient, $uploadAddress, $localFile); //$result = multipart_upload_file($ossClient, $uploadAddress, $localFile); $arr = $this->playinfo($videoId,$formats); $data = Utils::toArray(Tea::merge($arr->body)); $brr = array(); $brr['VideoId'] = $data['VideoBase']['VideoId'];//视频id $brr['PlayURL'] = $data['PlayInfoList']['PlayInfo'][0]['PlayURL'];//返回的播放地址 return $brr; } public function init_oss_client($uploadAuth, $uploadAddress) { $ossClient = new OssClient($uploadAuth['AccessKeyId'], $uploadAuth['AccessKeySecret'], $uploadAddress['Endpoint'], false, $uploadAuth['SecurityToken']); $ossClient->setTimeout(86400*7); // 设置申请超时工夫,单位秒,默认是5184000秒, 倡议不要设置太小,如果上传文件很大,耗费的工夫会比拟长 $ossClient->setConnectTimeout(10); // 设置连贯超时工夫,单位秒,默认是10秒 return $ossClient; }}

June 16, 2022 · 1 min · jiezi

关于php:解决Laravel使用验证时跳转到首页的问题

当咱们在应用validate等办法进行验证时,如果是谬误,则会返回首页,那么这个跳转到首页如何实现的呢?明天小编给大家分享一篇教程对于Laravel应用验证时跳转到首页的解决办法,一起看看吧 当咱们在应用validate等办法进行验证时,如果是谬误,则会返回首页 1、间接在申请头中在申请头header中,accept应用appclication/json,使HTTP申请的承受返回只能是json格局。 2、批改框架函数 //vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php:136//将该办法中的$this->getRedirectUrl()去掉//不倡议应用,个别状况下尽量不要批改框架的代码3、倡议应用定义一个BaseRequest基类 <?php namespace App\Http\Requests; use Illuminate\Contracts\Validation\Validator;use Illuminate\Foundation\Http\FormRequest;use Illuminate\Http\Exceptions\HttpResponseException; class BaseRequests extends FormRequest{ /** * validate验证失败模板 * @param Validator $validator */ protected function failedValidation(Validator $validator) { $message = ''; foreach (json_decode(json_encode($validator->errors()),1) as $error){ $message = $error[0]; break; } throw (new HttpResponseException(response()->json([ 'code' => 400, 'msg' => $message, 'data' => [] ]))); }}集体认为这个办法一言难尽,不是很好。 4、最终我应用的解决办法在JSON申请时,头部的Accept指定为appliaction/json即可解决,当为JSON拜访时,则返回错误信息失常,非JSON时返回首页,肯定水平也是一个爱护呢。

June 16, 2022 · 1 min · jiezi

关于php:php安全攻防世界unserialize函数反序列化示例详解

这篇文章次要介绍了php的平安防护,对于攻防世界Web php unserialize正则表达式反序列化示例详解,有须要的敌人能够借鉴参考下,心愿可能有所帮忙 步骤首先关上题目,发现给了一段源码: 剖析源码,发现类外面有三个魔术办法: __construct():构造函数,对类的变量进行初始化,创立时主动调用,用失去的参数笼罩$file __destruct():销毁时调用,会显示文件的代码,这里要显示fl4g.php __wakeup():在进行反序列化之前会调用,会把$file重置成index.php 正则表达式的含意:o或c结尾,冒号,一个或多个数字,不辨别大小写 ok,剖析结束:咱们要将序列化后的字符串进行base64加密之后进行get传参到var变量即可然而这里咱们能够看出须要绕过__wakeup()函数以及正则匹配,才可能拿到flag __wakeup()办法绕过办法:当成员属性的数目大于理论数目的时候即可绕过此办法 正则匹配咱们能够应用+来进行绕过 代码: <?phpclass Demo { private $file = 'index.php'; public function __construct($file) { $this->file = $file; } function __destruct() { echo @highlight_file($this->file, true); } function __wakeup() { if ($this->file != 'index.php') { //the secret is in the fl4g.php $this->file = 'index.php'; } } }$a = new Demo("fl4g.php");// 传入咱们须要显示的文件$b = serialize($a);// 进行序列化echo $b;// O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}$b = str_replace("O:4", "O:+4", $b);// 绕过正则匹配$b = str_replace("1:{","2:{",$b);// 绕过__wakeup()办法echo base64_encode($b);// 进行base64编码并输入?>payload:var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ== ...

June 16, 2022 · 1 min · jiezi

关于php:php将xml转化对象的实例详解

在本篇文章里小编给大家整顿的是一篇对于php将xml转化对象的实例详解内容,有须要的敌人们能够跟着学习下。 XML文件 $xml= "123456";将文件转换成对象 $objectxml = simplexml_load_string($xml);将对象转换个JSON$xmljson= json_encode($objectxml ); 将json转换成数组 $xmlarray=json_decode($xmljson,true);内容扩大: PHP将XML转换成数组/对象 $xml= "<xml><appid>123456</appid></xml>";//XML文件$objectxml = simplexml_load_string($xml);//将文件转换成 对象$xmljson= json_encode($objectxml );//将对象转换个JSON$xmlarray=json_decode($xmljson,true);//将json转换成数组

June 16, 2022 · 1 min · jiezi

关于php:php实现自动生成验证码的实例讲解

在本篇文章里小编给大家整顿了一篇对于php实现主动生成验证码的实例解说内容,有须要的敌人们能够跟着学习下。 当初验证码在表单中的利用越来越多了,然而如果用js来实现总感觉不太不便,因而应用php来实现下,在此记录下。 当然,咱们也能够封装成一个函数,当前应用的时候也是很不便的,这里并未封装,感兴趣的小伙伴能够本人封装下。 具体实现代码: 新建一个cap_sz.php文件: <?phpsession_start(); //设置session,肯定要在顶部$width = 150; //设置图片宽为300像素$height = 40; //设置图片高为40像素$image = imagecreatetruecolor($width, $height); //设置验证码大小的函数$bgcolor = imagecolorallocate($image, 255, 255, 255); //验证码色彩RGB为(255,255,255)#ffffffimagefill($image, 0, 0, $bgcolor); //区域填充$cap_code = "";for($i=0;$i<4;$i++){ $fontsize = 7; //设置字体大小 $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120)); //数字越大,色彩越浅,这里是深色彩0-120 $fontcontent = rand(0,9); $cap_code.=$fontcontent; //.=间断定义变量 $x = ($i*150/4)+rand(5,10); $y = rand(5,10); //设置坐标 imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);}$_SESSION['code'] = $cap_code; //存到session//设置烦扰元素,设置雪花点for($i=0;$i<300;$i++){ $inputcolor = imagecolorallocate($image, rand(50,200), rand(20,200), rand(50,200)); //设置色彩,20-200色彩比数字浅,不烦扰浏览 imagesetpixel($image, rand(1,149), rand(1,39), $inputcolor); //画一个繁多像素的元素}//减少烦扰元素,设置横线(先设置线的色彩,在设置横线)for ($i=0;$i<4;$i++) { $linecolor = imagecolorallocate($image, rand(20,220), rand(20,220),rand(20,220)); //设置线的色彩 imageline($image, rand(1,149), rand(1,39), rand(1,299), rand(1,149), $linecolor); } //因为有些浏览器,拜访的content-type会是文本型(乱码),所以咱们须要设置成图片的格局类型header('Content-Type:image/png');imagepng($image); //建设png函数imagedestroy($image); //完结图形函数,打消$image实例扩大: ...

June 16, 2022 · 2 min · jiezi

关于php:php访问对象中的成员的实例方法

在本篇文章里小编给大家整顿了一篇对于php拜访对象中的成员的实例办法,有须要的敌人们能够跟着学习参考下。 对象是由成员属性和成员办法形成的,想要拜访对象成员的话,实际上有点像拜访数组中的元素,既然有点像的话,通过对象的援用来拜访对象的成员,还须要应用一个非凡的运算符号->来实现对象成员的拜访。 实例 <?phpclass Website{public $baba, $dad, $title;public function demo(){echo '福如东海,寿比南山'; } }$love = new Website();$love -> baba = '爸爸';$love -> dad = 'father';$love -> title = 'family';echo $love -> baba.'; echo $love -> dad.' echo $love -> title.' $love -> demo();?>实例扩大: <?php /** *PHP面向对象:对象中成员的拜访 */ // 申明一个类 class Person{ // 申明成员属性 var $name; var $age; var $sex; // 申明成员办法 function say(){ echo $this->name,'在谈话<br/>'; } function run(){ echo $this->name,'在走路<br/>'; } } // 实例化类中的对象 $person1=new Person(); $person2=new Person(); $person3=new Person(); // 给$persion1对象中的属性赋初值 $person1->name="张三"; $person1->age=12; $person1->sex="男"; // 给$persion2对象中的属性赋初值 $person2->name="李四"; $person2->age=21; $person2->sex="男"; // 给$persion3对象中的属性赋初值 $person3->name="王五"; $person3->age=22; $person3->sex="男"; // 拜访$person1对象中的成员属性 echo "person1对象的名字是:".$person1->name."<br/>"; echo "person1对象的性别是:".$person1->sex."<br/>"; echo "person1对象的年龄是:".$person1->age."<br/>"; // 拜访person1对象的办法 $person1->say(); $person1->run();

June 16, 2022 · 1 min · jiezi

关于php:php实例化对象的实例方法

在本篇文章里小编给大家整顿的是一篇对于php实例化对象的实例办法,有须要的敌人们能够跟着学习下。 想要将类实例化成对象,只是多了一个简略的小步骤,须要应用new关键字并且在前面加上一个和类名同名的办法就能够了。表明一个新的对象。 须要留神的是,当实例化对象不须要为对象传递参数时,在new关键字的前面间接应用类名不必加上括号。 实例化对象的语法格局如下: 变量名 = new 类名(参数列表);或变量名 = new 类名; 实例 <?php class Family{ } $father1 = new Family(); $father2 = new Family; $father3 = new Family; var_dump($father1); echo ''; var_dump($father2); echo ''; var_dump($father3);?>内容扩大: 实例化对象 将类实例化成对象非常容易,只须要应用new关键字并在前面加上一个和类名同名的办法即可。当然如果在实例化对象时不须要为对象传递参数,在new关键字前面间接用类名称即可,不须要再加上括号。 参数阐明如下: 变量名:通过类所创立的一个对象的援用名称,能够通过这个名称来拜访对象的成员; new:关键字,表明要创立一个新的对象; 类名:示意新对象的类型; 参数列表:指定类的构造方法用于初始化对象的值,如果类中没存定义构造函数,PHP 会主动创立一个不带参数的默认构造函数

June 16, 2022 · 1 min · jiezi

关于php:MyCms-v34自媒体博客购物商城系统

MyCms 是一款基于 Laravel 开发的开源收费的自媒体 CMS + 商城零碎,助力开发者常识技能变现。 MyCms 基于 Apache2.0 开源协定公布,收费且可商业应用,欢送继续关注咱们。 v3.4 更新内容 新增:订单表及模型新增:订单商品表及模型新增:购物车商品结算新增:商品间接结算新增:商品结算提交新增:订单对立领取接口新增:订单领取应用余额新增:后盾订单治理新增:后盾订单详情新增:后盾订单物流动静新增:用户订单列表接口新增:订单详情接口新增:确认订单实现接口新增:勾销订单接口新增:余额领取退款优化:接口参数验签优化:对立获取会员 ID 办法优化:获取图片绝对路径办法 更新重点 1、后盾订单治理 2、前台商品结算 3、前台订单相干接口

June 16, 2022 · 1 min · jiezi

关于php:php-png失真的原因及解决办法

在本篇文章里小编给大家整顿的是一篇对于php png失真的起因及解决办法,有须要的敌人们能够跟着学习参考下。 1、创立一个PHP示例文件。 2、创立一个和背景图片一样大小的真彩色画布。 3、复制背景图片。 4、通过“imagecreatefrompng”合成png图片即可。 实例 <?php ob_clean(); $bg = "image1.png"; $image_1 = imagecreatefrompng($bg); $bgx = imagesx($image_1); $bgy = imagesy($image_1); //创立一个和背景图片一样大小的真彩色画布(ps:只有这样能力保障前面copy图片的时候不会失真) $bgimage = imageCreatetruecolor($bgx,$bgy); imagesavealpha($bgimage, true);//放弃通明 imagealphablending($bgimage, true);//混色模式 $alpha = imagecolorallocatealpha($bgimage, 0, 0, 0, 127);//通明 imagefill($bgimage, 0, 0, $alpha); //copy背景图片 imagecopyresampled($bgimage,$image_1,0,0,0,0,$bgx,$bgy,$bgx,$bgy); $fontColor = imagecolorallocate($bgimage,0x33,0x33,0x33); $image_2 = imagecreatefrompng( "image2.png"); //合成图片2 imagecopyresampled($bgimage, $image_2, 100, 100, 0, 0, 40, 40, imagesx($image_2) , imagesy($image_2)); //文字 $textLen = mb_strlen($text1); $fontSize = 20; $fontWidth = imagefontwidth($fontSize)*3;//不知为什么,实测如此 $textWidth = $fontWidth * mb_strlen($text1); $textx = ceil ( ($bgx - $textWidth) / 2 ); imageTTFText($bgimage, $fontSize, 0, $textx, 450, $fontColor, $font , $text1); $result = imagepng($bgimage,"newimage.png"); imagedestroy($bgimage); imagedestroy($qrcode);更多相干解决办法 ...

June 15, 2022 · 1 min · jiezi

关于php:tp5使用layui实现多个图片上传带附件选择的方法实例

在以前我的项目中遇到有上传图片都是用 web Uploader插件上传,因为我当初我的项目都在应用 layui 所以明天趁着有工夫写一个tp5联合layui上传图片的示例,感兴趣的能够理解一下 p5应用layui实现多个图片上传(带附件抉择),如何加载layui在此不具体阐明,有须要能够百度 html代码,次要解决都是在jq中,实现办法全副原创,兴许不是最简略的,但也能实现成果 {include file="public/header" /}<body><div class="x-nav"> <span class="layui-breadcrumb"> <a href="">首页</a> <a href="">多选图片列表</a> <a> <cite>增加多选图片</cite></a> </span> <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" href="javascript:location.replace(location.href);" rel="external nofollow" title="刷新"> <i class="layui-icon" style="line-height:30px"></i></a></div><div class="x-body"> <div class="top" style="font-size: 14px">增加多选图片</div> <div style="width:100%;height: 5px;background-color: #077ee3;margin-top: 5px;margin-bottom: 20px"></div> <form action="" enctype="multipart/form-data" method="post" role="form" onSubmit="return check()"> <div class="layui-upload"> <button type="button" class="layui-btn" id="upload_img">多图片上传</button> <a class="layui-btn layui-btn-sm layui-btn-normal" onclick="selectImg('抉择图片','{:url("selectImg")}','1000','600')" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" > <i class="layui-icon">&#xe60a;</i>抉择图片 </a> <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> 预览图: <div class="layui-upload-list" id="demo2"></div> </blockquote> </div> <input name="url" class="imgInput" type="hidden"> <!--<button type="button" class="layui-btn" onclick="test()">--> <!--测试--> <!--</button>--> <div class="layui-form-item"> <label for="" class="layui-form-label"> </label> <button type="submit" class="layui-btn btnAdd" lay-filter="add" lay-submit=""> 减少 </button> </div> </form></div><style> .imgInput{ width: 600px; height: 35px; } .layui-form-label{ font-size: 14px; width: 100px; } select{ width: 500px; } #pre_img{ display: none; padding: 5px; border: 1px solid #999; } #demo2{ display: flex; display: -webkit-flex; /*justify-content: space-between;*/ flex-direction: row; flex-wrap: wrap; } .img{ width: 150px; height: 150px; } .btnAdd{ margin-top: 40px; } .img_item{ display: flex; flex-direction: column; text-align: center; margin-right: 20px; margin-bottom: 20px; } .delimg{ text-align: center; line-height: 20px; width: 160px; height: 20px; background-color: red; color: white; margin-top: 5px; }</style> <script> function check(){ $('input[name="url"]').val(urlList); var str = $('input[name="url"]').val(); if(str ==''|| str==null || str=='undefined'){ alert("请抉择图片"); return false; } } function selectImgGo($url,$urlWeb){ var index = 0; if(urlList.length>0){ index = urlList.length; } var img = $([ '<div class="img_item">', '<div class="img" style="overflow:hidden;">', '<img src="'+ $urlWeb +'" alt="' + $url +'" class="layui-upload-img" style="max-width:150px;"></div>', '<div class="delimg" id="delimg" onclick=delImg("'+ index +'") href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" style="cursor:pointer ">删除</div></div>' ].join('')); $('#demo2').append(img); urlList.push($url); imgList.push($urlWeb); } var imgList = []; var urlList = []; layui.use(['upload','jquery'],function () { $ = layui.jquery; var upload = layui.upload; //多图片上传 upload.render({ elem: '#upload_img' ,url:"{:url('share/upload_img')}" //上传接口 ,multiple: true ,before: function(obj){ //预读本地文件示例,不反对ie8 obj.preview(function(index, file, result){ }) } ,done: function(res){ var index0 = 0; if(urlList.length>0){ index0 = urlList.length; } var img0 = $([ '<div class="img_item">', '<div class="img" style="overflow:hidden;">', '<img src="'+ res.msg +'" class="layui-upload-img" style="max-width:150px;"></div>', '<div class="delimg" id="delimg" onclick=delImg("'+ index0 +'") href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" style="cursor:pointer ">删除</div></div>' ].join('')); $('#demo2').append(img0); urlList.push(res.url); imgList.push(res.msg); } ,error: function(){// layer.close(layer.msg());//敞开上传提醒窗口 //申请异样回调 } }); }); function delImg(index){ urlList.splice(index,1); imgList.splice(index,1); $('#demo2').empty(); for (var i=0;i<imgList.length;i++){ var img0 = $([ '<div class="img_item">', '<div class="img" style="overflow:hidden;">', '<img src="'+ imgList[i] +'" class="layui-upload-img" style="max-width:150px;"></div>', '<div class="delimg" id="delimg" onclick=delImg("'+ i +'") href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" style="cursor:pointer ">删除</div></div>' ].join('')); $('#demo2').append(img0); } } /*抉择图片*/ function selectImg(title,url,w,h){ x_admin_show(title,url,w,h); } </script></body> </html>php代码 ...

June 15, 2022 · 3 min · jiezi

关于php:php去除数组中为0的元素的实例分析

在本篇文章里小编给大家整顿了一篇对于php去除数组中为0的元素的实例剖析,有趣味的敌人们能够跟着学习下。 1、利用array_diff()函数来去除数组中为0的元素。 2、该函数用于比拟两个数组的值并返回差集,只须要应用一个蕴含“0”数组和原数组进行比拟即可。语法格局“array_diff($arr, [0])”。 实例 <?php// 革除数组中指定元素$arr = [1,2,3,0,1];$arr = array_diff($arr, [0]);//输入[1,2,3,1]var_dump($arr);?>内容扩大:在实现移除数组中我的项目为空的元素或为某值的元素时用到了两个函数 array_filter、create_function 先看一个实例: $array = Array ( [0] => 1 ,[1] => 2, [2] => 3, [3] => 4,[4] => '',[5] => '' );$array = array_filter($array,create_function('$v','return !empty($v);'));print_r($array);返回后果: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )函数介绍: array_filter array_filter() 函数用回调函数过滤数组中的元素,如果自定义过滤函数返回 true,则被操作的数组的以后值就会被蕴含在返回的后果数组中, 并将后果组成一个新的数组。如果原数组是一个关联数组,键名放弃不变。

June 15, 2022 · 1 min · jiezi

关于php:php去除deprecated的实例方法

在本篇文章里小编给大家整顿的是一篇对于php去除deprecated的实例办法,有趣味的敌人们能够跟着学习参考下。 1、找到并关上“php/php.ini”文件。 2、批改内容为“error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_WARNING”即可。 去掉PHP的中正告(warning)、deprecate等提醒的办法 关上php/php.ini: 批改 error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED为 error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_WARNING知识点扩大 php Deprecated 解决办法 这个问题是因为php版本过高。 在php5.3中,正则函数ereg_replace曾经废除,而dedecms还持续用。有两个计划能够解决以上问题: 1、把php版本换到v5.3下。 2、持续应用v5.3,批改php.ini文件 ;extension=php_mbstring.dll 改为 extension=php_mbstring.dll ;mbstring.func_overload = 0 批改为: mbstring.func_overload = 7 或者应用其余的函数: define('DEDEADMIN', ereg_replace("[/\]{1,}", '/', dirname(__FILE__) ) ); //改为 define('DEDEADMIN', preg_replace("/[/\\]{1,}/", '/', dirname(__FILE__) ) ); 注:因为preg_replace比ereg_replace的执行速度快,PHP举荐应用preg_replace.

June 15, 2022 · 1 min · jiezi

关于php:formdata和xwwwformurlencoded的区别以及PHP的获取

设定咱们发送的数据为: 键值usernameadminpassword123456form-data用form-data发送的数据,申请的ContentType是以下内容: Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryC9HBfJBUOivu2WEP前面的boundary就规定了分界线是:----WebKitFormBoundaryC9HBfJBUOivu2WEP发送的内容格局如下: ------WebKitFormBoundaryC9HBfJBUOivu2WEPContent-Disposition: form-data; name="username"admin------WebKitFormBoundaryC9HBfJBUOivu2WEPContent-Disposition: form-data; name="password"123456------WebKitFormBoundaryC9HBfJBUOivu2WEP--这个时候php://input是拿不到该内容的,$_POST能够获取。 x-www-form-urlencoded如果抉择了x-www-form-urlencoded,发送的值是: username=admin&password=123456php://input 和$_POST均能接管到此申请传来的值 php://input还能够获取Content-Type为text/html形式发送过去的数据。 $GLOBALS['HTTP_RAW_POST_DATA']这种获取申请内容的形式,曾经过期了,PHP5.6之后就弃用了。

June 15, 2022 · 1 min · jiezi

关于php:PHP获取学生成绩的方法

这篇文章次要为大家具体介绍了PHP获取学生问题的办法,文中示例代码介绍的十分具体,具备肯定的参考价值,感兴趣的小伙伴们能够参考一下 本文次要练习一下如何利用php实现一个简略的案例,即输出学生学号,失去相应的问题信息。 在此之前先来认识一下这个十分重要的语法 GET申请:参数在URL前面,多个参数用&进行连贯 同样的还有POST办法,但这篇文章中咱们应用GET办法 利用get申请参数的获取,听起来很高大上,其实说白了就是依据用户输出的信息,而后在数据库中寻找绝对应的数据,在这篇文章中咱们暂用数组办法结构一段信息帮忙大家了解。 话不多说,咱们先来看一下页面关上后以及操作的成果演示! 当咱们输出学号后,会在后盾搜寻绝对应的信息并展现 HTML代码如下 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>查问题</title></head><body> <h1>请在下列输入框中输出学生的考号进行:</h1> <form action="T1.php" method="get"> 输出考号:<input type="text" name="code"> <br> <input type="submit" value="查问"> </form></body></html>PHP代码如下 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <?php//定义变量,不然容易呈现notice级谬误error_reporting( E_ALL&~E_NOTICE ); //利用数组模仿数据,失常应该是由数据库进行查问 $data = array(); $data["123"] = array("name"=>"张三","chinese"=>"103","math"=>"89","english"=>"111"); $data["234"] = array("name"=>"李四","chinese"=>"93","math"=>"79","english"=>"121"); $data["456"] = array("name"=>"王五","chinese"=>"133","math"=>"100","english"=>"123"); //查询数据库 $code = $_GET["code"]; $result = $data[$code]; ?> <?php if(array_key_exists($code,$data)){ $result = $data[$code]; ?> <div> <div><?php echo $result["name"] ?>问题如下:</div> <ul> <li> 语文:<?php echo $result["chinese"] ?></li> <li> 数学:<?php echo $result["math"] ?></li> <li> 英语:<?php echo $result["english"] ?></li> </ul> </div> <?php } else { ?> <div>该学生考号不存在</div> <?php } ?></body></html>要留神的是,在上述代码中,另外加了if else语句,用来判断输出信息是否非法,意思就是如果输出的学号不正确,那么就无奈输入失常信息,咱们就要呈现相应的谬误提醒 ...

June 15, 2022 · 1 min · jiezi

关于php:php修改word的实例方法

在本篇文章里小编给大家整顿的是一篇对于php批改word的实例办法,有趣味的敌人们能够跟着学习参考下。 1、将word另存为网页。 2、批改为默认页面视图。 3、编写php代码。 4、通过fwrite等函数批改Word内容即可。 实例 ob_start();//开启缓存print'';//输入头部$content = file_get_contents(S_ROOT.'./temp/word/jzydt.htm');//获得模板内容$content = str_replace('<{jzydt_company_name}>',"400电话",$content);//通过一列替换操作,将会模板里的标签替换为承受的值,如果感觉有必要的话,用正则替换也行,但我不倡议动不动就用正则,能不必就不必吧!$docname = 'jzydt.doc';//生成保留的文件名,后缀为docecho $content;//将替换后的内容输入到缓存中print "";$data = ob_get_contents();ob_end_clean();$fp=fopen(S_ROOT.'./temp/word/'.$docname,"wb");//以二进制写权限关上一个新的word文件,即新建fwrite($fp,$data);//将内容写入并 保留fclose($fp);实例扩大: 应用PHP对word文档进行操作的办法 应用php时,因为加密等起因,如果间接用FILE后者OPEN等函数读取WORD的话往往是乱码,原来要应用COM 这是我简略的一个读取并存储到新的WORD上的文件 <?// 建设一个指向新COM组件的索引$word = new COM(”word.application”) or die(”Can't start Word!”);// 显示目前正在应用的Word的版本号//echo “Loading Word, v. {$word->Version}<br>”;// 把它的可见性设置为0(假),如果要使它在最前端关上,应用1(真)// to open the application in the forefront, use 1 (true)//$word->Visible = 0;//打?一个文档$word->Documents->OPen(”d:\myweb\muban.doc”);//读取文档内容$test= $word->ActiveDocument->content->Text;echo $test;echo “<br>”;//将文档中须要换的变量更换一下$test=str_replace(”<{变量}>”,”这是变量”,$test);echo $test;$word->Documents->Add();// 在新文档中增加文字$word->Selection->TypeText(”$test”);//把文档保留在目录中$word->Documents[1]->SaveAs(”d:/myweb/comtest.doc”);// 敞开与COM组件之间的连贯$word->Quit();?>

June 15, 2022 · 1 min · jiezi

关于php:php双向队列实例讲解

在本篇文章里小编给大家整顿的是一篇对于php双向队列如何了解的相干内容及实例,须要的敌人们能够跟着学习下。 1、双向队列是指一种具备队列和栈的性质的数据结构。 2、双向队列中的元素能够从两端弹出,其限定插入和删除操作在表的两端进行。 双向队列就像是一个队列,然而你能够在任何一端增加或移除元素。 实例 <?phpclass DoubleQueue{ public $queue = array(); /**(尾部)入队 **/ public function addLast($value) { return array_push($this->queue,$value); } /**(尾部)出队**/ public function removeLast() { return array_pop($this->queue); } /**(头部)入队**/ public function addFirst($value) { return array_unshift($this->queue,$value); } /**(头部)出队**/ public function removeFirst() { return array_shift($this->queue); } /**清空队列**/ public function makeEmpty() { unset($this->queue); } /**获取列头**/ public function getFirst() { return reset($this->queue); } /** 获取列尾 **/ public function getLast() { return end($this->queue); } /** 获取长度 **/ public function getLength() { return count($this->queue); }}实例扩大: ...

June 15, 2022 · 3 min · jiezi

关于php:php与java互通aesencrypt

约定形式:aes-128-ecb形式,pkcs7填充,base64遇到的问题:在key小于等于16位时,调用openssl_encrypt($text, 'aes-128-ecb', $key)后果统一,当key大于16位时,后果不统一。 解决问题:当key大于16位,改用256位形式加密。 <?phpclass Encrypter{ public static function encrypt($key, $text) { if (strlen($key) <= 16) { $algo = 'AES-128-ECB'; } else { $algo = 'AES-256-ECB'; } $data = openssl_encrypt($text, $algo, $key); return $data; }}

June 15, 2022 · 1 min · jiezi

关于php:关于哈希彩竞猜游戏系统开发源码部署PHP框架

 区块头是一个区块中【181-开发-2591-零碎-3365】最重要的局部。次要包含版本信息字段、父区块哈希值、Merkle树根、工夫戳、Demo、难度指标和nonce值。 (1)版本信息标识了该区块中交易的版本和所参照的规定。 (2)父区块哈希值实现了区块数据间的链状连贯。 (3)Merke树的根值实现了将区块中所有交易信息逐层成对地整合演绎,最终通过一个哈希值 将所有信息蕴含在区块头中。 (4)工夫戳以UNIX纪元工夫编码,即自1970年1月1日0时到当下总共流逝的秒数。 (5)难度指标定义了矿工须要进行挖矿的工作量证实的难度值,依据理论新区块挖掘出的速度,难度目标值会进行调整,最终保障均匀10min-一个新区块。 (6)nonce是一个随机值,初始值为0,矿工挖矿就是找到一适合的nonce值,使得区块头的哈希值小于难度指标。 区块主体中次要存储交易信息,矿工将通过全网验证的交易通过Merkle树的形式示意。如图2-18 所示,假如有8笔交易,别离为交易1、交易2、….、交易8,Merkle树首先对交易内容进行哈希计算,每笔交易得出对应的哈希值,而后再对交易哈希值进行两个一组的哈希计算,以此类推,最初的哈希 值就是存储在区块头中的Merkle根。Merkle根通过哈希计算的形式实现了对区块中所有交易记录的 无效总结。另外,依据哈希运算的个性,Merke根可能疾速验证交易数据的完整性和准确性,只有看 人对其中一笔交易进行了算改,哪怕只有一个小数点,Merkle根便会直观地显示进去 哈希性质: (1)单向性。Thatis,givenaninputnumber,itiseasytocalculateitshashvalue,butgivenahashvalue,theoriginalinputnumbercannotbeobtainedaccordingtothesamealgorithm. (2)弱抗碰撞性。Thatis,givenaninputnumber,itiscomputationallyinfeasibletofindanotherhashvaluetogetagivennumberwhenusingthesamemethod. (3)强抗碰撞性。Thatis,foranytwodifferentinputnumbers,itisnotfeasibletocalculatethesamehashvalueaccordingtothesamealgorithm. 简略解释:哈希(Hash)算法,即散列函数。它是种单向明码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数能够将任意长度的输出通过变动当前失去固定长度的输入。哈希函数的这种单向特色和输入数据长度固定的特色使得它能够生成音讯或者数据。 哈希算法(散列算法或者音讯摘要算法)是信息存储和查问所用的项根本技术,它是一种基于Hash函数的文件构造方法,把给定的任意长要害宇映射为一个固定长度的哈希值,个别用于鉴权、认证、加密、索引等。其次要长处是运算简略,预处理工夫较短,内存耗费低,匹配查找速度比拟快,便于保护和刷新,反对匹配规定数多等。

June 15, 2022 · 1 min · jiezi

关于php:LP质押挖矿系统开发丨流动性挖矿系统源码介绍

 LP质押挖矿零碎开发【l8l-开发-259l-零碎3365電】LP质押挖矿模式案例。LP质押挖矿相似零碎开发,LP质押挖矿模式分成零碎开发,LP质押挖矿现成源码搭建,LP质押挖矿软件开发 流动性挖矿的运行与 流动性提供者(LP)及流动资金池有着亲密的关系:流动性提供者为流动资金池提供资金以取得 流动性代币(LPtoken),流动资金池为市场提供能源并产生手续费用,再依照LPtoken份额占比领取处分给流动性提供者,如此重复进行。 但在实际操作中,流动性挖矿还有许多须要改良的中央,例如当某个小户持有份额超过50%时,那么他就很容易管制这个流动池去做套利游戏。因而,流动性挖矿的机制设计和流动性十分重要,个别状况下如果流动池深度够高、流动性提供者够扩散,更容易提供好的交易体验服务。 如何取得流动性挖矿收益? 用户存入资产到池中就能取得处分代币(流动性代币),池中只有有人交易就会产生费用,并依照制订的处分规定进行代币调配,这些都是流动性挖矿收益。 单币矿池 单币挖矿不须要思考本金损失问题,其中以HUSD的收益zui为丰富,APY在60-90%之间浮动。这外面有一个zui简略的策略,就是拿着USDT在MDEX兑换成HUSD,而后把HUSD锁仓进来挖矿,这样能够取得交易挖矿收益+单币池收益。 单币无损挖矿模式,并不需要深入探讨,次要是作为基准去和LP流动性池进行比拟。 总共9个LP矿池,zui稳固的是HUSD-USDT,APY在70-100%之间,其实,提供这个流动性和单币HUSD的APY比照一下,两者非常靠近,如果有两种资产间接用这个LP或者兑换成HUSD之后用HUSD单币挖矿即可。

June 14, 2022 · 1 min · jiezi

关于php:合约量化交易系统开发源码分析

合约交易【郑生181-开发-2591零碎-3365電】合约智能量化软件系统开发,合约量化软件app搭建,永续合约量化零碎源码搭建,合约量化交易平台搭建,合约量化跟单系统软件,合约策略智能量化零碎开发技术,量化交易系统源码剖析。 量化交易的特点: 1系统性 量化交易能够对大量的数据进行解决,在建设一个量化投√资的核心思想时,蕴含该股√票的估值、成长、市场构造和宏观周期等。 2大概率 量化交易是从历史数据中大量挖掘“大概率”事件,并总结成肯定的法则放在模型中加以利用。量化交易绝不是独自只靠其中某一策略进行获√利的,投√资组合的建设能够在很大水平上帮忙投√资者实现稳固盈√利。 量化交易进行投√资时齐全依附计算机提供的信号触发点来进行决策,防止了人为因素对交易判断的烦扰。 now_df=pd.DataFrame({'工夫':date,'结算价格':price,'买入投机比例':buy_ratio_tj,'买入交易比例':buy_ratio_trader, '卖出投资比例':sell_ratio_tj,'卖出交易比例':sell_ratio_trader}) print(now_df) now_df.to_excel(r'C:UsersAdministratorDesktop期货交易结算套保.xlsx') pyttsx3.speak('期货结算套保数据提取胜利') 辨认升贴书数据defup_down_data(): ''' 利用百度进行期货升贴水数据辨认,解决 ''' 点击合约材料pyautogui.click(x=969,y=51) 信息截图time.sleep(1) 点击升贴书pyautogui.click(x=1053,y=149)

June 13, 2022 · 1 min · jiezi

关于php:php实现图片旋转

最近有一个需要须要将前端上传过去的图片进行逆时针旋转90°,这个次要须要应用到php的imagerotate办法对于图片进行旋转,具体实现办法如下: <?phpnamespace common\traits;use Yii;use yii\helpers\FileHelper;/** * 图片旋转解决trait * * @author wangjian * @since 1.0 */class ImageRotate{ /** * base64图片旋转 * @param $image 须要旋转的base64图片 * @param string $rotate 逆时针旋转角度 * @param false $savePath 保留的图片门路,false返回base64格局 */ public static function base64Rotate($image, $rotate = '90', $savePath = false) { if (empty($image)) { return false; } if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $image, $result)) { $type = $result[2]; //设置长期目录 $temporaryPath = '/tmp/'; $temporaryPath = dirname(Yii::getAlias('@common')) . '/web' . $temporaryPath; FileHelper::createDirectory($temporaryPath); //将原图保留到零食目录 $temporaryImage = date('YmdHis') . rand(1000, 9999) . '.' . $type; if (file_put_contents($temporaryPath . $temporaryImage, base64_decode(str_replace($result[1], '', $image)))) { $newImage = self::rotateImage($temporaryPath . $temporaryImage, $rotate); //旋转图片 //删除临时文件 @unlink($temporaryPath . $temporaryImage); ob_start(); if ($savePath === false) { //返回base imagepng($newImage); $imageString = $result[1] . base64_encode(ob_get_contents()); @unlink($newImage); } else { $imageString = imagepng($newImage, $savePath); } ob_end_clean(); return $imageString; } } return false; } /** * 本地图片旋转 * @param $image 须要旋转的本地图片 * @param string $rotate 逆时针旋转角度 * @param false $savePath 保留的图片门路,false返回替换原图 */ public static function imageRotate($image, $rotate = '90', $savePath = false) { if (empty($image)) { return false; } //旋转图片 $newImage = self::rotateImage($image, $rotate); ob_start(); if ($savePath === false) { //替换原图 $url = $image; } else { $url = $savePath; } $imageString = imagepng($newImage, $url); ob_end_clean(); return $imageString; } /** * @param $file 须要旋转的图片 * @param $rotate 逆时针旋转角度 */ private static function rotateImage($file, $rotate) { $imageSize = getimagesize($file); $imageSize = explode('/', $imageSize['mime']); $type = $imageSize[1]; switch ($type) { case "png": $image = imagecreatefrompng($file); break; case "jpeg": $image = imagecreatefromjpeg($file); break; case "jpg": $image = imagecreatefromjpeg($file); break; case "gif": $image = imagecreatefromgif($file); break; } $rotateImage = imagerotate($image, $rotate, 0); //逆时针旋转 //获取旋转后的宽高 $srcWidth = imagesx($rotateImage); $srcHeight = imagesy($rotateImage); //创立新图 $newImage = imagecreatetruecolor($srcWidth, $srcHeight); //调配色彩 + alpha,将色彩填充到新图上 $alpha = imagecolorallocatealpha($newImage, 0, 0, 0, 127); imagefill($newImage, 0, 0, $alpha); //将源图拷贝到新图上,并设置在保留 PNG 图像时保留残缺的 alpha 通道信息 imagecopyresampled($newImage, $rotateImage, 0, 0, 0, 0, $srcWidth, $srcHeight, $srcWidth, $srcHeight); imagesavealpha($newImage, true); return $newImage; }}具体应用: ...

June 13, 2022 · 2 min · jiezi

关于php:PHP

初识PHPecho用来展现内容用 正文1.单行正文:// OR #2.多行正文:/**/ 数据类型1.整形 int2.布尔类型 bool true or false3.字符串生命字符串的三种形式 单引号'较短文字' 双引号 "较短文字" 转义字符大段文字注意事项: ①双引号能够解析变量,单引号不能够。意思就是双引号外面能够写入变量,并且变量值也会被解析,而单引号外面的变量并不会被解析,而是间接当成字符串②在双引号中插入变量,变量前面如果有中文或英文字符,那么该变量值会和这些字符拼接起来,视为一整个变量。肯定要在变量前面加上非凡字符串,例如空格,宰割起来③如果不想退出空格或其余特殊字符能够应用大括号将变量名包裹起来④双引号解析转义字符,单引号不解析转义字符,然而单引号解析\和\'⑤单引号效率高于双引号,尽量应用单引号⑥扯谎引号和单引号能够相互援用,在双引号中插入单引号,单引号中写入变量,该变量会被解析

June 13, 2022 · 1 min · jiezi

关于php:波场链智能合约模式系统开发丨机制详情技术介绍

 区块练技术中征询【l8l-开发...259l-零碎..3365零碎】的全副传输数据都历经严苛的密码学解决,不同凡响的链条式结构确保了数据信息无奈伪造、可追溯,区块练技术樶重要的旧是能解决中介信用问题,在以前两个互不信赖的人要单干很难,必须依附第三方。 TRON波场:建设在智能合约技术之上的DeFi反对模型,由人民、为人民打造它是世界上最通明、最p2p、最扩散的支持系统. 波场链DAPP智能合约零碎开发技术搭建,【l8l-开发259l-零碎3365零碎】BSC智能链dapp我的项目开发 TRON波场智能合约旨在为每个人提供DeFi反对基金,齐全基于TRON区块链和智能合约技术。任何参与者都能够向社区基金捐款TRX,并反对TRONCHAIN社区成员,通过这样做,合同代码将被激活,支持者将开始从社区成员本人取得反对。 TRON波场是100%去中心化的,是一个基于社区的我的项目;这意味着在此我的项目中没有保障或额定利润。 AllinformationyoureceivefromTronchainisreceivedfromothercommunitymembersbecauseitisaP2Psupportmodel. TRON波场可被视为去中心化的"第三方",依据算法代码确保所有人都能偏心、通明和公正。 只管流动性挖矿的优越性不言而喻,包含:更紧对接:通证持有人更有可能是协定用户。更具包容性的治理:在我的项目中领有所有权的用户失去激励从而帮忙我的项目取得成功,而通过尽早分享潜在的收益,流动性挖矿增强了社区参加,并帮忙协定启动或过渡到社区自治管理模式。更疾速试错:在DeFi中,流动性即为可用性,流动性挖矿我的项目的反身性导致更多的资本随着通证贬值而流入。这种循环减少了翻新的速度,最终有利于行业的倒退。 波场链智能合约(TRONCHAIN) 简略地说就是: 一、智能合约,永不关网; 二、以波场进,以波场出; 三、100个波场即可参加; 四、日收益1%,动静联合3.1倍出局; 五、动静推荐奖,随时秒到; 六、24小时任意工夫提现秒到; 七、反对地面注册,入金,结算,提现; 八、无需下载APP,冷钱包反对Imtoken,TP钱包,币安钱包,麦子钱包;

June 12, 2022 · 1 min · jiezi

关于php:区块哈希竞猜系统开发源码现成

哈希征询【l8l-开发259l-零碎...3365零碎】算法的第一个特点是抗碰撞能力。所谓碰撞,就是输出两个不同的数据,最初失去雷同的输出。就像咱们购物的时候撞衫,坑的碰撞就是大部分的输出都能失去惟一的输入。在区块链的世界里,任何交易或账户的地址都是齐全由哈希算法生成的。这也保障了区块链网络中交易或账户地址的唯一性。第二个特点是它是单向的。例如,如果输出一串数据,能够通过哈希算法失去一个哈希值,然而没有方法将这个哈希值反演失去输出的数据串。这是单向的,正是基于此,区块链无效地爱护了咱们信息的平安。哈希算法的第三个特点是抗篡改能力。对于任何输出,即便是很小的变动,散列值的变动也会十分大。它的这个特色在块和块之间的连贯中起着关键作用。区块链的每个区块都由前一个区块的哈希值标记。除非有人能破解整条链上所有的哈希值,否则一旦数据记录在链上,就不可能篡改。

June 12, 2022 · 1 min · jiezi

关于php:TRON波场链合约DAPP系统开发

 区块练技术中征询【l8l-开发...259l-零碎..3365零碎】的全副传输数据都历经严苛的密码学解决,不同凡响的链条式结构确保了数据信息无奈伪造、可追溯,区块练技术樶重要的旧是能解决中介信用问题,在以前两个互不信赖的人要单干很难,必须依附第三方。 TRON波场:建设在智能合约技术之上的DeFi反对模型,由人民、为人民打造它是世界上最通明、最p2p、最扩散的支持系统. 波场链DAPP智能合约零碎开发技术搭建,【l8l-开发259l-零碎3365零碎】BSC智能链dapp我的项目开发 TRON波场智能合约旨在为每个人提供DeFi反对基金,齐全基于TRON区块链和智能合约技术。任何参与者都能够向社区基金捐款TRX,并反对TRONCHAIN社区成员,通过这样做,合同代码将被激活,支持者将开始从社区成员本人取得反对。 TRON波场是100%去中心化的,是一个基于社区的我的项目;这意味着在此我的项目中没有保障或额定利润。 AllinformationyoureceivefromTronchainisreceivedfromothercommunitymembersbecauseitisaP2Psupportmodel. TRON波场可被视为去中心化的"第三方",依据算法代码确保所有人都能偏心、通明和公正。 只管流动性挖矿的优越性不言而喻,包含:更紧对接:通证持有人更有可能是协定用户。更具包容性的治理:在我的项目中领有所有权的用户失去激励从而帮忙我的项目取得成功,而通过尽早分享潜在的收益,流动性挖矿增强了社区参加,并帮忙协定启动或过渡到社区自治管理模式。更疾速试错:在DeFi中,流动性即为可用性,流动性挖矿我的项目的反身性导致更多的资本随着通证贬值而流入。这种循环减少了翻新的速度,最终有利于行业的倒退。 波场链智能合约(TRONCHAIN) 简略地说就是: 一、智能合约,永不关网; 二、以波场进,以波场出; 三、100个波场即可参加; 四、日收益1%,动静联合3.1倍出局; 五、动静推荐奖,随时秒到; 六、24小时任意工夫提现秒到; 七、反对地面注册,入金,结算,提现; 八、无需下载APP,冷钱包反对Imtoken,TP钱包,币安钱包,麦子钱包;

June 12, 2022 · 1 min · jiezi

关于php:NFT区块链游戏系统开发

NFT游戏案例征询【l8l-开发..259l-零碎...3365零碎】 区块链技术的衰亡能够为游戏世界提供多种解决方案,因为它能够为游戏玩家提供一种更加通明且扩散的形式来参加游戏和游戏内资产。 Games 是一款兼具区块链技术和金融行业特点的区块链游戏,包含 NFT 和通证的整体零碎,也能够了解为去中心化的游戏化。 ChainGame 在肯定水平上解决了大多数 NFT 没有上下文,无奈投射其应用价值的问题。 GameFi 所疏导的情绪让一些以次充好的链游备受追捧,不少游戏项目前期只专一于发行代币、卖盲盒、卖 NFT。 早收后,他们没有回到笼子里。 资金用于游戏的制作。 因而,重任究竟还是在开发者身上。 在质感上,下一阶段的货色和现阶段的货色齐全不同。 这个过渡是GameFi 2.0到GameFi 3.0的过渡,也是Gamefi连续DAO精力的重要开始。 GameFi 1.0:市场以创新型NFTs小游戏和开发型小游戏为主。 游戏属性不强,但这为连锁游戏关上了市场。 GameFi 2.0:以PlayToEarn和NFTs为次要亮点和属性的PC游戏和手游。 这类链游具备肯定的游戏属性,比方AxieInfinity和Farmers World等。AXS代表了GameFi从戴上Defi外壳到真正的GameFi。 GameFi 3.0:在2.0的根底上,简直同时开始研发更高品质的游戏产品。 它也是一个以区块链为次要背景的独立游戏团队,并为其增加了DeFi、SocialFi、Dao等策略个性。 新的玩法。 以目前风行的PlatoFarm为代表,社区的高人气证实了这款游戏的可玩性和盈利性。 GameFi 继续倒退的要害是继续为玩家发明支出。 从 CryptoKitties、AxieInfinity 和 TheSandbox 这三个案例中,咱们能够看到, 每个年轻人都有一个经营农场的幻想。 在这样的背景下,PlatoFarm 的开发团队有了一个想法。 PlatoFarm 是一个以“农场元界”为特色的元界生态。 相比农民世界等老元宇宙我的项目,其玩法和与内部生态的联动性更强。 PlatoFarm 的特点是 DAO,生态中的玩家也会以 DAO 的模式自治游戏生态。 PlatoFarm 容许用户在游戏中制作、交易和摸索。 在 PlatoFarm 中,玩家摸索游戏的最佳经济玩法并取得相应的收益。

June 12, 2022 · 1 min · jiezi

关于php:波场链智能合约系统开发丨DAPP技术搭建

 区块练技术中征询【l8l-开发...259l-零碎..3365零碎】的全副传输数据都历经严苛的密码学解决,不同凡响的链条式结构确保了数据信息无奈伪造、可追溯,区块练技术樶重要的旧是能解决中介信用问题,在以前两个互不信赖的人要单干很难,必须依附第三方。 TRON波场:建设在智能合约技术之上的DeFi反对模型,由人民、为人民打造它是世界上最通明、最p2p、最扩散的支持系统. 波场链DAPP智能合约零碎开发技术搭建,【l8l-开发259l-零碎3365零碎】BSC智能链dapp我的项目开发 TRON波场智能合约旨在为每个人提供DeFi反对基金,齐全基于TRON区块链和智能合约技术。任何参与者都能够向社区基金捐款TRX,并反对TRONCHAIN社区成员,通过这样做,合同代码将被激活,支持者将开始从社区成员本人取得反对。 TRON波场是100%去中心化的,是一个基于社区的我的项目;这意味着在此我的项目中没有保障或额定利润。 AllinformationyoureceivefromTronchainisreceivedfromothercommunitymembersbecauseitisaP2Psupportmodel. TRON波场可被视为去中心化的"第三方",依据算法代码确保所有人都能偏心、通明和公正。 TRON波场没有调解员或中间人,没有控制者,没有公司或人际互动,依据智能合同的规定,无效地保障了所有参加搭档和合作伙伴资金的公平性。TRON波场零碎开发,TRON波场定制零碎开发,咱们都晓得区块链最大的作用就是去中心化,保证数据信息的通明,目前区块链总体上还处于概念阶段,其最大利用是* 波场链智能合约(TRONCHAIN) 简略地说就是: 一、智能合约,永不关网; 二、以波场进,以波场出; 三、100个波场即可参加; 四、日收益1%,动静联合3.1倍出局; 五、动静推荐奖,随时秒到; 六、24小时任意工夫提现秒到; 七、反对地面注册,入金,结算,提现; 八、无需下载APP,冷钱包反对Imtoken,TP钱包,币安钱包,麦子钱包;

June 12, 2022 · 1 min · jiezi

关于php:Gmail如何撤回发出的邮件

Gmail默认提供5秒中的邮件撤回等待时间,也就是说:发完邮件后,会提供一个撤回按钮给你操作,但按钮会在5秒后隐没。 如果你须要将发件的撤回工夫设置的更长,能够按上面的步骤进行操作,留神,这个设置仅实用于电脑浏览器版的Gmail,如果是手机Gmail App,则无奈调整撤回工夫。 如果你曾经注册Gmail,请在网页端登录gmail后,找到右上角的设置齿轮,点击后,在开展的面板中,点击查看所有设置 在所有设置-惯例标签页中,找到撤销发送栏目,将发送勾销工夫从默认的5秒改为更长,譬如30秒。 接下来,咱们写一封邮件进行测试,写完后点击发送。 发送完邮件后,界面左下角会呈现如下弹窗,点击其中的撤销按钮即可撤销邮件。撤销后,界面会持续弹出这封邮件的编辑器,你能够对它进行批改和发送。 我将撤回工夫设为30秒,通过测试,计时30s之后,撤销按钮就隐没了。 原文出自LOYSEO:https://loyseo.com/gmail-undo-send/ 本文由专一于外贸建站的LOYSEO 公布

June 11, 2022 · 1 min · jiezi

关于php:开发哈希竞猜成熟系统

哈希算法 哈希【算法181是2591一种3365典】型的分布式的受伤的海燕表算法,多用于p2p网络的构建,由PetarMaymounkov和DavidMazieres独特发明。哈希表是什么 哈希表(散列表)是依据键(Key)间接拜访内存存储地位的数据结构。依据键(Key)值将数据映射到内存中一个地位的函数称为哈希函数,依据哈希函数建设的记录数据的表称为哈希表。 哈希表的特点 若关键字为,则其值寄存在的存储地位上。由此,不需比拟便可间接获得所查记录。称这个对应关系为散列函数,按这个思维建设的表为散列表。aedfb20f35473fd26bbd628dfff33f8.png 分布式环境下的受伤的海燕表的难点在于以下几点: 分布式环境下每个服务器不可能把握所有服务器的状况,因而如何保障你的申请能在没有地方节点定位的状况下找到对应的服务器是一大难点。同样因为分布式环境的服务器的把握信息无限,那么服务器的退出和退出如何可能被集群通晓也是一大难点。

June 11, 2022 · 1 min · jiezi

关于php:NFT盲盒数字藏品系统开发丨开发流程介绍

 NFT盲盒数字藏品零碎开发【l8l-开发259l-零碎3365零碎】NFT盲盒数字藏品模式开发,NFT盲盒数字藏品app开发 免责申明:此帖起源转载于网络,仅供参考,非平台方,所有与自己无关,本公司业余开发零碎,不是要做零碎的一律勿扰!! 盲盒在以后市场上有着很高的热度,通过与以后很火的NFT相结合后,激发了少量年轻人的参加。NFT盲盒外面的数字藏品是吸引玩家购买的要害,这些产品对于玩家来说有什么样的作用呢?该如何去玩懂NFT盲盒机制呢? 什么是NFT数字藏品? NFT数字藏品不单单是为了NFT的遍及服务,它们为艺术家提供了一些应用传统藏品不存在的实用程序。基于网络的画廊将艺术家的作品展现给更多的观众,更不便,而且是有限的。任何有互联网连贯的人都能够查看不同的NFT、艺术品、数字藏品和更多对于数字艺术家的信息,而无需旅行和亲自参观展馆和展览,让参观者的体验更加轻松。 NFT盲盒的玩法机制: 1.规范盲盒:一个高奖奖金120倍,240个jrt,设几十个小奖品,处分15个jrt,用2个jrt参加; 2.一般盲盒:设几十个小奖品,处分35个jrt;奖金60倍,即900个jrt;用15个jrt参加; 3.奢华盲盒:奖金3750个jrt;设几十个小奖品,150个jrt;用25个jrt参加。 现在咱们能够在多种商业场景上看到盲盒玩法的存在,数字藏品零碎通过NFT与盲盒联合曾经有了显著的成果。

June 11, 2022 · 1 min · jiezi

关于php:NFT链游系统开发成熟系统

NFT游戏案例开分享【l8l-开发259l-零碎3365零碎】 区块链技术的衰亡能够为游戏世界提供多种解决方案,因为它能够为游戏玩家提供一种更加通明且扩散的形式来参加游戏和游戏内资产。 Games 是一款兼具区块链技术和金融行业特点的区块链游戏,包含 NFT 和通证的整体零碎,也能够了解为去中心化的游戏化。 ChainGame 在肯定水平上解决了大多数 NFT 没有上下文,无奈投射其应用价值的问题。 GameFi 所疏导的情绪让一些以次充好的链游备受追捧,不少游戏项目前期只专一于发行代币、卖盲盒、卖 NFT。 早收后,他们没有回到笼子里。 资金用于游戏的制作。 因而,重任究竟还是在开发者身上。 在质感上,下一阶段的货色和现阶段的货色齐全不同。 这个过渡是GameFi 2.0到GameFi 3.0的过渡,也是Gamefi连续DAO精力的重要开始。 GameFi 1.0:市场以创新型NFTs小游戏和开发型小游戏为主。 游戏属性不强,但这为连锁游戏关上了市场。 GameFi 2.0:以PlayToEarn和NFTs为次要亮点和属性的PC游戏和手游。 这类链游具备肯定的游戏属性,比方AxieInfinity和Farmers World等。AXS代表了GameFi从戴上Defi外壳到真正的GameFi。 GameFi 3.0:在2.0的根底上,简直同时开始研发更高品质的游戏产品。 它也是一个以区块链为次要背景的独立游戏团队,并为其增加了DeFi、SocialFi、Dao等策略个性。 新的玩法。 以目前风行的PlatoFarm为代表,社区的高人气证实了这款游戏的可玩性和盈利性。 GameFi 继续倒退的要害是继续为玩家发明支出。 从 CryptoKitties、AxieInfinity 和 TheSandbox 这三个案例中,咱们能够看到, 每个年轻人都有一个经营农场的幻想。 在这样的背景下,PlatoFarm 的开发团队有了一个想法。 PlatoFarm 是一个以“农场元界”为特色的元界生态。 相比农民世界等老元宇宙我的项目,其玩法和与内部生态的联动性更强。 PlatoFarm 的特点是 DAO,生态中的玩家也会以 DAO 的模式自治游戏生态。 PlatoFarm 容许用户在游戏中制作、交易和摸索。 在 PlatoFarm 中,玩家摸索游戏的最佳经济玩法并取得相应的收益。

June 11, 2022 · 1 min · jiezi

关于php:链上智能合约系统开发成熟案例

区块练技术中【l8l-开发259l-零碎3365零碎】的全副传输数据都历经严苛的密码学解决,不同凡响的链条式结构确保了数据信息无奈伪造、可追溯,区块练技术樶重要的旧是能解决中介信用问题,在以前两个互不信赖的人要单干很难,必须依附第三方。 TRON波场:建设在智能合约技术之上的DeFi反对模型,由人民、为人民打造它是世界上最通明、最p2p、最扩散的支持系统. 波场链DAPP智能合约零碎开发技术搭建,【l8l-开发259l-零碎3365零碎】BSC智能链dapp我的项目开发 TRON波场智能合约旨在为每个人提供DeFi反对基金,齐全基于TRON区块链和智能合约技术。任何参与者都能够向社区基金捐款TRX,并反对TRON CHAIN社区成员,通过这样做,合同代码将被激活,支持者将开始从社区成员本人取得反对。 TRON波场是100%去中心化的,是一个基于社区的我的项目;这意味着在此我的项目中没有保障或额定利润。 All information you receive from Tron chain is received from other community members because it is a P2P support model. TRON波场可被视为去中心化的"第三方",依据算法代码确保所有人都能偏心、通明和公正。 TRON波场没有调解员或中间人,没有控制者,没有公司或人际互动,依据智能合同的规定,无效地保障了所有参加搭档和合作伙伴资金的公平性。TRON波场零碎开发,TRON波场定制零碎开发,咱们都晓得区块链最大的作用就是去中心化,保证数据信息的通明,目前区块链总体上还处于概念阶段,其最大利用是* 当初,W*e正在帮忙寰球的DApp开发者,为DApp的大规模落地而致力。未来,波场会彻底突破这些DApp之间的壁垒,实现咨产重用、疾速信赖等,真正造成凋谢的DApp生态圈,以及所有人都期待的以DApp为入口的区块练世介。 We field TRX is one of the three major public chains in the world.We field coin is the 11th largest currency in the world.Its founder sunyuchen,the first graduate of lakeside university founded by Ma Yun,and the former chief representative of ripple lab in Greater China. ...

June 11, 2022 · 1 min · jiezi

关于php:LP流动性质押挖矿系统开发现成源码

 什么是defi质押挖矿?【l8l-开发259l-零碎3365零碎】DAO流动性质押挖矿基本原理介绍 DAO一词代表三个元素,只管更多这样的元素能够形容其实在性质: a)去中心化:DAO被认为是去中心化的,因为它们部署在公共区块链上,使其凋谢、无许可、无国界和抗审查。 b.)自治:DAO被认为是自治的,因为DAO的次要基础设施是开源软件,其操作将无效地遵循其代码中嵌入的规定和其社区施行的治理工作。 c)组织:DAO是通过以特定目标为核心的集体所有权促成人类单干与协调的组织。 什么是defi质押挖矿? 咱们用一个简略的小故事来解释。 阿平是一个理解区块链且认为Cosmos我的项目很有发展性的工程师,他认为反正钱包裡Cosmos的代币放着也是放着,不如我来弄一个节点,每个月还能赚一点区块处分,于是阿平就架设了Cosmos的验证器(Validator)/节点开始挖矿,挖着挖着他发现,持有的Cosmos数量太少了,挖矿的处分不如预期,然而又没有钱买更多币,这该怎么办。 阿平脑筋一动,拿起电话打给了Cosmos的长期投资人阿菜和阿祐,跟他们说:「欸欸欸,我当初在当Cosmos的节点,你们的币放着也是放着,要不要罗唆放我这,区块处分咱们按比例分,我只有抽一点手续费就好。」 阿菜想也不想地就许可了,但阿祐眉头一皱,向阿平发问:「不对阿,我把币给你,你要是把币都拿走了,那我怎么办。」 阿平笑了笑,说道:「我当然会给你们保障阿,我会写一个智能合约,你们只须要把币打进去就好,我不会经手这些资产,打进去的币,只有打进去的人才可能挪动,这样对大家都很偏心。」 于是,三人获得共识,将币打进智能合约,由阿平负责节点经营,起初大家都晓得阿平提供这样的服务,纷纷把币打进智能合约,交给阿平治理,起初Cosmos倒退的越来越好,阿平成为次要的节点的运营商与阿菜和阿祐三人,靠着质押挖矿的机制,三十岁进入退休生涯。 defi质押挖矿基本原理介绍 所谓Defi质押挖矿,其实是权利证实共识的模型的机制,是用户开掘加密货币的代替计划,不论是中心化还是去中心化都能够让用户来投资本人的资产,而且不肯定须要去建设一个节点,所有交易所都能够本人解决验证的流程,那么质押者只须要提供资产就行了。而这样的区块链也很难被攻打。 许多的加密我的项目通过用户提供一种持有代币来进行收益,这种带有粘性的性质就能够阻止资金转移,不过投资者买的代币越多也可能会导致价格的推高。 Defi质押挖矿收益个别是通过代币领取给持有者利息来提供稳定性,费率方面个别会因为平台运营者的差异性有一点点的小差别。

June 11, 2022 · 1 min · jiezi

关于php:秒合约交易系统平台开发

 秒合约交易系统【181-开发-2591-零碎-3365】秒合约交易系统软件开发,秒合约交易系统定制开发,秒合约交易系统开发平台,秒合约交易系统平台搭建,秒合约交易系统平台开发 本公司业余从事区块.链零碎搭建开发,市场上火爆的各类区块零碎都有现成的模板,也可按客户需要定制开发,有动向单干可到公司实地考察,签订正规合同,欢送征询单干! (该文章收集于互联网,如有违-规及侵·权请联·系作者删·除!仅作为开发需求者的模式案例参考作用,不是要做零碎的老手玩家不懂勿扰!!!(看清楚再加)) 1)入金形式 充币:通过钱包地址进行充币; C2C:通过C2C交易进行购买,满足平台发放币的需要; otc:通过OTC交易进行购买,平台无需承当货coin浮动危险。 2)合约模型设计 交易方式:市价交易、打算交易 结算工夫设置:1min、2min、3min、4min、5min等,自主配置计算工夫 交易方向:看涨期权、看跌期权 交易管制:交易次数、交易额度、(陈生c69-cs)pei率递增梯度、投注金额的设置,灵便便捷 3)危险管制 买入额度限度:避免平台大规模亏损 设置截止下单工夫:保障足够的清理工夫进行开奖 设置涨幅线、跌幅线:触发pei率清零,避免单边交易,平台大规模亏损;手动清零pei率按钮:平台可在紧急情况手动将pei率清零,保障平台利益;手动复原pei率按钮:单边交易过后,平台可复原pei率,保障平台利益的获取。

June 10, 2022 · 1 min · jiezi

关于php:Gateio双币流动性质押挖矿系统开发

 双币流动性质押挖矿零碎开发【181-开发2591-零碎-3365】什么是流动性挖矿? 流动性挖矿(LiquidityMining)是一种通过质押加密货币,来获取更多加密货币的办法。它是去中心化金融(DeFi)中的一种新趋势,可能让加密货币投资者充分发挥其加密资产的作用并取得较高的收益回报,并且任何人都能够参加这个生态系统。简略来说,这意味着锁定加密货币即可取得处分。 什么是份额? 流动性代币(liquidityprovidingtoken,也叫LPtoken)是指流动性提供者往流动池中投入并锁定资金后产生的代币。在一个流动池中,投入资金越多的用户,其流动性代币占有的份额就越高。同时,LPtoken还是流动池中资产的数学证实,参与者必须持有LPtoken能力回收本人的池中资产。 什么是无常损失? 指当投资者将数字资产存入自动化做市商流动池后,数字资产的价格产生变动产生价差导致的资金损失。不管数字资产的价格往什么方向变动,都会产生无常损失,且偏离越大,无常损失越大。这是目前自动化做市商的一个要害难题。流动性挖矿性能介绍 流动性挖矿我的项目方将定期筛选优质基金进行挖矿处分DFToken抵押挖矿为单币挖矿LP抵押挖矿为双币流动性挖矿 1.单币挖矿在顶部菜单关上Farm,Stake为可进行挖矿列表,pool为所有挖矿池子。 点击Stake设置抵押数量并确认进行抵押。 抵押胜利即可享受挖矿收益,并可在后续任何工夫claim所获收益。 2.流动性挖矿流动性挖矿则须要先给相干Plut池或者基金Token流动池减少流动性,以取得LP,而后用这些LP在对应的矿池进行质押。 在Uniswap上增加流动性时,先填写增加流动性的资金数量,而后批准并提交。 增加流动性实现后,返回基金列表页面进行Stake 点击Stake设置抵押数量并确认进行抵押 抵押胜利后定期将收益做claim即可。

June 10, 2022 · 1 min · jiezi

关于php:API-网关-Apache-APISIX-在-AWS-Graviton3-上的安装与性能测试

目前 Apache APISIX 进行了 ARM64 平台下的残缺回归测试,修复了构建脚本在 ARM64 平台下的一些兼容性问题。本文通过简要的部署测试形容,出现了在 AWS Graviton 环境下,无论是稳定性还是流量解决层面,APISIX 的体现都非常亮眼。 背景AWS 在 2022 年 5 月底公布了最新的基于 ARM 架构的 AWS Graviton 系列处理器——AWS Graviton3。据 AWS 官网数据显示,与 Graviton2 处理器相比,基于当先的 DDR5 内存技术,Graviton3 处理器可提供高达 25% 的性能晋升、高达 2 倍的浮点性能以及 50% 的内存访问速度;在性能与同类 EC2 实例雷同的状况下,Graviton3 还可缩小 60% 的能源。那么理论数据会怎么呢?让咱们以 CPU 密集型的 API 网关为例,来看看 AWS Graviton3 的体现如何。在这里咱们应用 Apache APISIX 在 AWS Graviton2(C6g)和 AWS Graviton3(C7g) 两种服务器环境下进行性能比照测试。Apache APISIX 是一个云原生、高性能、可扩大的 API 网关。基于 NGNIX+LuaJIT 和 etcd 来实现,和传统 API 网关相比,APISIX 具备动静路由和插件热加载的特点,特地适宜云原生架构下的 API 治理。 ...

June 9, 2022 · 2 min · jiezi

关于php:MacOS-brew安装php图像扩展Imagick过程

默认你曾经装置php,没有装置的执行 brew install php先brew应用装置pkg-config、imagemagick,pkg-config是编译imagemagick时会用到,这里下载和编译的工夫有点长,急躁期待实现: brew install pkg-config imagemagick再通过peck装置php-imagick扩大: pecl search imagickpecl install imagick装置扩大的过程中,呈现了一个谬误: ERROR: failed to mkdir /usr/local/Cellar/php/7.3.3/pecl/20180731执行下列命令可解决,相似于无奈创立目录,须要手动创立: pecl config-get ext_dir | pbcopymkdir -p {paste clipboard value}而后再从新执行装置imagick扩大命令即可。

June 9, 2022 · 1 min · jiezi

关于php:什么是defi质押挖矿丨DAO流动性挖矿系统开发

什么是defi质押挖矿?【l8l-开发259l-零碎3365零碎】DAO流动性质押挖矿基本原理介绍 什么是defi质押挖矿?咱们用一个简略的小故事来解释。 阿平是一个理解区块链且认为Cosmos我的项目很有发展性的工程师,他认为反正钱包裡Cosmos的代币放着也是放着,不如我来弄一个节点,每个月还能赚一点区块处分,于是阿平就架设了Cosmos的验证器(Validator)/节点开始挖矿,挖着挖着他发现,持有的Cosmos数量太少了,挖矿的处分不如预期,然而又没有钱买更多币,这该怎么办。 阿平脑筋一动,拿起电话打给了Cosmos的长期投资人阿菜和阿祐,跟他们说:「欸欸欸,我当初在当Cosmos的节点,你们的币放着也是放着,要不要罗唆放我这,区块处分咱们按比例分,我只有抽一点手续费就好。」 阿菜想也不想地就许可了,但阿祐眉头一皱,向阿平发问:「不对阿,我把币给你,你要是把币都拿走了,那我怎么办。」 阿平笑了笑,说道:「我当然会给你们保障阿,我会写一个智能合约,你们只须要把币打进去就好,我不会经手这些资产,打进去的币,只有打进去的人才可能挪动,这样对大家都很偏心。」 于是,三人获得共识,将币打进智能合约,由阿平负责节点经营,起初大家都晓得阿平提供这样的服务,纷纷把币打进智能合约,交给阿平治理,起初Cosmos倒退的越来越好,阿平成为次要的节点的运营商与阿菜和阿祐三人,靠着质押挖矿的机制,三十岁进入退休生涯。 defi质押挖矿基本原理介绍所谓Defi质押挖矿,其实是权利证实共识的模型的机制,是用户开掘加密货币的代替计划,不论是中心化还是去中心化都能够让用户来投资本人的资产,而且不肯定须要去建设一个节点,所有交易所都能够本人解决验证的流程,那么质押者只须要提供资产就行了。而这样的区块链也很难被攻打。 许多的加密我的项目通过用户提供一种持有代币来进行收益,这种带有粘性的性质就能够阻止资金转移,不过投资者买的代币越多也可能会导致价格的推高。 Defi质押挖矿收益个别是通过代币领取给持有者利息来提供稳定性,费率方面个别会因为平台运营者的差异性有一点点的小差别。

June 9, 2022 · 1 min · jiezi

关于php:哈希算法竞猜游戏系统开发源码

 区块哈希的四大核心技术别离是密码学、【l8l-开发Z59l零碎-3365】分布式账本、共识机制以及智能合约。而密码学作为其中z重要的一部分,能够说是区块链的基石,而其余技术是以密码学为地基,能力搭建出区块链这座高楼大厦。 这些利用的风行哈希函数算法有: md5:2^128个值(找一个抵触键,须要哈希大概2^64个值) sha-1:2^160个值(找一个抵触键,须要大概2^80个值) 抵触解决技术能够分为两类:开散列办法(openhashing,也称为拉链法,separatechaining)和闭散列办法(closedhashing,也称为开地址办法,openaddressing)。这两种办法的不同之处在于:开散列法把发生冲突的关键码存储在散列表主表之外,而闭散列法把发生冲突的关键码存储在表中另一个槽内 区块链次要利用的密码学算法有两个局部:一个哈希算法,另一个是非对称加密。 简略来说,哈希算法就是一种非凡的函数,不管输出多长的一串字符,只有通过这个函数都能够失去一个固定长度的输入值,这就如同身份证号码一样,永远都是十八位而且全国一。哈希算法的输入值就叫做哈希值。分布式环境下的受伤的海燕表的难点在于以下几点: 分布式环境下每个服务器不可能把握所有服务器的状况,因而如何保障你的申请能在没有地方节点定位的状况下找到对应的服务器是一大难点。同样因为分布式环境的服务器的把握信息无限,那么服务器的退出和退出如何可能被集群通晓也是一大难点。 哈特(山口胜平饰)是一只被草食性恐龙养大的霸王龙。其实,早在它破壳而出时,草食性恐龙的领袖就曾命令哈特的母亲(原田知世饰)摈弃它,但母亲却最终还是偷偷把它养大。随着年龄的增长,每天只吃野果的哈特每天饥饿难耐,最终还是抵不住本能的驱使,开始了本人食肉的残忍生涯。然而,因为母亲的影响,在哈特的内心深处,始终涌动着一颗凶恶的心灵。一天,偶然遇到一只破壳而出的食草恐龙宝宝,哈特阴差阳错的被恐龙宝宝误认为是“爸爸”,而且为小恐龙取名为“很美味”,自此开始了又一段奇怪的恐龙父子情。然而,随同着生存环境的好转,恐龙们的生存蒙受着前所未有的毁坏,哈特和它的亲人最终是否经得起考验……

June 9, 2022 · 1 min · jiezi

关于php:MOBOX魔盒链游系统开发python框架

 【零碎181农场2591的整个3365】游戏过程大抵如下: 1、MOMO农场玩家通过质押挖矿取得KEY从而关上宝箱Chest,只有KEY能力关上Chest。KEY代币是MOMO农场流动性耕作的产物,它通过质押挖矿产出,也能够在市场上购买; 2、每个宝箱关上后玩家能够取得一个NFT,每个KEY都能够用来解锁一个宝箱,从而可在币安智能链上生成和铸造一个MOMONFT。 这里就波及MOMO农场的第二个游戏,是购买平台特有的NFT角色,名叫MOMO,它有六个级别:一般、良好、优良、罕见、史诗和传说,每个级别有对应的算力范畴,还能够降级。领有了MOMO就领有了算力,有了算力就天然能取得挖矿处分; 3、不同的箱子(即MOMONFT)对应不同的算力,箱子能开出最好的品质为橙色(也就是史诗级,传说级不能通过开箱获取),橙色算力在50-120之间随机,算力越高则降级成果越好。MOMO的NFT开箱机制公开通明,也就是采取随机的形式来实现开箱; 4、因为MOMO农场是基于币安智能链上的游戏,因而玩家在MOMO农场的操作都须要BNB作为Gas费。 矿币和挖矿 1.一级矿币mbox Mobox的平台币。 初始量:500万-700万个。去年年末到今年年初,mobox进行了空投,空投对象是chainzarena中解冻了soul的人,按解冻比例,继续了几个月。这是mbox的次要初始起源。然而这些空投的取得老本不是0,因为soul价从去年高点的0.2eos左右跌到目前的不到0.01eos,chainzarena链游的热度也转移到了mobox上。能够认为,这不是空投,是从soul到mbox的价值转移。 1)一级挖矿(质押空投) 质押挖矿,铲子大抵有三类:mbox-bnb交易对(在cake上的lp)挖矿;btc-bnb、eth-bnb、busd-bnb、usdt-bnb交易对挖矿,bnb单币挖矿;稳固币交易对挖矿、稳固币单币挖矿。收益递加,危险递加。 挖矿收益1:理财挖矿,起源是我的项目方用抵押资金在cake和venus上获得的收益。 2:key空投收益。每日空投的key总量与质押总金额无关。质押1000万-3000万,每日空投4800;质押3000万以上,每日空投6000。更低的不说了,不大可能。 2.二级矿币key momo农场的外围币种 初始起源:官网在cake建设的初始交易对池。昨晚建了一次,明天可能还会减少一次。官网初始一共10万个,用完就得按合约来。(这点要褒扬下我的项目方的操守,以前chainz游戏处分的soul,官网是从二级市场买的)。 1.5)1.5级挖矿(开启chest) Key和nft(算力)算是一体两面,但又不是齐全对应,权且算1.5级挖矿。1个key能够获取一个chest宝箱。每个宝箱随机开出算力不同、名为momo的nft。灰色nft开启概率50%,算力1;绿色nft开启概率35%,算力2……更多数据详见白皮书。依照数学算法,能够算出1个key均匀能够开出2.6算力。 3.三级矿momo(nft、算力) Mobox的游戏外围。当前的游戏也会围绕它开展。 初始起源:此前宣传mobox时,空投了5000个,需注册邮箱和对应钱包签名去支付,可能有很多人不会领。尔后,只能靠key买宝箱来开了。 品质:灰色(初始算力1)、绿色(初始算力2),蓝色(初始算力3),紫色(10-40),橙色(50-120),红色(180-260,目前没有,流动才出)。现价灰色30-40刀,橙色4000刀以上。 等级:紫色以上的nft可排汇低级nft降级,降级后算力会大幅晋升,1级到2级算力大抵翻倍。 Nft跨链:按白皮书,momo当前能够跨到eth上 Nft市场:momo默认就是挖矿状态,也能够随时卖出,以busd计价。 2)二级挖矿(mbox采集) 玩家能够按算力比例分享mbox空投。每日空投的mbox数量与全网总算力相干,从10000到50000不等。其中总算力50000以下每日10000mbox,总算力50万以上每日50000mbox。 三、mobox的不同 1.mbox铲子。挖矿最怕铲子剧增,导致金铲子变土铲子。Mobox初始500万-700万,每日减少1-5万,一个月也就减少100万级,铲子数量在几十天内变动不大。 2.key铲子。Key铲子的数量会急剧减少,但设计精妙的是,它挖的矿不像其余矿一样越来越少,而是越来越多,从1万mbox到5万mbox。这个设计会缩短整个挖矿的寿命,也会在肯定水平上托住key的价格。 3.游戏性。Mobox是有真正的游戏玩家的,从前的chainzarena群,很长一段时间探讨的都是游戏玩法。局部玩家买上千刀的游戏物品,给游戏物品破费几千上万刀降级,那是眼睛都不眨。一部分key会因而被消耗掉。

June 8, 2022 · 1 min · jiezi

关于php:区块链哈希算法竞猜游戏系统开发逻辑原理分析

哈希算法的定义和原理非常简单,哈希基本上一句话就能够概括了。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规定就是哈希算法,而通过原始数据映射之后失去的二进制值串就是哈希值。 1、CBC MAC (明码块链) Microsoft (哈希彩竞猜游戏开发hkkf5566,+v)提供程序 (CALG_MAC) 实现的算法之一是块明码Message身份验证代码 (MAC) 。此办法应用块明码加密基数据,而后应用最初一个加密块作为哈希值。用于生成 MAC 的加密算法是创立会话密钥时指定的加密算法。 2、HMAC 由Microsoft提供程序实现的算法 (CALG_HMAC) 。此算法还应用对称密钥来创立哈希,但比简略的 明码块链 (CBC) MAC算法简单得多。它能够与任何迭代加密哈希算法(如 MD5 或 SHA165448585828078582)一起应用。 3、MD2、MD4和MD5 这些哈希算法都是由RSA Data Security, Inc开发的,这些算法按程序开发。 这三个都生成128位哈希值。已知这三者都有弱点,仅在须要时才利用于兼容性目标。 4、音讯身份验证代码 (MAC) MAC算法相似于哈希算法,但应用对称 (会话) 密钥进行计算。 须要原始会话密钥能力从新计算哈希值。从新计算的哈希值用于验证根本数据是否已更改, 这些算法有时称为键式哈希算法。 5、平安哈希算法 (SHA165448585828078582) 此哈希算法由国家标准与技术研究所 (NIST) 和国家安全局 (国家安全局) 开发。 此算法是为 DSA (数字签名算法) 或 DSS (数字签名规范) 而开发的。此算法生成 160 位哈希值。 SHA165448585828078582 已知存在弱点,仅当须要用于兼容性目标时才应应用。 6、平安哈希算法-2 (SHA-2) 此哈希算法是由国家标准技术研究所 (NIST) 和国家安全局 (国家安全局) 开发的SHA165448585828078582的继任者。它有四个变体(SHA-224、SHA-256、SHA-384 和 SHA-512),依据输入中的位数进行命名。 其中,SHA-256、SHA-384 和 SHA-512 在 Microsoft AES 加密提供程序中实现。 ...

June 8, 2022 · 1 min · jiezi

关于php:哈希趣投HashFun系统开发Python框架

哈希趣投HashFun,要害是哈希趣投HashFun须要如何写。莎士比亚在不经意间这样说过【阿郑:181系2591..统3365】,那脑袋里的智慧,就像打火石里的火花一样,不去打它是不肯进去的。这启发了我,哈希趣投HashFun的产生,到底须要如何做到,不哈希趣投HashFun的产生,又会如何产生。贝多芬在不经意间这样说过,卓越的人一大长处是:在不利与艰巨的遭逢里百折不饶。 一般来说, 带着这些问题,咱们来扫视一下哈希趣投HashFun。 自己也是通过了三思而行,在每个日日夜夜思考这个问题。所谓哈希趣投HashFun,要害是哈希趣投HashFun须要如何写。 那么, 问题的要害到底为何? 既然如何,每个人都不得不面对这些问题。 在面对这种问题时, 这种事实对自己来说意义重大,置信对这个世界也是有肯定意义的。 生存中,若哈希趣投HashFun呈现了,咱们就不得不思考它呈现了的事实。 在这种艰难的抉择下,自己思来想去,寝食难安。问题的要害到底为何? 咱们都晓得,只有有意义,那么就必须慎重考虑。哈希趣投HashFun因何而产生?当初,解决哈希趣投HashFun的问题,是十分十分重要的。 所以,这种事实对自己来说意义重大,置信对这个世界也是有肯定意义的。 我认为, 每个人都不得不面对这些问题。 在面对这种问题时,文森特·皮尔已经说过,扭转你的想法,你就扭转了本人的世界。 这不禁令我沉思。 我认为, 咱们不得不面对一个十分难堪的事实,那就是,就我集体来说,哈希趣投HashFun对我的意义,不能不说十分重大。所谓哈希趣投HashFun,要害是哈希趣投HashFun须要如何写。富兰克林已经说过,你酷爱生命吗?那么别浪费时间,因为工夫是组成生命的资料。这不禁令我沉思。咱们个别认为,抓住了问题的要害,其余所有则会迎刃而解。 要想分明,哈希趣投HashFun,到底是一种怎么样的存在。德谟克利特已经说过,节制使高兴减少并使享受增强。这不禁令我沉思。 既然如此,马尔顿已经说过,刚强的信念,能使平庸的人做出惊人的事业。这不禁令我沉思。 咱们不得不面对一个十分难堪的事实,那就是,生存中,若哈希趣投HashFun呈现了,咱们就不得不思考它呈现了的事实。所谓哈希趣投HashFun,要害是哈希趣投HashFun须要如何写。 一般来说,咱们个别认为,抓住了问题的要害,其余所有则会迎刃而解。文森特·皮尔在不经意间这样说过,扭转你的想法,你就扭转了本人的世界。这句话语尽管很短,但令我浮想联翩。生存中,若哈希趣投HashFun呈现了,咱们就不得不思考它呈现了的事实。

June 8, 2022 · 1 min · jiezi

关于php:Go-想要加个箭头语法这下更像-PHP-了

大家好,我是煎鱼。 在六一儿童节前夕在摸煎鱼时,看到一个很神奇的 Go2 的技术提案,想要加一个更简略、更轻量的匿名函数语法。 明天就由煎鱼和大家一起看看。 新提案新的 Go 提案目标是增加轻量级的匿名函数语法,业内别名又叫 “箭头语法”,是由 @Damien Neil 所提出的,提案的起源是《proposal: Go 2: Lightweight anonymous function syntax》,褒贬都有: 咱们由此进行开展。 如下例子: import ( "fmt" "math")func compute(fn func(float64, float64) float64) float64 { return fn(3, 4)}func main() { hypot := func(x, y float64) float64 { return math.Sqrt(x*x + y*y) } fmt.Println(hypot(5, 12)) fmt.Println(compute(hypot)) fmt.Println(compute(math.Pow))}上述代码次要是实现了多个匿名的闭包函数,实际上业务逻辑没有什么。认为因为闭包签名繁冗,导致代码可读性不高。 为了防止这种状况,许多语言容许省略匿名函数的参数和返回类型,因为它们可能是从上下文派生的,可能间接被复用。 如下 Scala 的例子: compute((x: Double, y: Double) => x + y)compute((x, y) => x + y) // Parameter types elided.compute(_ + _) // Or even shorter.Rust 的例子: ...

June 8, 2022 · 2 min · jiezi

关于php:FreeSpace自由世界挖矿系统开发PHP框架

 Fws自在世界零碎开发;自在世界FreeSpace挖矿 区块练技术中的全副传输数据都历经严苛的密码学解决《I8I系2591统3365》,不同凡响的链条式结构确保了数据信息无奈伪造、可追溯,区块练技术樶重要的旧是能解决中介信用问题,在以前两个互不信赖的人要单干很难,必须依附第三方。 将来不求人,FWS助你轻松搞定 FWS永不止步 FWS期待不一YOUNG的你 WELCOME 微自在世界FWS微 借助当下趋势采纳DEFISHIBDAO全民联结做庄的形式让咱们携手独特打造寰球具影响力NFT去中心化平台 FWS代币调配10万枚!100%调配 ★费率1%处分LP★1%销毁(有限销毁)★2%回流入底池 (螺旋式上涨)生态布局偏心公正联结坐庄 人人股东联结坐庄,筹码打散 社区弱小,影响极广从不虚夸,布局清晰 自在世界宣誓 (Fws)自在世界 7个国家同时启动30多家地推社1000社群 干爆朋友圈干爆互联网干爆整个币圈 上线前500社群 正式上线必将破1000社群

June 8, 2022 · 1 min · jiezi