们将在这个小小的城镇中相互扶持,共同生活下去
今宵之月,绝不西沉。只此美梦,不再苏醒。从今往后,生生世世,长相厮守,为你立誓。
我们不能让这次冒险之旅没有意义没有收获
我们的本质就是血,一层层地重复,然后世代脉脉相传的血才是黑血的真实
当你知道自己被爱著的时候就不会自卑了asd
不要哭,我还没有努力到要哭的程度,不甘心就可以了das
既不回头,何必不忘;既然无缘,何必誓言;今日种种,似水无痕
空谈之类,是谈不久,也谈不出什么来的,它终必被事实的镜子照出原形,拖出尾巴而去
只愿涤荡四方,护得一世之隅。
你看你浪费了多少流星,哈哈……不牵个手也很浪费这样的夜晚呢
有形的东西迟早会凋零,但只有回忆是永远不会凋零的
已经无法回来的东西,得到和舍弃都很痛苦
Pain past is pleasure.11222
我因为后来离开村子,在远处看见这一村庄人的火焰。看见他们比熄灭还要寂静的那一场燃烧。我像一根逃出火堆的干柴,幸运而孤独地站在远处。
河川,激流逆流顺流回流,犹如人生前后进退往复不息
首页
统计
免费Chat GPT
关于
更多
友链
每日新闻
视频
高清壁纸
Search
1
2023彩虹易支付最新原版开源网站源码,完整的易支付源码,无后门
465 阅读
2
ThinkPHP6的常见问题解答
387 阅读
3
Spring Boot之七牛云分片上传
241 阅读
4
小狐狸ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端(支持分享朋友圈、破解弹窗)
230 阅读
5
国内最好用的六款虚拟机软件
212 阅读
技术分享
源码分享
课程分享
号卡套餐
移动专区
电信专区
联通专区
广电专区
软件仓库
电脑软件
安卓软件
活动线报
值得一看
Search
标签搜索
技术分享
源码
源码分享
css
安卓软件
活动线报
软件
课程分享
号卡
电脑软件
PHP
值得一看
HTML
js
教程
chatgpt
AI
小程序
ThinkPHP
联通
老K博客
累计撰写
420
篇文章
累计收到
338
条评论
今日撰写
0
篇文章
首页
栏目
技术分享
源码分享
课程分享
号卡套餐
移动专区
电信专区
联通专区
广电专区
软件仓库
电脑软件
安卓软件
活动线报
值得一看
页面
统计
免费Chat GPT
关于
友链
每日新闻
视频
高清壁纸
用户登录
登录
搜索到
117
篇与
的结果
2023-10-25
为gitlab配置QQ个人邮箱
废话少说吧直接上教程,配置邮箱的目的就是为了收发邮件方便。1、开启qq邮箱的POP3/SMTP服务并保存好授权码这一步在qq邮箱的设置 -> 账户中 点击开启按照提示步骤操作会获得相应的授权码(注意:记住授权码一会要用)2、修改gitlab的配置文件:sudo vim /etc/gitlab/gitlab.rbgitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "******@qq.com" gitlab_rails['smtp_password'] = "授权码" gitlab_rails['smtp_domain'] = "smtp.qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = '******@qq.com #注意这个一定要填写,不然会报502错误至此配置文件修改完成重启后生效:sudo gitlab-ctl reconfiguresudo gitlab-ctl restart (注:有人说不需要重启,看自己定吧,我是重启了一下)3、测试配置是否成功执行 gitlab-rails console进入控制台。然后执行测试发送邮件命令Notify.test_email(‘收件人邮箱’, ‘邮件标题’, ‘邮件正文’).deliver_now当你看到以下提示时,那么恭喜你你配置成功啦=> #<Mail::Message:70087079672280, Multipart: false, Headers: <Date: Sat, 28 Apr 2018 17:30:36 +0800>, <From: Example <xxxxxxx@qq.com>>, <Reply-To: Example <xxxxxxx@qq.com>>, <To: xxxxxxxx@qq.com>, <Message-ID: <5ae43f3c5fb26_1b973fbe7ffdb0ec97358@ubu.mail>>, <Subject: Message Subject test>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>进游戏看看是否收到邮件了吗至此配置完成,退出console控制台直接exit。
2023年10月25日
43 阅读
0 评论
0 点赞
2023-10-25
如何使用PHP实现邮件发送统计报表?
如何使用PHP实现邮件发送统计报表?随着互联网的发展,电子邮件成为了人们工作和生活中不可或缺的一部分。而对于企业来说,定期统计和分析邮件发送情况对于了解和改进邮件营销策略至关重要。本文将介绍如何使用PHP实现邮件发送统计报表,并给出具体的代码示例。首先,我们需要定义一个邮件发送的统计报表类,其中包含了一些必要的属性和方法:class EmailReport { private $sender; // 发件人 private $receiver; // 收件人 private $subject; // 邮件主题 private $sendTime; // 发送时间 public function __construct($sender, $receiver, $subject, $sendTime) { $this->sender = $sender; $this->receiver = $receiver; $this->subject = $subject; $this->sendTime = $sendTime; } public function getSender() { return $this->sender; } public function getReceiver() { return $this->receiver; } public function getSubject() { return $this->subject; } public function getSendTime() { return $this->sendTime; } }然后,我们需要编写一个邮件发送统计的函数,该函数接收一个邮件发送统计报表对象数组,并生成相应的统计报表:function generateEmailStatReport($emailReports) { $report = array(); $totalEmails = count($emailReports); // 统计每个发件人的发送次数 foreach ($emailReports as $report) { $sender = $report->getSender(); if (isset($report[$sender])) { $report[$sender]++; } else { $report[$sender] = 1; } } // 输出统计结果 echo "发件人 发送次数 "; foreach ($report as $sender => $count) { echo "$sender $count "; } // 输出总计 echo "总计:$totalEmails 封邮件 "; }接下来,我们模拟生成一些邮件发送统计报表数据,并调用上述函数进行统计和生成报表:$emailReports = array( new EmailReport("sender1@example.com", "receiver1@example.com", "邮件主题1", "2021-01-01 09:00:00"), new EmailReport("sender2@example.com", "receiver2@example.com", "邮件主题2", "2021-01-02 10:00:00"), new EmailReport("sender1@example.com", "receiver3@example.com", "邮件主题3", "2021-01-02 11:00:00"), new EmailReport("sender3@example.com", "receiver4@example.com", "邮件主题4", "2021-01-03 12:00:00"), new EmailReport("sender1@example.com", "receiver5@example.com", "邮件主题5", "2021-01-03 13:00:00"), ); generateEmailStatReport($emailReports);运行上述代码,即可得到如下的邮件发送统计报表:发件人 发送次数 sender1@example.com 3 sender2@example.com 1 sender3@example.com 1 总计:5 封邮件通过上述示例代码,我们实现了使用PHP生成邮件发送统计报表的功能。这对于企业来说,可以帮助他们了解并优化邮件营销策略,提高邮件的投递率和点击率。希望本文对您有所帮助!
2023年10月25日
45 阅读
0 评论
0 点赞
2023-10-24
给网站添加pjax无刷新,换页音乐不中断
博客加了悬浮音乐播放器后就一直在折腾换页音乐不中断的功能,在网上查找后发现想要实现换页音乐不中断的功能必须要为博客加pjax,于是又苦苦寻找并尝试了一番,最后发现网上实现pjax功能基本上是两种方法。方法一<script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/jquery.pjax/1.9.6/jquery.pjax.min.js"></script> <script> $(document).pjax('a[href^="<?php Helper::options()->siteUrl()?>"]:not(a[target="_blank"], a[no-pjax])', { container: '#pjax-container', fragment: '#pjax-container', timeout: 8000 }) </script>将以上代码放入页脚文件 foot.php 或者 footer.php 文件的最下面。解释一下上面代码: <?php Helper::options()->siteUrl()?> 是typecho的自带函数,调用本站的首页地址!也就是只对本站的,并且没有 _blank 属性的,标签里不含 no-pjax 的链接实行pjax!局部刷新的区域是#pjax-container的部分!其中 #pjax-container 是你的局部刷新部分,你可能没有这个div,你自己在添加一个包裹住你想局部刷新的部分就行了!方法二<script src="https://cdn.jsdelivr.net/npm/pjax/pjax.js"></script> <script> var pjax = new Pjax({ elements: "a", // 在页面进行 PJAX 时需要被替换的元素或容器,一条一个 CSS 选择器,数组形式 selectors: [ "title", "meta[name=description]", // 如果是全部 meta 替换的话,只需要写 meta "main" ], cacheBust: false }) </script>和第一种方法一样,将以上代码放入页脚文件foot.php或者footer.php文件的最下面。局部刷新的区域是main的部分!其中main是你的局部刷新部分,你可能没有这个div,你自己在添加一个包裹住你想局部刷新的部分就行了!测试(joe主题)两种方法我这边都测试过了,最终第二种方法是成功的,然后由于我主题的特殊性,在成功之后出现跳转页面后出现内容显示不完全的BUG,解决的方法是把index.php文件和post.php文件中主体部分所有引用页面的部分全部都放在放在各自的页面里面。如index.php中引用的<!-- 列表 --> <?php $this->need('component/index.list.php'); ?>就把component/index.list.php文件里的所有代码全部复制到index.php文件的下面即可。由于joe主题引用的文件实在是太多,其实是懒得弄所以就此搁置!有兴趣的话自己可以尝试下。
2023年10月24日
39 阅读
0 评论
0 点赞
2023-10-23
Redis 的雪崩、穿透和击穿
参考https://github.com/doocs/advanced-java1.缓存雪崩缓存挂了,所有的流量一下子都打到了数据库。紧接着数据库崩了,重启数据库又会被新的流量打崩了。 缓存雪崩的事前事中事后的解决方案如下:事前:Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃。事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。事后:Redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。用户发送一个请求,系统 A 收到请求后,先查本地 ehcache 缓存,如果没查到再查 Redis。如果 ehcache 和 Redis 都没有,再查数据库,将数据库中的结果,写入 ehcache 和 Redis 中。限流组件,可以设置每秒的请求,有多少能通过组件,剩余的未通过的请求,怎么办?走降级!可以返回一些默认的值,或者友情提示,或者空值。好处:数据库绝对不会死,限流组件确保了每秒只有多少个请求能通过。只要数据库不死,就是说,对用户来说,2/5 的请求都是可以被处理的。只要有 2/5 的请求可以被处理,就意味着你的系统没死,对用户来说,可能就是点击几次刷不出来页面,但是多点几次,就可以刷出来了。2.缓存穿透有大量查询是无效的,缓存没有,数据库也没有,导致所有查询都直接查到了数据库 解决方式很简单,首先在接口判断请求值的合法性,如果不合法直接拒绝。如果合法,每次系统 A 从数据库中只要没查到,就写一个空值到缓存里去,比如 set -999 UNKNOWN 。然后设置一个过期时间,这样的话,下次有相同的 key 来访问的时候,在缓存失效之前,都可以直接从缓存中取数据。曾经被问到的一个问题:如果数据库的id并不是按照一定顺序递增的,而黑客从1开始遍历数据库,怎么办?这时候可以使用布隆过滤器。布隆过滤器是一种比较独特数据结构,有一定的误差。当它指定一个数据存在时,它不一定存在,但是当它指定一个数据不存在时,那么它一定是不存在的。将数据库有效id加入布隆过滤器,如果不存在过滤器里,直接拒绝掉。缓存空数据与布隆过滤器的比较当一些恶意攻击查询查询的key各不相同,而且数量巨多,此时缓存空数据不是一个好的解决方案。因为它需要存储所有的Key,内存空间占用高。并且在这种情况下,很多key可能只用一次,所以存储下来没有意义。所以对于这种情况而言,使用布隆过滤器是个不错的选择;而对与空数据的Key数量有限、Key重复请求效率较高的场景而言,可以选择缓存空数据的方案。3.缓存击穿某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库.不同场景下的解决方式可如下:若缓存的数据是基本不会发生更新的,则可尝试将该热点数据设置为永不过期。若缓存的数据更新不频繁,且缓存刷新的整个流程耗时较少的情况下,则可以采用基于 Redis、zookeeper 等分布式中间件的分布式互斥锁,或者本地互斥锁以保证仅少量的请求能请求数据库并重新构建缓存,其余线程则在锁释放后能访问到新缓存。若缓存的数据更新频繁或者在缓存刷新的流程耗时较长的情况下,可以利用定时线程在缓存过期前主动地重新构建缓存或者延后缓存的过期时间,以保证所有的请求能一直访问到对应的缓存。
2023年10月23日
49 阅读
0 评论
0 点赞
2023-10-23
CSS 浮动(Float) 清除浮动
说浮动之前,先说一些别的东西标准文档流宏观地讲,我们的web页面和photoshop等设计软件有本质的区别:web页面的制作,是个“流”,必须从上而下,像“织毛衣”。而设计软件,想往哪里画个东西,都能画标准文档流的特性1.空白折叠现象(无论多少个空格、换行、tab,都会折叠为一个空格)2.高矮不齐,底边对齐3.自动换行,一行写不满,换行写行内元素和块级元素行内元素和块级元素的区别:(非常重要)行内元素与其他行内元素并排;不能设置宽、高。默认的宽度,就是文字的宽度块级元素霸占一行,不能与其他任何元素并列能接受宽、高。如果不设置宽度,那么宽度将默认变为父亲的100%块级元素和行内元素的相互转换我们可以通过display属性将块级元素和行内元素进行相互转换display:inline;可以把块级元素转换为行内元素display:block;可以把行内元素转换为块级元素再说一个:display:inline-block;可以把行内元素或块级元素设置为 行内块元素 ,可以并排显示,并且可以设置块级元素的属性标准流里面的限制非常多,导致很多页面效果无法实现。如果我们现在就要并排、并且就要设置宽高,那该怎么办呢?办法是:脱离 标准文档流!css中一共有三种手段,使一个元素脱离标准文档流:浮动绝对定位固定定位浮动(float)float:left | right | none ;(默认不浮动none)浮动的元素脱标在一个父元素内部,如果一个元素浮动了,那么它就脱离了标准文档流,后面的元素就让向上排浮动并没有完全地脱离了标准文档流(但是它具有破坏性,所以可以用Flex布局,想了解Flex布局,请参考我的 Flex布局教程),如果后面的元素内部有文字,这些文字会环绕在浮动元素的周围,产生字围效果 上图,在默认情况下,两个div标签是上下进行排列的。现在由于float属性让上图中的第一个div标签出现了浮动,于是这个标签在另外一个层面上进行排列。而第二个div还在自己的层面上遵从标准流进行排列。一旦一个元素浮动了,那么,将能够并排了,并且能够设置宽高了。无论它原来是个行内元素,还是块级元素浮动的元素互相贴靠如果给三个div均设置了float: left;属性之后,然后设置宽高。当改变浏览器窗口大小时,可以看到div的贴靠效果,如下图 上图显示,3号如果有足够空间,那么就会靠着2号。如果没有足够的空间,那么会靠着1号。如果没有足够的空间靠着1号,3号自己去贴左墙,不过3号贴左墙的时候,并不会往1号里面挤,而是往1号下面排列,如果小到极限时,里面的浮动的子元素宽度是不会改变的同样,float还有一个属性值是right,这个和属性值left是对称的。浮动的元素有“字围”效果如下: 上图中,我们发现:div挡住了p,但不会挡住p中的文字,形成“字围”效果。收缩收缩:一个浮动的元素,如果没有设置width,那么将自动收缩为内容的宽度(这点非常像行内元素)如图: 上图中,div本身是块级元素,如果不设置widh,它会单独霸占整行;但是,设置div浮动后,它会收缩如果一个元素没有设置高度,它的高度是靠里面的内容撑起来的。如果父元素内部元素都浮动了,那么会造成父元素的高度塌陷同步如果多个元素浮动了,那么这们就会并排显示,如果都是同一个方向的浮动,它们会紧紧地贴在一起(自己动手写一下)如果一个元素浮动了,先向上移动,直到贴靠到父元素的边界,接着,如果是左浮动,就向左移动,直到移动到父元素的左边界,如果是向右浮动,就向右移动,直接移动到父元素的右边界补充: 上图所示,将para1和para2设置为浮动,它们是div的儿子。此时para1+para2的宽度小于div的宽度。效果如上图所示。可如果设置para1+para2的宽度大于div的宽度,我们会发现,para2掉下来了:补充浮动只对父元素和以后的元素有影响,对之前的元素没有影响浮动的清除(重点)元素浮动会造成的影响:对父元素的影响(父元素的高度坍塌)解决办法:加高法 给父元素设置高度,就不会塌陷(简单,基本不用,大部分情况下父元素的高度是需要子元素撑起来的)overflow:hidden 简单,使用overflow:hidden父元素的高度会随着子元素的高度变化而变化。overflow:hidden本职工作是用来处理溢出 在使用过程中,需要注意子元素如果想要超出父元素高度,此时overflow:hidden就不适合了隔墙法(clear:both) 在所有子元素后面加一个空的div 在这个div上面加clear:both,就可以清除浮动(分为内墙法和外墙法,本质上一样),clear:both是专业清除浮动的对后面兄弟元素造成的影响(兄弟元素会向上移动)解决办法:在受影响的元素上面的加 clear:both(参考对父元素的影响)项目中最常用的清除浮动的办法利用伪元素 after其实很简单,就是写一个清除浮动的类,哪个元素想要清除浮动,只需加上 class=“clearfix” 就可以,非常简单清除浮动类的代码:.clearfix:after{ content: ""; display: block; clear: both; height: 0; }由于浮动具有破坏性,所以后面就有一个新的Flex布局方案,用起来别提多爽了,绝对让你爽到爆,还简单容易上手,想了解 Flex布局 ,请参考我的文章:Flex 布局教程
2023年10月23日
55 阅读
1 评论
0 点赞
1
...
21
22
23
24
CC BY-NC-ND