首页
复制
搜索
前进
后退
重载网页
和我当邻居
给我留言吧
首页
统计
关于
WOW怀旧
友链
更多
留言
壁纸
直播
Search
1
关于《杀死那个石家庄人》背后的故事
3,798 阅读
2
沈阳故宫之旅
609 阅读
3
摄影记录|鸿恩寺
562 阅读
4
赤壁赋| 知不可乎骤得,托遗响于悲风
423 阅读
5
Laravel-admin 删除行|删除回调
366 阅读
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
登录
Search
标签搜索
PHP
随笔
Mysql
Laravel-Admin
Laravel
摄影
设计模式
Ab
Linux
Javascript
MAC
支付
CentOs
sh
嘉陵江
南滨路
蓝易云
redis
万能青年
累计撰写
60
篇文章
累计收到
144
条评论
首页
栏目
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
页面
统计
关于
WOW怀旧
友链
留言
壁纸
直播
搜索到
41
篇与
的结果
2022-03-14
Mac显示隐藏文件
打开一个Terminal终端窗口defaults write com.apple.finder AppleShowAllFiles TRUE重启Finderkillall Finder恢复隐藏设置defaults write com.apple.finder AppleShowAllFiles FALSE重启Finderkillall Finder
2022年03月14日
87 阅读
0 评论
0 点赞
2022-03-08
Mysql主从|笔记
为什么要做主从复制{callout color="#f0ad4e"}1、在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作2、做数据的热备3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能{/callout}原理{message type="info" content="binlog(主库中保存所有更新事件日志的二进制文件)"/}主从复制的基础是主库记录数据库的所有变更记录到binlog。binlog是数据库服务器启动的那一刻起,保存所有修改数据库结构或内容的一个文件。mysql主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。在主库里,只要有更新事件出现,就会被依次地写入到binlog里面,之后会推到从库中作为从库进行复制的数据源。{dotted startColor="#ff6c6c" endColor="#1989fa"/}{message type="info" content="binlog输出线程"/}每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。对于每一个即将发送给从库的sql事件,binlog输出线程会将其锁住。一旦该事件被线程读取完之后,该锁会被释放,即使在该事件完全发送到从库的时候,该锁也会被释放。在从库里,当复制开始的时候,从库就会创建两个线程进行处理:{message type="info" content="从库I/O线程"/}当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。{message type="info" content="从库的SQL线程"/}从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。可以知道,对于每一个主从复制的连接,都有三个线程(binlog输出线程、从库I/O线程、从库的SQL线程)。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。{callout color="#f0ad4e"}从库通过创建两个独立的线程,使得在进行复制时,从库的读和写进行了分离。因此,即使负责执行的线程运行较慢,负责读取更新语句的线程并不会因此变得缓慢。比如说,如果从库有一段时间没运行了,当它在此启动的时候,尽管它的SQL线程执行比较慢,它的I/O线程可以快速地从主库里读取所有的binlog内容。这样一来,即使从库在SQL线程执行完所有读取到的语句前停止运行了,I/O线程也至少完全读取了所有的内容,并将其安全地备份在从库本地的relay log,随时准备在从库下一次启动的时候执行语句。{/callout}步骤一:主库db的更新事件(update、insert、delete)被写到binlog步骤二:从库发起连接,连接到主库步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db搭建{callout color="#f0ad4e"}环境:以宝塔为例服务器:linux{/callout}1.在 主库 创建一个用户CREATE USER 'test'@'%' IDENTIFIED BY 'test';2.给创建的用户赋予权限mysql> grant all privileges on *.* to 'test[账号]'@'%' identified by 'test[密码]' with grant option;3.刷新权限mysql> FLUSH PRIVILEGES;4.查看状态mysql> show master status;5.登陆 从库 执行连接修改 server-id 需要和主库不一致文件位置在 /etc/mysql/mysql.conf.d/mysqld.cnfchange master to master_host='192.168.0.1',master_user='test',master_password='test',master_log_file='mysql-bin.000016',master_log_pos=5501;{callout color="#f0ad4e"}master_user:主服务器的用户master_password: 主服务器的密码master_log_file: 也就是我们一号服务器打印的File表里的信息master_log_pos:主库服务器中Position 这里一定要看清楚{/callout}6.查看状态 show slave status\G如果是yesSlave_IO_Running: Yes Slave_SQL_Running: Yes如果出现No 重新启动下mysql服务即可!Mysql关闭主从主服务器reset master;重启mysql从服务器stop slave; reset slave all;重启mysql
2022年03月08日
192 阅读
0 评论
0 点赞
2022-03-07
PHP之trait的用法
trait{callout color="#f0ad4e"}PHP 实现了一种代码复用的方法,称为 traitphp从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性{/callout}{message type="info" content="例子"/}<?php trait Dog{ public $name="dog"; public function bark(){ echo "This is dog"; } } class Animal{ public function eat(){ echo "This is animal eat"; } } class Cat extends Animal{ use Dog; public function drive(){ echo "This is cat drive"; } } $cat = new Cat(); $cat->drive(); echo "<br/>"; $cat->eat(); echo "<br/>"; $cat->bark(); 输出结果为: This is cat drive This is animal eat This is dog ?>优先级#1{callout color="#f0ad4e"}从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。{/callout}<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?>结果为Hello World!{dotted startColor="#ff6c6c" endColor="#1989fa"/}优先级#2<?php trait HelloWorld { public function sayHello() { echo 'Hello World!'; } } class TheWorldIsNotEnough { use HelloWorld; public function sayHello() { echo 'Hello Universe!'; } } $o = new TheWorldIsNotEnough(); $o->sayHello(); ?>结果为Hello Universe!详情可查阅php手册:https://www.php.net/manual/zh/language.oop5.traits.php
2022年03月07日
146 阅读
0 评论
0 点赞
2022-03-06
PHP生成器Yield的用法
优点1.节省大量内存2.优化性能3.比较适合计算大量数据举个栗子<?php function createRange($number){ $data = []; for($i=0;$i<$number;$i++){ $data[] = time(); } return $data; } $result = createRange(10); foreach($result as $value){ sleep(1); echo $value.'<br />'; }来看看他的结果{callout color="#f0ad4e"}在调用函数 createRange 的时候给 $number 的传值是10,一个很小的数字。假设,现在传递一个值10000000(1000万)。那么,在函数 createRange 里面,for循环就需要执行1000万次。且有1000万个值被放到 $data 里面,而$data数组在是被放在内存内。所以,在调用函数时候会占用大量内存。{/callout}创建生成器<?php function createRange($number){ $data = []; for($i=0;$i<$number;$i++){ // $data[] = time(); yield time(); } // return $data; } $result = createRange(10); foreach($result as $value){ sleep(1); echo $value.' -- '; }打印结果{message type="info" content="结论:输出的值和第一次没有使用生成器的不一样,这里的值(时间戳)中间间隔了1秒。"/}{callout color="#f0ad4e"}未使用生成器时:createRange 函数内的 for 循环结果被很快放到 $data 中,并且立即返回。所以, foreach 循环的是一个固定的数组。使用生成器时:createRange 的值不是一次性快速生成,而是依赖于 foreach 循环。foreach 循环一次, for 执行一次。{/callout}执行流程首先调用 createRange 函数,传入参数10,但是 for 值执行了一次然后停止了,并且告诉 foreach 第一次循环可以用的值。foreach 开始对 $result 循环,进来首先 sleep(1) ,然后开始使用 for 给的一个值执行输出。foreach 准备第二次循环,开始第二次循环之前,它向 for 循环又请求了一次。for 循环于是又执行了一次,将生成的时间戳告诉 foreachforeach 拿到第二个值,并且输出。由于 foreach 中 sleep(1) ,所以, for 循环延迟了1秒生成当前时间所以,整个代码执行中,始终只有一个记录值参与循环,内存中也只有一条信息。无论开始传入的 $number 有多大,由于并不会立即生成所有结果集,所以内存始终是一条循环的值。生成器yield关键字不是返回值,他的专业术语叫产出值,只是生成一个值
2022年03月06日
193 阅读
0 评论
0 点赞
2022-03-06
PHP函数eval:一句话木马
前景1.在一个系统文件上传逻辑处理不严谨时2.php危险函数未禁用我是谁含义: eval — 把字符串作为PHP代码执行警告 函数eval()语言结构是 非常危险的,因为它允许执行任意 PHP 代码。它这样用是很危险的。如果您仔细的确认过,除了使用此结构以外 别无方法,请多加注意, 不要允许传入任何由用户 提供的、未经完整验证过的数据文件上传漏洞首先这里我用docker搭建了一个简单的bWAPP 实验环境文件上传漏洞是什么?关键词:绕过 文件上传(File Upload)是大部分应用都具备的功能, 例如用户上传附件、改头像、分享图片等 文件上传漏洞是开发者没有做充足验证(包括前端、后端)的情况下,允许用户上传恶意文件,这里上传的文件可以是木马、病毒、恶意脚本或者webshell等这里我编写了一个php文件并上传到了这个实验环境<?php @eval($_POST['hack']); ?>这里通过点击我们轻松访问到了上传的文件,并发现后端并没有去检测处理这个文件这个时候我们就可以通过curl去访问这个文件,由于之前写入的是POST请求,所以我们这里入参也是通过POST的形式get_current_user() 函数返回当前 PHP 脚本所有者名称。getcwd() 函数取得当前工作目录{message type="info" content="所以,在渗透过程中,如果系统逻辑性不是很严谨,我们可以通过这种方式来进行网络渗透,获取对方数据信息。当然,在我们的日常开发中,也是需要规避此类风险的。"/}
2022年03月06日
277 阅读
0 评论
1 点赞
1
...
5
6
7
...
9