1.单元测试实践
2.新一代mount系统调用(1)——接口初探
3.想成为Java工程师有什么要求?
4.从零搭建测试公众号,网网站每天发送一句小情话(支持计算农历生日)
单元测试实践
非常有意思的站源一段话:
我们用得最多的基本单元测试框架是junit和testng,下面对这两个工具做个对比。源码
通过上面的下载对比可以看出,TestNG作为Java项目的网网站单元测试框架是更有优势的,TestNG在参数化测试、站源福利商城源码依赖测试、源码套件测试、下载分组测试、网网站并发测试等方面都比Junit4强,站源同时,源码TestNG涵盖了JUnit4的下载全部功能。
所以下面的网网站案例说明都是基于TestNG来写的。
为方便对后面内容的站源理解,先写一个单元测试:
这是源码一个验证rsa加解密功能的单元测试。
TestMain是抽象出来,用于启动spring容器以及支持testng用例自动注入bean,因为启动spring容器总是很耗时的,如果我们的测试用例用不到依赖的spring bean,最好不雅启动spring容器,TestMain源码:
这就是TestMain最好放在和工程Application类所在包相同路径下的原因,比如我的示例中TestMain和BoardServerApplication都在相同包路径下:com.allawn.athletic.board.server。
检查TestNG插件是否存在
插件搜索“Coverage”
在我们的pom文件下加如下plugin配置:
idea插件自带,带搜索插件“PIT mutation testing”,但不建议用,很难调通!
本地开发环境
IDE自动创建单元测试的方法(也可手动完成):
创建后的单元测试在Maven工程的test目录下生成测试类:
注意:如果之前没有test目录,则需要手动创建一下:
然后再把目录设置为test目录。设置方法:file -> Project Structure -> Modules
运行单元测试
创建单元测试
Maven执行的相关命令:
如果单元测试不通过,出现如下:
两种方式皆可运行。
运行不通过则则会有提示
要通过maven运行单元测试,要保证pom配置没有跳过单元测试,检查设置如下:
IDEA可以直接生成覆盖率报告,导出来的覆盖率报告长这样:
点击index.html即可看报告内容:
变异测试,英文Mutation Testing,是使用变异器 (切换数学运算符,更改返回类型,删除调用等)将代码修改为不同的变异(基于变异器创建新代码),并检查单元测试是否失败。好的单元测试应该使所有突变都失败(杀死)。
主要列出testng的测试方法,junit的测试方法请另行百度。
异常测试是指在单元测试中应该要抛出什么异常是合理的,可以检测我们方法中指定跑出的异常,类似这种:
如果我们有时候不想测试某些方法的单元测试,那么我们可以指定这些具体的单元测试跳过不执行,testng和junit4都支持忽略测试,testng通过@Test(enabled=false)跳过。
指定某个单元测试方法最长执行时间,如果超时了就算失败,testng中的timeout单位是毫秒。
套件测试是指把多个单元测试组合成一个模块,然后一起运行,avi驱动源码在套件定义中还可以通过定义组,针对相同组名的单元测试统一运行。
为方便我们模拟单元测试的传参,testng提供了@DataProvider注解,我们可以在单元测试内设置多种参数值,单元测试会依次把入参都跑一遍。被@DataProvider修饰的方法,返回值是数组形式。
依赖测试是指测试的方法是有依赖的,在执行的测试之前需要执行的另一测试。如果依赖的测试出现错误,所有的子测试都被忽略,且不会被标记为失败。
TestNG支持通过多个线程并发调用一个测试接口来实现性能测试,invocationCount表示方法调用的次数,threadPoolSize表示并发线程数量,timeOut即是每次调用最大耗时时间。
通过多线程并行调用多个测试方法,在我们套件/组测试的时候,如果使用并行测试,可以大大减少测试运行时间。
Mock的使用场景:
Mockito有比较简洁的API,简单易学,可读性强。从Mockito2开始,Mockito支持了很多新特性以及新注解(所以依赖mockito2.x以上版本的需要java8及以上jdk方可),使用很便捷,spring-boot-starter-test包默认内置mockito,鉴于维护性和语言新特性的支持,个人建议使用Mockito作为单元测试的mock工具。
在有需要的地方进行mock,否则走真实方法调用。
除了采用静态方法spy以外,还可以通过采用注解的方式:
结果示例:
除了@Spy注解需要如此设置,@Mock、@Captor、@InjectMocks等注解也需要。
对整个class进行mock
结果:
Junit5使用手册: junit.org/junit5/docs/c...
在Junit5中要使用Mockito,需要单独引入mockito-junit-jupiter依赖包,通过在单元测试类上加
@ExtendWith(MockitoExtension.class)
实现构建一个mock运行容器。
在有需要的地方进行mock,否则走真实方法调用。
除了采用静态方法spy以外,还可以通过采用注解的方式:
结果示例:
结果:
新一代mount系统调用(1)——接口初探
本文旨在介绍新一代的mount系统调用接口的初探,具体聚焦于如何利用新的mount API挂载一个文件系统。以往的mount系统调用自Linux系统诞生以来就一直沿用,尽管内部经历了多次更新,接口保持不变。然而,以AL Viro为首的VFS团队对当前的mount系统调用存在诸多不满,决定重新设计和编写一套新的mount API,这一工作由David Howells等人主导,netty 启动源码AL Viro作为主要领导者。直到Linux版本更新到5.2后,新mount API的主要代码已被合并至主线Linux。
新mount API的实现经历了多次迭代和修改,最终形成了一套相对稳定的设计。尽管新API的设计仍在不断完善中,但其基本框架已经较为成熟。考虑到设计持续变动的问题,作者在撰写介绍新mount API的文章时,选择了等待设计基本稳定,API被合并至Linux内核,并且不会有大的改动的时机。这样可以确保内容的准确性。
值得注意的是,虽然新mount API的内核部分代码可以基本使用,但还有很多工作需要完成。应用层的标准库、文档以及基于新API的mount工具链尚未开发,许多文件系统也需要对自身进行相应的修改以适应新接口。此外,新mount API的卸载文件系统的API设计也有待进一步考虑。
本系列文章的第一篇将详细讲解如何利用新mount API(fsopen、fsconfig、fsmount、move_mount)挂载XFS文件系统。以XFS为例,我们首先使用fsopen打开一个文件系统类型,然后使用fsconfig进行配置,包括挂载源和选项等。之后通过fsmount创建一个挂载实例,并使用move_mount将此实例附加到挂载点上。
在后续的文章中,将逐步展开对新mount API的深入探讨。由于新API仍处于开发阶段,官方文档尚未完全形成,本文的解释将基于作者的理解。一切解释权以最新的上游源代码为准。
想成为Java工程师有什么要求?
首先,你学得知识不一定就是你用的全部知识,我们除了要学习基本的知识之外,也需要去了解一下其他的知识,而这些知识就是从你所做的每一个小项目来的,当你需要使用这个知识点的时候自然的就会去学习你不会的知识总之就是一句话,要想学好Java,你付出多少努力就能够得到多少回报
然后是你的一个学习问题,自己在做的时候做不出来,那就是一个问题,在做题目的时候不去思考,自己的动手敲代码的时间也是非常的少
想要改变你的现状就得先解决这些困难,每天学习的%时间必须拿来敲代码,这样你才会拿到一个题目的时候有自己的思路,通过自己的fir函数源码思考然后把思路转为代码去实现,这才是学习Java的正确姿势
学习Java不要把自己的思维关在一个笼子里面,有时候多跟一起学习的人或者前辈多多交流,多去吸取他们学习的方法以及在处理错误的时候思维
在Java的学习过程中,出现异常和bug是难免的,这些虽然是你在学习道路上的绊脚石,但是这些绊脚石能够加快你的成长,让你的经验暴增
阶段1 java语言基础
1-1-Java基础语法
1、第1节 java运行环境 提取码:8ax6
2、第2节 HelloWorld案例 提取码:us3j
3、第3节 关键字&标识符 提取码:dl
4、第4节 常量&变量 提取码:
5、第5节 数据类型转换 提取码:9glo
6、第6节 运算符 提取码:ys2n
7、第7节 方法入门 提取码:b1ib
8、第8节 JDK9新特性-Jshell 提取码:ounw
9、第9节 选择结构-if语句-switch语句 提取码:0d
、第节 循环结构-for-while-do..while 提取码:k2ig
、第节 开发工具-IDEA 提取码:i
、第节 方法复习 提取码:ulku
、第节 方法重载 提取码:wfkr
、第节 数组 提取码:p8ml
小总结:
这个阶段我花了半个月的时间去学习,也就是个小时的时间,其中有个小时是我用来看理论的知识,另外的个小时是我用来给自己练手的,每一个知识点我都要做很多的题目,直到自己拿到题目的时候,能够把自己的思路转为代码实现
毫无疑问,这个阶段最耗时的自然是循环结构、选择结构,因为这两个知识点对于一个初学者来说很不友好,不仅代码量增加了,逻辑思维也是很绕的,如果不保持自己的思路清晰,你就理解不了他每一步的结果
然后就是数组,这一个阶段可以说是全新的阶段,我们可以把我们需要的数据都保存在数组里面,在这个知识点结束之后我还做了一个数组版的学生管理系统
1-2 -面向对象和封装
1、1_2_1__面向对象思想的概述 提取码:q
2、1_2_1__面向对象思想的举例 提取码:lv2s
3、1_2_1__类和对象的关系 提取码:7rs3
4、1_2_1__类的定义 提取码:xvhx
5、1_2_1__对象的创建及其使用 提取码:xsal
6、1_2_1__手机类练习 提取码:lnho
7、1_2_1__一个对象的内存图 提取码:wnaz
8、1_2_1__两个对象使用同一个方法的内存 提取码:thet
9、1_2_1__两个引用指向同一个对象的 提取码:3he6
、1_2_1__使用对象类型作为方法的参 提取码:w4
、1_2_1__使用对象类型作为方法的返 提取码:gjmn
、1_2_1__成员变量和局部变量的区别 提取码:eqep
、1_2_1__面向对象三大特征之封装性 提取码:zlcz
、1_2_1__private关键字的作用及使用 提取码:4i
、1_2_1__练习使用private关键字定义 提取码:dctu
、kafka 源码设计1_2_1__this关键字的作用 提取码:xz
、1_2_1__构造方法 提取码:8xkz
、1_2_1__定义一个标准的类 提取码:opmf
小总结:
这一个阶段花的时间足足有一个月,时间的分配也是按照%的时间去看理论,%的时间去动手敲代码
我觉得这个阶段每一个知识点都是特别的重要,在这个阶段我学会了什么是对象,学会了如何面向对象编程,也学会了如何使用对象编程去偷懒,把重复的事情都封装成了一个对象,交给这个对象去帮我做
1-3-Java语言高级
1、-常用API_1 提取码:alfe
2、-继承与多态 提取码:h5o7
3、-常用API第二部分 提取码:olnf
4、-集合 提取码:ca
5、-异常与多线程 提取码:mu
6、-File类与IO流 提取码:4bpt
7、-网络编程 提取码:s5ks
8、-JDK8新特性 提取码:jnbj
9、-基础加强 提取码:1ngz
、-MySQL 提取码:y4
、 -JDBC 提取码:q7
小总结:
是的,这个阶段我花了两个月,一个月学完JavaSE,然后一个月学完了MySQL跟JDBC,话说这个阶段是最难的,也是最重要的,这个阶段的东西你学不懂就代表你后面的知识都处于一个危机边缘
在这个阶段我做了四个小项目,和一些零零碎碎的练习题,代码加起来应该有三四万行了吧;其中有三个项目是学生管理系统,我从数组版把它改为了集合版,然后又改为了IO版,最后改为了MySQL版;然后还做了一个ATM小型的桌面程序
然后个人感觉我在这个阶段学得是比较扎实的,期间还去看了许多的集合的源码,虽然有的看不懂,但是对于我一个初学者来说已经很了不起了
阶段2 JavaWeb+旅游网
小总结:
这个阶段的知识非常多,我不仅学习了前端三剑客,还学了JavaWEB、JSP、JSTL、EL,然后为了做一个项目去练手,还学习了Redis和Maven
这个阶段我花了两个月的时间,包括跟着做好这个项目,因为我前面的基础部分学得比较扎实吧,所以感觉这部分比较简单,难点就是JavaWEB的过滤器,这个知识点我花的时间比较多
然后就是大概的从面向对象编程转为了面向接口编程了
HTML和CSS
1、第1节 概念介绍 提取码:dal6
2、第2节 基本标签 提取码:4uyq
3、第3节 表单标签 提取码:h1ok
4、第4节 CSS概述 提取码:ubyx
5、第5节 CSS_选择器 提取码:zep7
6、第6节 CSS属性 提取码:9l4h
7、第7节 CSS_案例-注册页面 提取码:onc6
JavaScript
1、 JavaScript_简介 提取码:2efk
2、 JavaScript基础语法 提取码:bl
3、 JavaScript运算符 提取码:v9sh
4、 JavaScript特殊语法 提取码:yj6p
5、 JavaScript_语法_流程控制语 提取码:tx9j
6、 JavaScript_对象 提取码:df4q
7、 DOM和事件的简单学习 提取码:ljt5
8、 BOM对象 提取码:jwwy
9、 DOM对象 提取码:ukah
、JavaScirpt中的事件 提取码:ab1w
BootStrap
1、 快速入门 提取码:5jhm
2、Bootstrap_栅格系统 提取码:1xuu
3、Bootstrap_全局CSS样式 提取码:fjka
4、Bootstrap_组件和插件 提取码:g5wp
5、案例_旅游网 提取码:jxy3
XML
1、 xml基础 提取码:jose
2、 xml_约束 提取码:q0xr
3、 xml_解析 提取码:bbsn
Tomcat
1、web相关概念 提取码:p2az
2、 tomcat基本操作 提取码:zqqx
3、 tomcat_部署项目 提取码:i4a2
-Servlet和HTTP请求协议
1、Servlet_快速入门 提取码:ah8k
2、Servlet_生命周期方法 提取码:w7t9
3、Servlet_3.0注解配置 提取码:d8zy
4、 IDEA与tomcat相关配置 提取码:5rvl
5、 Servlet_体系结构与urlpartten配置 提取码:qf3i
6、 HTTP请求协议 提取码:5f7v
-Request和Respons
1、 Request原理和继承体系 提取码:3hxr
2、 Request_获取请求数据 提取码:oxl7
3、 请求转发和request共享数据 提取码:9xbq
4、 Request_获取ServletContext 提取码:yfaz
5、 request登录案例 提取码:owgj
6、 HTTP响应协议 提取码:xs8k
7、 response之重定向 提取码:i8de
8、 response之相对路径和绝对路径 提取码:6p8q
9、 response之输出数据 提取码:fe
、 response之验证码 提取码:uy
、 ServletContext对象 提取码:yopc
、 文件下载 提取码:szv9
-Cookie和Session
1、第1节 Cookie快速入门 提取码:ncss
2、第2节 Cookie_细节 提取码:la7v
3、第3节 Cookie案例 提取码:mamn
4、第4节 JSP改造Cookie案例 提取码:fpkd
5、第5节 Session快速入门 提取码:0tyf
6、第6节 Session细节 提取码:obu1
7、第7节 Session之验证码案例 提取码:fxtt
-JSP,EL和JSTL
1、第1节 JSP基础语法 提取码:7rvw
2、第2节 MVC 提取码:ywmz
3、第3节 EL介绍和运算符 提取码:5gxf
4、第4节 EL获取域中存储的数据 提取码:yha0
5、第5节 JSTL常用标签 提取码:mr
-综合案例(用户信息)
1、第1节 登录功能 提取码:d7v4
2、第2节 添加删除修改功能 提取码:df
3、第3节 删除选中功能 提取码:jhlx
4、第4节 分页查询功能 提取码:8mxb
5、第5节 复杂条件查询功能 提取码:qj8m
-Filter和Listener
1、第1节 Filter快速入门 提取码:7qrm
2、第2节 Filter细节 提取码:s2w9
3、第3节 Filter案例 提取码:fs
4、第4节 监听器 提取码:kjwy
-Jquery
1、第1节 JQuery基础 提取码:0uj1
2、第2节 JQuery选择器 提取码:ow
3、第3节 Jquery基础案例 提取码:5u3t
4、第4节 JQuery动画和遍历 提取码:ut
5、第5节 JQuery事件绑定和切换 提取码:e5sv
6、第6节 Jquery高级案例 提取码:ytj4
-Ajax和JSON
1、第1节 原生JS方式实现Ajax 提取码:xh
2、第2节 JQuery方式实现Ajax 提取码:woaa
3、第3节 JSON基础语法 提取码:pqhj
4、第4节 JSON_解析器 提取码:zbzx
-Redis
1、第1节 Redis环境搭建 提取码:poob
2、第2节 Redis命令操作 提取码:bq6d
3、第3节 Redis持久化 提取码:0x4x
4、第4节 Jedis代码操作 提取码:bon3
5、第5节 Jedis连接池 提取码:hu0n
6、第6节 redis案例 提取码:cosn
-Maven基础
1、第1节 基本概念 提取码:4fok
2、第2节 maven的安装和仓库种类 提取码:gw1r
3、第3节 maven标准目录结构和常用命令 提取码:3jn7
4、第4节 maven生命周期和概念模型图 提取码:oqrb
5、第5节 使用骨架创建maven的java工程 提取码:kp
6、第6节 maven工程servlet实例 提取码:xdmw
-旅游网
1、 准备工作 提取码:uprl
2、 注册功能 提取码:9pf5
3、 登陆和退出功能 提取码:0hkk
4、 BaseServlet抽取 提取码:qswt
5、 分类数据展示功能 提取码:n
6、 旅游线路分页展示分页展示 提取码:o6v6
7、 旅游线路查询 提取码:pzjb
8、 旅游线路详情 提取码:wtke
9、 旅游线路收藏 提取码:
阶段三:基本框架SSM
小总结:
这个阶段相对于JavaWEB来说还是比较简单的,少了很多的代码量,但是却多了很多的配置,稍微不注意就会把这些配置给搞错,期间出现了好几次注入bean失败的错误,这是我最不能够容忍的,同样的错误居然出现了好几次,而且都是没有给service加上@Service这个注解导致的;所以,在同一个地方跌倒多次是最不应该的,以后一定的加强注意了
在此期间,我还把JavaWEB做的那个项目改为了SSM版的,在改的过程中才体会到这些代码真的是很浪费,之前一个一个参数的接收,现在只需要一个对象就可以接收到了,而且更加的让我明白面向接口编程的含义了
阶段3 1.Mybatis
1、.Mybatis课程介绍及环境搭建 提取码:6zwc
2、.Mybatis入门案例 提取码:2aoi
3、.自定义Mybatis框架 提取码:r9wc
4、.自定义Mybatis框架基于注解开发 提取码:1jzg
5、.使用Mybatis完成CRUD 提取码:d4b7
6、.使用Mybatis完成DAO层的开发 提取码:dzvr
7、.Mybatis的连接池及事务 提取码:ij3e
8、.动态SQL 提取码:yiys
9、.Mybatis的多表操作 提取码:dt9w
、.JNDI扩展知识 提取码:u5fx
、.Mybatis的缓存 提取码:ng
、.Mybatis注解开发 提取码:yh6z
阶段3 2.Spring
1、.Spring框架简介 提取码:va1x
2、.程序间耦合 提取码:s8cg
3、.Spring的 IOC 和 DI 提取码:of
4、.Spring的常用注解 提取码:tfw5
5、.基于XML的IOC的案例1 提取码:1gf9
6、.Spring的新注解 提取码:pjzs
7、.银行转账案例 提取码:um2b
8、.面向切面编程 AOP 提取码:4tv2
9、.JdbcTemplate的基本使用 提取码:vjxx
、.Spring中事务控制 提取码:rx3v
阶段3 3.SpringMVC
1、.SpringMVC概述及入门案例 提取码:e2ty
2、.参数绑定及自定义类型转换 提取码:g
3、.SpringMVC常用注解 提取码:emrc
4、.SpringMVC返回值类型及响应数据类型 提取码:bd9t
5、.文件上传 提取码:pzy7
6、.异常处理及拦截器 提取码:7a2y
7、.SSM整合案例 提取码:lzzd
阶段四:高级框架
小总结:
这个阶段可不止Spring Boot,还有springcloud,springsecurity等等这些框架,就不一一列出来了,资料网上一大堆
学了Spring Boot之后你才会发现,SSM是多么的麻烦,Spring Boot为不仅为我们减少了代码量,还为我们减少了很多的配置,采用注解的方式
当然,这么智能的框架,我能不把做的项目改为Spring Boot版本吗?
阶段4 4.Spring Boot
1、.spring boot 介绍 提取码:fzi8
2、.spring boot 入门 提取码:bp
3、.spring boot 原理分析 提取码:8yer
4、.spring boot 配置文件 提取码:wvoc
5、.spring boot 集成 提取码:ywin
阶段4 5.Git
1、.Git简介及安装使用 提取码:a0kx
2、.连接远程仓库 提取码:kziq
3、.Git分支 提取码:5rm2
原文链接:网页链接
从零搭建测试公众号,每天发送一句小情话(支持计算农历生日)
已有开源源码: gitee.com/fushentong/sa...
支持事项:
通过微信公众号给指定对象(举例:你的男/女朋友)每天发送指定内容;
内容包含:
同时,支持字体颜色自定义;
暂时不一定支持事项:(不是不能做只是作者用不到,有需要的小伙伴可以评论区留言,需要的多则下一期完善,有好的解决思路的大佬也欢迎评论区留言) 农历的部分月份 和 阳历不在同一年, 农历部分情况下可能出现闰某月
一、整体框架
二、准备需要的东西(网上均有免费可用的体验版)
总览:
接下来带大家一步步研究怎么获取这些账号
第一步:公众号测试平台的注册并配置
从微信官方文档中,找到接口测试号,并申请
申请测试公众号后,可用获得独有的AppID 和 appsecret。
这两个值的作用就是为了在程序中向微信平台验证身份。
就像是 用户名和密码一样。
同时,用你自己的微信 和 你想要发送信息的对象的微信,扫描你的公众平台上的二维码。获得对应用户的微信号。
这个微信号,就像是我们的身份证号一样,是独一无号的。
有了微信号,你才能告诉微信平台,这条消息该发给谁。
同时设置消息模板,
最终发送给到 手机微信上的消息,也就是设置的这个格式的。
同时在程序里面返回数据,也要包含模板中的数据
参考:
{ { first.DATA}} 今天天气:{ { thing.DATA}} 今天温度:{ { thing.DATA}} 和xxx已经恋爱了:{ { thing.DATA}} 距离xxx生日还有:{ { thing.DATA}} 送你一句土味情话:{ { remark.DATA}} 送你一句诗词:{ { remark.DATA}} 送你一句脑洞鸡汤:{ { remark.DATA}}
第二步:准备天气API
在搜索引擎,直接搜索“免费天气API”就能找到许多。
小编采用的是图中所框选的。
进去后可以看到有一部分是免费的的
免费的当然会有一些限制,但对于我们自己玩,完全足够了。
注册后,你就会得到我们需要的两个东西,
天气API平台的appID 和 appSecret
第三步:准备情话API
同样的步骤,我们在搜索引擎搜索“免费土味情话API”。
选择其中一个,小编选择的是ALAPI。
注册后,你就要可以在你的控制台页面找到你的token
(token的作用也是用于在请求数据的时候标识你的身份,不熟悉的小伙伴记下这个值就好了,后面会用到。)
第四步:(可选,不一定要)
在自己电脑上安装XAMPP方便调试,确定调试好了再上传。
把文末下载地址中的index.php 文件和Lunar.php文件放入XAMPP安装目录的htdocs目录下
(XAMPP使用方法自行搜索,有障碍的小伙伴也可以评论区留言。)
第五步:免费虚拟主机+免费子级域名
自行选择,各个云服务厂商也有几个月免费体验那种。
推荐: freehost.cc
第六步:定时触发程序
同样搜索免费网页监控程序,找一个自己觉得还行的。
(因为php脚本的原理就是,你打开网页,它就会触发执行程序,发消息给微信平台。)
也可以不弄这个监控程序。你想要发这个信息的时候,自己在浏览器输入一次也是一样的。
小编使用的是: monit.or.passby.me/
至此,我们需要的环境就全部准备完毕了。
下面开始解读程序
三、代码主体逻辑解析
程序已开源到gitee,可查看。(其中的部分参数需要更新为上面申请到的)
前置:准备好相关平台数据 ,替换成我们前面申请到的
第一步:定义一个对象,把对象的相关信息都放进去
第二步:把需要发送的一些共用的数据先准备好
第三步:将消息组装成自己需要的样式
根据个人信息,计算在一起天数、当地天气、距离生日的时间。
封装成模板格式,同时可以字体颜色可以自行调整
字体颜色进制表:
模板里面格式字符,是来自微信官方平台的规范:
第四步:发送信息
以上就是代码的主体逻辑了,其中出现的函数都在同一文件中。
四、本地调试(如果您本地有php环境的话)
本地调试方法可以直接使用php在命令行运行脚本,也可以使用XAMPP将gitee中的index.php发布成本地站点。浏览器输入xampp发不出的本地站点来调试。
五、上传云服务器,并使用浏览器触发
如果申请了虚拟主机的话,根据平台指使文档来就行。
一般的流程是将程序文件按要求命名后,上传到虚拟主机的某个路径下,即可。
(注意:我们这里index.php和Lunar.php一定要同时放。因为index.php中调用了Lunar.phh)
再使用虚拟主机提供的域名或者地址,在浏览器输入地址,则会触发上传的程序文件。
六、定时触发
找一个免费的网站监控程序,设置成固定每天的x点钟,扫描一次上一步虚拟主机给到的域名。
以上就大功告成了,大家有疑问可以评论、留言,看到会回的哦!
gitee.com/fushentong/sa...