首页
归档
友链
关于
Search
1
网易云音乐黑胶会员月月免费赠送
3,339 阅读
2
十年之约RSS聚合订阅服务上线
2,754 阅读
3
工资发放日的区别
2,468 阅读
4
rsyslogd内存占用过高解决方案
2,321 阅读
5
Nginx反代MinIO后,上传文件签名异常
2,169 阅读
零碎
标本
码海
工具
其他
登录
Search
标签搜索
北京
摄影
生活
Java
旅行
学习笔记
教程
Linux
服务器
软件
SpringBoot
日记
Windows
服务
数据库
福利
Spring
系统
SQL
docker
萧瑟
累计撰写
195
篇文章
累计收到
1,355
条评论
首页
栏目
零碎
标本
码海
工具
其他
页面
归档
友链
关于
搜索到
195
篇与
萧瑟
的结果
2023-09-02
抓娃娃的快乐
今天刚从医院出来,想去附近商超逛逛,偶然发现新开了一家“娃娃机游戏厅”。进店逛逛,看到那些五彩缤纷、各式各样的娃娃,便情不自禁地走上前去,购买了150快钱的币,每两个币玩一次。投入硬币,拿起娃娃机里的抓钩,开始我的“抓娃娃之旅”。站在娃娃机前,聚精会神地盯着那个娃娃,调整抓钩的位置,力求准确无误地将娃娃抓起。谁知,好多次都快抓到了,结果钩子松了,娃娃掉落。看着旁边的小孩,使劲拍打着抓钩按钮,不一会她的小车车就装忙了娃娃,我也学着着小孩,使劲敲击着按钮,不一会就抓到了。来看看我成果。最后又用六个娃娃,换了两个小手办,看看后面能不能粘到小摩托上面,增加一些乐趣。偶尔放松一下,也会让我在生活中感觉更加充实和快乐。
2023年09月02日
327 阅读
27 评论
2023-08-29
SpringBoot 对接华为大数据平台kerberos认证的Kafka数据
最近项目中有用到kafka来同步某业务核心数据,通过kafka来进行数据的实时更新。原本使用的是Apache kafka 来进行订阅消费,后因业务方信创要求,更换了华为大数据平台的Kafka数据源,采用kerberos认证。对接了一天多,数据才接入成功,网上相关文档比较少,这里我总结一下,为后人少踩坑。本次使用的是华为MRS3.1.2版本,其他版本应该都类似。修改项目中的pom.xml依赖,将默认的apache的kafka-client包替换为华为自带的。如果拉去不到相关依赖包,请更换为华为Maven镜像,配置信息如下。<repositories> <repository> <id>huawei-cloud-sdk</id> <name>HuaWei Cloud Mirrors</name> <url>https://mirrors.huaweicloud.com/repository/maven/huaweicloudsdk/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>huawei-mirrors</id> <name>HuaWei Mirrors</name> <url>https://repo.huaweicloud.com/repository/maven/</url> </repository> </repositories>我们需要在配置文件中增加新的配置文件,不要使用spring.kafka相关配置,建议自己新增一个配置信息,本文以huawei.mrs.kafka为例。huawei: mrs: kafka: enable: false bootstrap-servers: 10.244.231.2:21007,10.244.230.202:21007,10.244.230.125:21007 security: protocol: SASL_PLAINTEXT kerberos: domain: name: hadoop.hadoop_651_arm.com sasl: kerberos: service: name: kafka新建一个配置文件HuaWeiMrsKafkaConfiguration,配置相关信息@Value("${huawei.mrs.kafka.enable}") public Boolean enable; @Value("${huawei.mrs.kafka.bootstrap-servers}") public String boostrapServers; @Value("${huawei.mrs.kafka.security.protocol}") public String securityProtocol; @Value("${huawei.mrs.kafka.kerberos.domain.name}") public String kerberosDomainName; @Value("${huawei.mrs.kafka.sasl.kerberos.service.name}") public String kerberosServiceName; @Bean public ConcurrentKafkaListenerContainerFactory<?, ?> kafkaListenerContainerFactory( ConcurrentKafkaListenerContainerFactoryConfigurer configurer, ConsumerFactory<Object, Object> kafkaConsumerFactory, KafkaTemplate<String, String> template) { ConcurrentKafkaListenerContainerFactory<Object, Object> factory = new ConcurrentKafkaListenerContainerFactory<>(); configurer.configure(factory, kafkaConsumerFactory); //禁止消费者自启动,达到动态启动消费者的目的 factory.setAutoStartup(enable); return factory; } @Bean public ConsumerFactory<Object, Object> consumerFactory() { Map<String, Object> configs = new HashMap<>(); configs.put("security.protocol", securityProtocol); configs.put("kerberos.domain.name", kerberosDomainName); configs.put("bootstrap.servers", boostrapServers); configs.put("sasl.kerberos.service.name", kerberosServiceName); configs.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); configs.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); return new DefaultKafkaConsumerFactory<>(configs); } @Bean public KafkaTemplate<String, String> kafkaTemplate() { Map<String, Object> configs = new HashMap<>(); configs.put("security.protocol", securityProtocol); configs.put("kerberos.domain.name", kerberosDomainName); configs.put("bootstrap.servers", boostrapServers); configs.put("sasl.kerberos.service.name", kerberosServiceName); configs.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); configs.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); ProducerFactory<String, String> producerFactory = new DefaultKafkaProducerFactory<>(configs); return new KafkaTemplate<>(producerFactory); } @Bean public RecordMessageConverter converter() { return new StringJsonMessageConverter(); }再新建一个全局消费kafka数据的KafkaConsumer类@Slf4j @Component public class KafkaConsumer { @KafkaListener(topics = "topic1") public void topicMessage(ConsumerRecord<?, ?> record) { log.info("Kafka->topic:‘topic1’-->{}", record.value()); //TODO:业务逻辑 } }配置kerberos信息,也是非常重要的一步,配置kerberos认证文件,本文将以最简单的教程为例,在启动脚本中配置。为什么不在项目中配置呢?因为各位的项目都各自不同,放在resources目录中,有的时候会读取不到,所以我们以最简单的例子来作为讲解。打包项目,将打包好的jar放置在服务器中。并将下载安全集群认证用户的krb5.conf和user.keytab文件放置跟jar包相同目录或者自定义一个目录(本文以/data/java/huawei-mrs-kafka为例)。在这个文件夹或者部署目录通缉新建一个jaas.conf文件,将keyTab项修改为绝对路径。principal则是华为大数据平台提供的账号。Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/data/java/huawei-mrs-kafka/user.keytab" principal="developuser@HADOOP_651_ARM.COM" useTicketCache=false storeKey=true debug=true; }; KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/data/java/huawei-mrs-kafka/user.keytab" principal="developuser@HADOOP_651_ARM.COM" useTicketCache=false storeKey=true debug=true; }; 最后一步,运行jar包,指定krb5.conf和jaas.conf环境变量。java -jar -Djava.security.krb5.conf=/data/java/huawei-mrs-kafka/krb5.conf -Djava.security.auth.login.config=/data/java/huawei-mrs-kafka/jaas.conf huawei-mrs-kafka-1.0-SNAPSHOT.jar因为本地没有相关环境,生产环境又处于内网,这里就不提供相关运行成功的代码,对接华为大数据平台的Kafka其实很简单,只是网上的教程很少而已。如有这方面的问题,可以在本文留言,看到了就会回复。{cloud title="示例下载" type="default" url="https://www.gitlink.org.cn/yanqs/huawei-mrs-kafka-demo" password=""/}
2023年08月29日
485 阅读
0 评论
2023-08-17
从抵触到享受:喝中药心路历程
最近,身体不舒服,心脏跳动的也不规律,感觉随时会到达猝死的边缘,每次难受到医院,通过各种仪器检查,医生告诉我没什么毛病,建议多休息,结果都是不了了之。偶然发现,身边的同事们都开始去看中医,喝中药了,想着去年也看过一段时间的中医,刚好公司还有补充医疗,就去看看中医,顺便调理一下身体。排队两小时,看病5分钟,中医诊断病情,主要是望闻问切。简单问了问情况,又把了脉,大概结论就是,气血不足。主要是熬夜、抽烟、饮食不规律造成的,建议是养成良好的作息时间,少熬夜;不用暴饮暴食之类的话术。回到家中,吃完晚饭,把中药加热,一口干了。喝完这杯中药,心里突然有了一些感受。记得小时候,每次生病,父母总是会给我熬中药。那时候,我对中药的味道非常抗拒,每次喝药都会痛苦地哭泣。药汁的苦涩味道,让我感到非常不舒服。我总是想方设法地逃避喝药,甚至会对父母产生抵触情绪。而最近我开始意识到中药的好处。它不仅可以治病,还可以调理身体。每天当药顺着口腔流入胃中,我都会感到一种安心和舒适的感觉,我开始渐渐地接受喝中药的习惯。虽然味道依然苦涩,但我已经不再像小时候那样抵触它了。相反,我开始享受喝中药的过程,它会让我感到平静和放松。中药的药效温和,不会像西药那样有太多的副作用。总的来说,喝中药的心路历程让我更加深刻地认识到中药的好处。它不仅可以治病,还可以调理身体,让我们保持健康的状态。虽然喝中药的过程可能有些不便,但我们应该坚持下去,为了自己的健康和幸福。最后再总结一句:可能“我们”终于长大了,也许这就是“成年人”该承受的一些“东西”吧。
2023年08月17日
253 阅读
26 评论
2023-08-13
Maven构建工具mvnd和mvn 性能对比测试
最近在技术相关公众号上看到一款 Maven 强化工具 maven-mvnd ,说是 性能 提升 300%,抱着学习的态度来实验一下新技术。Maven-mvnd简介maven-mvnd 是 Apache Maven 团队借鉴了Gradle和Takari的优点,衍生出来的更快的构建工具,maven 的 强化版。maven-mvnd 基于 maven 的但比它更快的构建工具.maven-mvnd 在设计上,使用一个或多个守护进程来构建服务,以此来达到并行的目的!同时,maven-mvnd 内置了maven,因此我可以在maven 过渡到 maven-mvnd的过程中实现 无缝切换!不必再安装 maven 或进行复杂的配置更改。官方仓库地址:https://github.com/apache/maven-mvnd安装步骤GitHub下载压缩包访问仓库版本地址:https://github.com/apache/maven-mvnd/releases点击Assets找到对应的系统的安装包,我们是windows系统,这里以windows为例。基本上就是后缀为windows-amd64.zip的文件,将下载的zip包放置在本地开发目录下,解压文件。修改Windows系统环境变量。编辑 PATH 的环境变量,里面增加 maven-mvnd 的目录。配置环境变量是为了在 cmd 的任意地址,可以识别到 bin 下的 mvnd 命令我们打开cmd命令提示符,输入 mvnd -version 或者 mvnd -v 查看版本信息。输出以下信息,代表安装成功!使用命令mvnd 与 maven 命令几乎没有任何不同,可以通过查看mvnd -help 查看举个例子、如要打包安装,则把 mvn clean install 替换为 mvnd clean install 即可配置可以修改 mvnd 解压目录下 conf 里的 mvnd.properties 文件,拉到最后面,放开 maven.setting 注释,把值改成自己的maven仓库地址即可,如下maven.settings=C://Develop//apache//maven//3.6.3//conf//settings.xml到此配置已经完成。打包速度对比使用一个普通 Java 项目来实验对比,分别使用 maven 和 maven-mvnd 进行打包。# maven 打包命令 mvn clean package -DskipTests # mvnd 打包命令 mvnd clean package -DskipTests结果如下,速度有所提升,速度提升没有网上传言的 8 倍、300%那么夸张,当然,这可能与我的机器或项目有关,你们可以使用你们的项目另行验证!
2023年08月13日
410 阅读
3 评论
2023-08-10
使用VuePress搭建Wiki静态网站
最近使用 语雀 做了一个知识手册,改版后只能会员才能分享,想着数据托管到第三方,还不如自建。参考了其他静态网站生成,最后决定使用 VuePress 来搭建。环境要求Node.js v16.19.0+搭建框架步骤 1: 创建并进入一个新目录mkdir wiki-book cd wiki-book步骤 2: 初始化项目npm init步骤 3: 将 VuePress 安装为本地依赖npm install -D vuepress@next步骤 4: 在 package.json 中添加一些 scripts{ "scripts": { "docs:dev": "vuepress dev docs", "docs:build": "vuepress build docs" } }步骤 5: 将默认的临时目录和缓存目录添加到 .gitignore 文件中echo 'node_modules' >> .gitignore echo '.temp' >> .gitignore echo '.cache' >> .gitignore步骤 6: 创建你的第一篇文档mkdir docs echo '# Hello VuePress' > docs/README.md步骤 7: 在本地启动服务器来开发你的文档网站npm run docs:devVuePress 会在 http://localhost:8080 启动一个热重载的开发服务器。当你修改你的 Markdown 文件时,浏览器中的内容也会自动更新。进阶配置启动上面项目后,会在docs 下会生成一个.vuepress 目录,我们在这个目录下创建一个config.js 文件。这个是 VuePress 站点的基本配置文件,在这个里面我们可以配置站点基础信息、插件、主题等。具体可以参考官方文档:配置信息这里我把常用的配置分享一下:import { defineUserConfig } from 'vuepress' //引入默认主题 import { defaultTheme } from '@vuepress/theme-default' export default defineUserConfig({ // 开发服务器的端口号 port: 8080, // 启动后打开浏览器 open: false, // 设置站点根路径 base: '/', // 站点的语言 lang: 'zh-CN', // 站点的标题 title: '知识手册', // 站点的描述 description: '站点的描述', // 默认主题配置 theme: defaultTheme({ // 默认颜色模式 colorMode: 'auto', // 是否启用切换颜色模式的功能 colorModeSwitch: true, // logo Logo 图片的 URL。 //logo: '' // 导航栏配置 navbar:[ ], // 侧边栏配置 sidebar:[ ] }) })打包配置运行 npm run docs:build 生成后的文件在 docs\.vuepress\dist 中,将这个文件压缩丢在服务器中,就可以打开了。一般只要支持 html 的web服务器都是可以的。这里不做过多描述。样例代码{cloud title="样例代码" type="lz" url="https://xiaose.lanzoum.com/b02ewqy8h" password="h39g"/}
2023年08月10日
210 阅读
2 评论
2023-08-08
2023年07月碎碎念
“碎碎念”系列迎来了23年首更,今年比较忙,年后就一直在客户驻场,没有外网,所以博客也很少打理了。眼看23年已经过了大半,简单记录一下最近的琐事。工作临时借调到兄弟部门驻场,待了两个月;这边伙食不错,一天5元(早1午2晚2),比外面便宜太多了,且种类挺多的,每顿都有肉,我已经三个月没吃过主食了,基本上吃菜都吃饱了,哈哈。上班过程中,跟家里一样,代码敲累了,直接点根烟抽,抽完继续干活。生活“两点一线”的生活,无趣且烦躁。北京最近暴雨洪水灾害,山路也封了不少,摩友喊着跑山也没去。主要是这破车,跟我两个多月跑了小六千公里,已经出现了一些故障,换了一些零件了,但是上下班路上,发动机故障灯经常亮,每次去修车点看,然后又不亮了,修车师傅说需要等故障灯亮了才能知道是什么问题,很烦。伙食好起来也不忌口,某天吃坏肚子,去安贞医院急诊打吊瓶,然后吃了一些消炎药,稍微好多了,医保报销后花了小四百,补充医疗报销后,最终花了30元。最近看了3场电影:《八角笼中》、《茶啊二中》、《孤注一掷》八角笼中:开头故事点很足,过程也很精彩、很有看头,但是结尾有些潦草收场。茶啊二中:占用了体育课真的会让学生痛苦,零分的评价表真的会让老师难过,寝室是吃鸳鸯锅的夜宵摊,卫生间才是开小会的集聚地。再也回不去的青春年华。孤注一掷:点映首播,剧情保守,典型国内的反诈宣传片,宣传很到位,基本点映电影院都是满场,没有空位。idea自从《2022.01.03 碎碎念》中搭建了自己的一个后台系统,接入了十年之约、疫情风险区域、域名管理、51la统计等第三方系统,Typecho 接入了评论、文章、分类、标签管理,但是文章的富文本问题还一直没解决,所以还没正式对接博客的后台,今年抽空再补补坑。前段时间,本地电脑的 KeyManager 证书管理工具莫名抽风,所以下一步的计划是将SSL证书管理也纳入统管平台开发计划中。因为后端程序解析证书内容比较繁琐,且没找到合适的技术方案,所以考虑的是托管在腾讯云SSL证书中,然后调用腾讯云的接口在自己的后台中实现,本地不做存储,也算勉强解决了自己的问题。列一个开发清单:{ } 企业邮箱对接;{ } Typecho博客对接;{ } SSL证书管理;{ } 博客订阅管理;{ } 书签管理;23年剩下的时间就给自己列这些功能点吧,自己慢慢迭代更新中,只要自己用的舒服,也算写了一个好的程序,哈哈。
2023年08月08日
293 阅读
8 评论
2023-06-11
druid连接池实现数据库加密
无论是公司的项目还是个人的项目,我们都会选择将源码上传到 Git 服务器(GitHub、Gitee 或是自建服务器),但只要将源码提交到公网服务器就会存在源码泄漏的风险,而数据库配置信息作为源码的一部分,一旦出现源码泄漏,那么数据库中的所有数据都会公之于众,其产生的不良后果无法预期。于是为了避免这种问题的产生,我们至少要对数据库的密码进行加密操作,这样即使得到了源码,也不会造成数据的泄露。怎么实现加密? 对于 Java 项目来说,要想快速实现数据库的加密,最简单可行的方案就是使用阿里巴巴提供的 Druid 来实现加密。交互流程执行命令这里我们以 1.2.18 版本为例,各位也可以选择其他版本,命令基本都是一样的。 java -cp [druid-1.2.18.jar仓库路径] [com.alibaba.druid.filter.config.ConfigTools] [密码]命令示例java -cp D:\druid\druid-1.2.18.jar com.alibaba.druid.filter.config.ConfigTools 123456 执行结果: privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEAloMI1R+5QNFTDAUvZ5KCkq+qauA2IJbiYR0ghk9ssWm7lPooZEOipCa88W0rya/4oaOt6i0iVlS/EmtmMCTZ7QIDAQABAkEAjWMyXOKcJ+N7XANS8LyUpC8Yq6VLs3mJ1yiBcSoTNORpTxndFog/BXUXQP6yTkNHk+Nc5sxdGvl42y3mywiRAQIhAMhiyFRwWWdImzPR+fC8n6s3+B341jy3AWMrixXMAJydAiEAwEjAp9LTgS0fIoEtlz6KYbVnsionIIof1JKAbsJjKZECIQCuthHcLSiF+LP49nZpAsxjyCS4XSDNRvIauPhHRNqzsQIhAJuBux1+6cLMxSNYqZBp6ex/k2+Jm787Nebq3Ke22g+hAiBi9IOPYlm40BAp9jkr2Z2/yqV1E0ppfqigUbFNIpp79g== publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJaDCNUfuUDRUwwFL2eSgpKvqmrgNiCW4mEdIIZPbLFpu5T6KGRDoqQmvPFtK8mv+KGjreotIlZUvxJrZjAk2e0CAwEAAQ== password:YJHHitRl6unpzMi4dfxDOUH7R0kSB/32Wxu0D+xRA5ijmmaO8whHSlCAm3iQ9OqtJXwPU/NzcKmGx/QvhRxnHg==截图示例替换配置文件spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource druid: url: jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root #生成后的密文 password: YJHHitRl6unpzMi4dfxDOUH7R0kSB/32Wxu0D+xRA5ijmmaO8whHSlCAm3iQ9OqtJXwPU/NzcKmGx/QvhRxnHg== filters: config connect-properties: config.decrypt: true #生成的公钥 config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJaDCNUfuUDRUwwFL2eSgpKvqmrgNiCW4mEdIIZPbLFpu5T6KGRDoqQmvPFtK8mv+KGjreotIlZUvxJrZjAk2e0CAwEAAQ==
2023年06月11日
168 阅读
1 评论
2023-06-11
EasySpider 一个可视化爬虫软件
今天给大家推荐一个可视化爬虫软件:EasySpider ,可以使用图形化界面,无代码可视化的设计和执行爬虫任务。只需要在网页上选择自己想要爬的内容并根据提示框操作即可完成爬虫设计和执行。同时软件还可以单独以命令行的方式进行执行,从而可以很方便的嵌入到其他系统中。这个开源项目超级好用,star 数近万,非常受欢迎;一个不需要写代码,几分钟设计一个爬虫的开源、免费、无广告的开源项目。特点开源免费无广告,代码开源,软件所有功能均免费(商用除外),且没有任何弹窗和外部广告。跨平台,软件可以在 Windows,MacOS 和 Linux 上运行。快速,一个爬虫任务只需要 2-5 分钟即可设计完成,采集时支持并行多开,因此保证了采集速度。安全,不需要注册,所有任务和数据均保存在本地,不经过任何第三方服务器。灵活,可任意添加浏览器插件,任意执行 JavaScript 指令和调用系统外部程序。命令行执行,直接以命令行的方式执行任务,无缝嵌入到其他程序中。元素截图和 OCR 识别,支持元素截图和 OCR 识别,以及图片下载。定时执行,支持定时执行任务,成为贴心生活小助手。运行效果 这个开源项目还非常人性化提供了爬虫案例以及使用视频教程。软件下载{cloud title="Github仓库" type="github" url="https://github.com/NaiboWang/EasySpider" password=""/}{cloud title="GitHub最新版" type="github" url="https://github.com/NaiboWang/EasySpider/releases" password=""/}{cloud title="国内高速下载" type="default" url="https://github.com/NaiboWang/EasySpider/releases/download/v0.3.2/Download_Link_Address_in_China_Mainland.txt" password=""/}
2023年06月11日
664 阅读
7 评论
2023-06-08
Joe 主题对接腾讯 LBS 展示 IP 属地(二)
书接上回,我们在主题中对接腾讯LBS IP查询服务后,会有一个bug:如果某篇文章评论过多,则某些评论IP定位数据无法显示,这个是因为腾讯LBS服务个人开发者的并发量限制为5次/秒。在上一个教程发布后,也有大佬发现了这个问题,不过这个问题我顺手就解决了,但是解决方案没有分享出来,因为需要改typecho系统的代码。这个已经脱离技术小白的范围,请合理折腾,折腾前记得备份数据。{anote icon="fa-internet-explorer" href="https://blog.yanqingshan.com/130.html" type="success" content="Joe 主题对接腾讯 LBS 展示 IP 属地"/}原理这一次折腾的原理是,我们在数据库中添加一个字段作为IP属地信息的一个冗余信息;当用户评论时,获取用户IP地址,调用腾讯LBS服务进行查询,将查询到的数据写入数据库中,这样就避免并发量超出限制。执行sql语句23.06.10:根据Typecho数据库设计文档又更新了一下sql语句ALTER TABLE `typecho_comments` ADD COLUMN `ipRegion` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'IP中文地址' AFTER `parent`, DROP PRIMARY KEY, ADD PRIMARY KEY (`coid`) USING BTREE;上面sql就是在字段coid后增加一个ipRegion的字段,并且添加一个备注信息。修改代码我们打开网站根目录,路径:/var/Widget/Base/Comments.php 这个文件是系统评论对外提供的方法,包括插入数据和查询数据等方法,有能力的同学,可以翻翻代码,基本上面都有注释;大概55行,也就是增加评论 的方法首行,增加以下代码,将key和sign_key修改为自己申请的就可以。$ipRegion = ''; $cip = empty($comment['ip']) ? $this->request->getIp() : $comment['ip']; $key = '配置自己申请的key'; //签名校验的KEY $sign_key = '配置自己申请的sign_key'; $sign = md5('/ws/location/v1/ip?ip='.$cip.'&key='.$key.$sign_key); $url = 'https://apis.map.qq.com/ws/location/v1/ip?ip='.$cip.'&key='.$key.'&sig='.$sign; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'); $content = curl_exec($ch); curl_close($ch); if($content) { $json = json_decode($content,true); if($json['status'] == 0 ){ $resjson = $json['result']['ad_info']; if($resjson['nation'] == '中国'){ if($resjson['province']=='北京市'||$resjson['province']=='天津市'||$resjson['province']=='上海市'||$resjson['province']=='重庆市'){ $ipRegion = $resjson['city']; }else{ $ipRegion = $resjson['province'].$resjson['city']; } }else{ $ipRegion = $resjson['nation'].$resjson['province'].$resjson['city'].$resjson['district']; } } }上面代码增加完后,大概在108行,也就是构建插入结构 那行注释里面增加一个参数,把下面代码放在[]中,'ipRegion' => $ipRegion, 在381行后,插入下面,这个就是把查询对象增加一个输出值'table.comments.ipRegion'基本上请求和写入已经完成,我们再改一下后台管理界面,把这个ip属地也添加到页面上,这样后台也方便查询打开admin/manage-comments.php136行后增加以下代码<br /><span><?php $comments->ipRegion(); ?>最后我们再来修改主题的评论,这里以Joe主题为例文件路径joe/public/comment.php<?php $comments->ipRegion(); ?> 找到合适位置显示IP属地,我是放在112行的<div class="agent"> <?php $comments->ipRegion(); ?> <?php _getAgentOS($comments->agent); ?> · <?php _getAgentBrowser($comments->agent); ?> </div>最终效果如下
2023年06月08日
298 阅读
7 评论
2023-05-24
麦聪SQL Studio Web端数据库管理工具
之前看公众号上推荐了一款Web端的数据库管理工具,它就是麦聪SQL Studio,为什么我要找一款Web端的管理工具,因为类似Navicat之类比较好用的工具都需要收费,且使用破解,有律师函风险,所以需要一款好用的软件,且这款软件支持web端,Web端管理简单,可以协同使用,一个人配置了,其他人也是可以使用,还可以配置账号,数据也可以进行隔离。废话不多说,先上部署教程。这款软件是使用Java语言开发,所以需要JDK环境。官方支持Windows、Mac、Linux,这里Windows、Mac,就不就是跟之前客户端一样,使用它的自带脚本就可以启动,启动后也是Web端,开放端口也是可以多用户使用,既然是Web端,肯定得部署到服务器上比较方便一些,也不用关机之类,部署到外网,还能远程使用,很方便。本次教程服务器已经配置过JDK环境了,直接下载无SDK版本,具体需要看自己服务器环境;{cloud title="官方下载" type="default" url="http://www.maicongs.com/#/home/probation/studio" password=""/}直接下载 Linux 版本,无SDK版本,上传到服务器进行解压unzip -O CP936 sqlstudio_linux_no_jdk_1.6.0.zip cd sqlstudio ./maicong-sqlstudio.sh start _ _ _ __ ___ __ _(_) ___ ___ _ __ __ _ __| | __ _ __ _ ___ | '_ ` _ \ / _` | |/ __/ _ \| '_ \ / _` | / _` |/ _` |/ _` / __| | | | | | | (_| | | (_| (_) | | | | (_| | | (_| | (_| | (_| \__ \ |_| |_| |_|\__,_|_|\___\___/|_| |_|\__, | \__,_|\__,_|\__,_|___/ |___/ maicong-sqlstudio server is started JAVA_OPTS: -server -Xms256m -Xmx4g -XX:+UseG1GC -XX:+UseStringDeduplication -Xloggc:./log/maicong-sqlstudio-gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./log/maicong-sqlstudio-heapdump -Dfile.encoding=utf-8 please waiting start看到上面这个画面,服务已经启动了,访问http://ip:18888 即可访问到服务,首次登录用户名为固定的maicong,密码可自己设置,后续可在个人中心里修改。 该工具支持的数据源还是挺多的,Oracle、PostgreSQL、MySQL、SQLite、SQL Server(Beta)、DM、KingBase、MongoDB(Beta)、Impala九种。本文以MySQL为例,输入ip地址和账户密码点击“测试连接”,会提示是否成功。然后点击左侧logo,返回首页,即可查看已添加的数据源。右击数据源,点击新建查询,就可以使用。这个软件还是很实用的,基本上可以替代Navicat作为开发使用。{cloud title="官方下载" type="default" url="http://www.maicongs.com/#/home/probation/studio" password=""/}题外话最近阿里巴巴也出了一款Web端管理工具,也是一款开源软件,跟今日分享的差不多,它是“Chat2DB”,只不过体验了一下,感觉还是差点意思,等待它后续更新吧,不过它集成了chatpgt,有兴趣的可以体验一下。后续如果更新好用的话,我再来水一篇文章。项目地址:https://github.com/alibaba/Chat2DB
2023年05月24日
465 阅读
1 评论
1
...
4
5
6
...
20