首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
560
篇与
的结果
2023-06-21
php 常用函数
暂无简介
2023年06月21日
61 阅读
0 评论
0 点赞
2023-06-21
php 目录
简介PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP代码的标签数据类型String(字符串)Integer(整型)Float(浮点型)Boolean(布尔型)Array(数组)Object(对象)NULL(空值)Resource(资源类型)流程控制if,elseif ... else和switch语句循环语句PHP中的循环用于执行指定次数的相同代码块。PHP支持以下四种循环类型。for - 循环遍历一段代码指定的次数。while - 只要指定的条件为真,就循环遍历代码块。do ... while - 循环遍历一段代码至少一次,然后只要特殊条件为真,就重复循环。foreach - 循环遍历数组中每个元素的代码块。continue和break关键字结束循环。常用函数1.常用函数大全 2.常用函数 3.数组操作文件包含include()函数include()函数获取指定文件中的所有文本,并将其复制到使用include函数的文件中。如果加载文件时出现任何问题,则include()函数会生成警告(Warnning)但脚本将继续执行。require()函数require()函数获取指定文件中的所有文本,并将其复制到使用require函数的文件中。如果加载文件时出现任何问题,则require()函数会生成致命错误并停止执行脚本。因此,除了处理错误条件外,require()和include()没有区别。建议使用require()函数而不是include(),因为如果文件丢失或名称错误,脚本不应继续执行。文件I/O文件I/O编码规范正则表达式正则表达式错误和异常处理错误和异常处理错误调试错误调试魔术常量魔术常量命名空间(namespace)命名空间(namespace)面向对象面向对象语法糖语法糖
2023年06月21日
22 阅读
0 评论
0 点赞
2023-06-07
rsync+inotify实现服务器日志数据同步
非root账号准备创建账号并设置为非root用户授权目录useradd admin passwd admin #输入两次密码 chown -R admin /backup/服务端(源服务器所同步数据到的目标服务器)准备关闭防火墙和selinuxsystemctl disable --now firewalld setenforce 0 sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux getenforce安装yum -y install rsync rsync-daemon卸载rpm -qa | grep rsync yum erase rsync -y查看版本号rsync -version重启netstat -anput | grep :873 kill -9 1246297(删除进程号) systemctl restart rsyncd.service查看服务是否正常工作systemctl status rsyncd.service修改或创建两个配置文件vim /etc/rsyncd.confuid = admin ##进行备份的组,nobody为任意组 gid = admin ##端口 port = 873 ## 如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以root权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true.但是一般不需要,选择no或false use chroot = yes read only = on ##不允许列清单 list = no ##最大连接数 max connections = 4 ##pid文件的存放位置 ##pidfile = /var/run/rsyncd.pid ##锁文件的存放位置 lock file=/var/run/rsyncd.lock ##日志文件的存放位置 log file = /var/log/rsyncd.log ## motd file = /etc/rsyncd.motd ## //此文件定义完成后系统会自动创建 exclude = lost+found/ transfer logging = yes ##覆盖客户指定的IP超时时间,也就是说rsync服务器不会永远等待一个崩溃的客户端。 timeout = 900 ignore nonreadable = yes ## //同步时跳过没有权限的目录 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 ## //传输时不压缩的文件 ##哪些电脑可以访问rsync服务,这里可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开 ##hosts allow = 172.25.0.110 ##哪些电脑不可以访问rsync服务 ##hosts deny = 172.25.0.0/24 ##这里是认证模块名,即跟samba语法一样,是对外公布的名字 [backup] comment = this is module for backup ##这里是参与同步的目录 path = /backup/ ##可以忽略一些无关的IO错误 ignore errors ##允许可读可写 read only = no ##认证的用户名 auth users = admin ##密码文件存放地址 secrets file = /etc/rsyncd.passvim /etc/rsyncd.passadmin:123456修改配置文件权限chmod 600 /etc/rsync*创建同步目录,并设置目录权限mkdir /backup chmod 600 /backup启动rsync --daemon客户端(源服务器)准备关闭防火墙和selinuxsystemctl disable --now firewalld setenforce 0 getenforce安装(只需要安装,不要启动,不需要配置)yum install -y rsync创建认证密码文件echo '123456' > /etc/rsync.pass设置认证密码文件权限chmod 600 /etc/rsync.pass同步rsync -avz --port 873 --progress --delete /tmp/test admin@服务器ip::backup --password-file=/etc/rsync.passinotify准备查看服务器内核是否支持inotifyll /proc/sys/fs/inotify/安装inotify-tools工具yum -y install make gcc gcc-c++ yum -y install inotify-tools写同步脚本mkdir /scripts touch /scripts/inotify.sh chmod 755 /scripts/inotify.sh vim /scripts/inotify.sh inotify.sh 脚本如下 host=服务器的ip # 目标服务器的ip(备份服务器) src=/tmp/test # 在源服务器上所要监控的备份目录(此处可以自定义,但是要保证存在) des=backup # 自定义的模块名,需要与目标服务器上定义的同步名称一致 password=/etc/rsync.pass # 执行数据同步的密码文件 user=admin # 执行数据同步的用户名 inotifywait=/usr/bin/inotifywait $inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \ | while read files;do rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des echo "${files} was rsynced" >>/tmp/rsync.log 2>&1 done启动脚本nohup bash /scripts/inotify.sh &查看启动脚本ps -ef |grep inotify设置脚本开机自启动chmod +x /etc/rc.d/rc.local echo 'nohup /bin/bash /scripts/inotify.sh' >> /etc/rc.d/rc.localRsync服务备份常见报错信息配置项-a、--archive参数表示存档模式,保存所有的元数据,比如修改时间(modification time)、权限、所有者等,并且软链接也会同步过去。--append参数指定文件接着上次中断的地方,继续传输。--append-verify参数跟--append参数类似,但会对传输完成后的文件进行一次校验。如果校验失败,将重新发送整个文件。-b、--backup参数指定在删除或更新目标目录已经存在的文件时,将该文件更名后进行备份,默认行为是删除。更名规则是添加由--suffix参数指定的文件后缀名,默认是~。--backup-dir参数指定文件备份时存放的目录,比如--backup-dir=/path/to/backups。--bwlimit参数指定带宽限制,默认单位是 KB/s,比如--bwlimit=100。-c、--checksum参数改变rsync的校验方式。默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用这个参数以后,则通过判断文件内容的校验和,决定是否重新传输。--delete参数删除只存在于目标目录、不存在于源目标的文件,即保证目标目录是源目标的镜像。-e参数指定使用 SSH 协议传输数据。--exclude参数指定排除不进行同步的文件,比如--exclude="*.iso"。--exclude-from参数指定一个本地文件,里面是需要排除的文件模式,每个模式一行。--existing、--ignore-non-existing参数表示不同步目标目录中不存在的文件和目录。-h参数表示以人类可读的格式输出。-h、--help参数返回帮助信息。-i参数表示输出源目录与目标目录之间文件差异的详细情况。--ignore-existing参数表示只要该文件在目标目录中已经存在,就跳过去,不再同步这些文件。--include参数指定同步时要包括的文件,一般与--exclude结合使用。--link-dest参数指定增量备份的基准目录。-m参数指定不同步空目录。--max-size参数设置传输的最大文件的大小限制,比如不超过200KB(--max-size='200k')。--min-size参数设置传输的最小文件的大小限制,比如不小于10KB(--min-size=10k)。-n参数或--dry-run参数模拟将要执行的操作,而并不真的执行。配合-v参数使用,可以看到哪些内容会被同步过去。-P参数是--progress和--partial这两个参数的结合。--partial参数允许恢复中断的传输。不使用该参数时,rsync会删除传输到一半被打断的文件;使用该参数后,传输到一半的文件也会同步到目标目录,下次同步时再恢复中断的传输。一般需要与--append或--append-verify配合使用。--partial-dir参数指定将传输到一半的文件保存到一个临时目录,比如--partial-dir=.rsync-partial。一般需要与--append或--append-verify配合使用。--progress参数表示显示进展。-r参数表示递归,即包含子目录。--remove-source-files参数表示传输成功后,删除发送方的文件。--size-only参数表示只同步大小有变化的文件,不考虑文件修改时间的差异。--suffix参数指定文件名备份时,对文件名添加的后缀,默认是~。-u、--update参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。-v参数表示输出细节。-vv表示输出更详细的信息,-vvv表示输出最详细的信息。--version参数返回 rsync 的版本。-z参数指定同步时压缩数据。线上遇到的问题以及解决对比的文件太多,导致占用太多CPU,一个rsync进程占用服务器CPU的99%、100%,虽然服务器也很垃圾,但彻底废了,解决下这个问题优化思路如下,用了第二(排除不必要的文件)第三条(增量同步),以及限制同步频率(每小时同步一次)。要优化这个同步脚本以减少服务器CPU占用,您可以考虑以下几点:1.限制带宽和连接数:使用--bwlimit参数来限制rsync使用的带宽,以及--max-connections参数来限制rsync使用的最大连接数。这可以帮助减少对服务器资源的占用。2.排除不必要的文件:使用--exclude参数来排除不必要同步的文件或目录,这可以减少同步的数据量,从而减少服务器CPU占用。3.增量同步:考虑使用--checksum参数来进行增量同步,这将只传输发生变化的文件,而不是整个文件。4.调整压缩级别:根据需要调整压缩级别,较低的压缩级别可能会减少CPU占用。rsync -avzP --delete --timeout=100 --password-file=${password} --include='*/' --include="$(date +'%Y-%m-%d')*/**" --include="$(date -d 'yesterday' +'%Y-%m-%d')*/**" --include="$(date -d '2 days ago'm-%d')*/**" --exclude="*" --checksum $src $user@$host::$des--include="/$(date +'%Y-%m-%d')*/" --include="/$(date -d 'yesterday' +'%Y-%m-%d')/" --include="/$(date -d '2 days ago' +'%Y-%m-%d')/":包含当天、昨天和前天日期的文件夹。--exclude="*":排除其他日期的文件夹。--checksum:增量同步,使用文件的校验和进行比较,只传输发生变化的部分。--no-g:同步文件时不保留源文件的组(group)属性。--ignore-missing-args:当有多个rsync命令行的参数配置文件,并且其中一个文件缺少某些参数(某个文件夹缺少)时,使用--ignore-missing-args选项可以确保rsync继续执行而不中断。附完整的代码#!/bin/bash 脚本将会在检测到文件变化后同步推送日志文件 每同步一次需等待一段时间再同步。 host=xx.xx.xx.xx # 目标服务器的ip(备份服务器) src=/log/ # 在源服务器上所要监控的备份目录(此处可以自定义,但是要保证存在) des=xxxx # 自定义的模块名,需要与目标服务器上定义的同步名称一致 user=admin # 执行数据同步的用户名 inotifywait=/usr/bin/inotifywait # 设定同步时间间隔(秒) interval=3600 # 当前日期 current_date=$(date +'%Y-%m-%d') # 昨天的日期 yesterday_date=$(date -d 'yesterday' +'%Y-%m-%d') # 前天的日期 two_days_ago_date=$(date -d '2 days ago' +'%Y-%m-%d') $inotifywait -mrq --timefmt '[%Y%m%d %H:%M:%S]' --format '%T %w%f%e' -e modify,delete,create,attrib $src \ | while read files;do # 只对比同步当天、昨天和前天日期的文件夹 增量同步 rsync -azvP --port 9879 --timeout=600 --include='*/' --include="$current_date/**" --include="$yesterday_date/**" --include="$two_days_ago_date/**" --exclude='*' --no-g --checksum --ignore-missing-args $src $user@$host::$des echo "${files} was rsynced" >> /tmp/rsync.log 2>&1 # 等待一段时间后再同步 sleep $interval done上面的代码还有问题,发现当天文件夹推送可以之后就不行了,改成用定时任务吧。或者脚本改成while true do # 只对比同步当天、昨天和前天日期的文件夹 增量同步 rsync -azvP --port 9879 --timeout=600 --include='*/' --include="$current_date/**" --include="$yesterday_date/**" --include="$two_days_ago_date/**" --exclude='*' --no-g --checksum --ignore-missing-args $src $user@$host::$des echo "${files} was rsynced" >> /tmp/rsync.log 2>&1 # 等待一段时间后再同步 sleep $interval done补充https://blog.51cto.com/welcomeweb/2131116
2023年06月07日
30 阅读
0 评论
0 点赞
2023-06-05
php的错误机制
简单点说,是两大类四小级别错误类型1、编译错误编译时语法等错误,最容易解决。2、执行错误编译后,执行时阶段,根据报错级别来决定是否终止程序。其实还有一类不属于php的错误机制,是程序员认为的逻辑错误因为逻辑不清晰而产生的错误最难排查,执行成功,但最终的结果不是期望的。错误级别E_ERROR 致命错误,一旦发生就会中断程序的执行。 如连续两次使用相同名称来定义一个函数E_WRRING 警告错误,一旦发生并不会中断程序的执行。E_NOTICE 提示错误,一旦发生并不会中断程序的执行。E_PARSE 编译错误,一旦发生就会中断程序的执行。以上都可以说是系统错误,php还可以自定义错误自定义错误当您需要在运行脚本时的某个指定条件下自定义错误消息时,该函数很有用。如果指定了一个不合法的错误类型,该函数返回 FALSE,否则返回 TRUE。语法:trigger_error(error_message,error_types)参数:error_message必需。规定错误消息。长度限制为 1024 个字符。error_types可选。规定错误消息的错误类型。可能的错误类型:E_USER_ERROR - 用户生成的运行时的致命错误。不能恢复的错误。停止执行脚本。E_USER_WARNING - 用户生成的运行时的非致命警告。脚本没有停止执行。E_USER_NOTICE - 默认。用户生成的运行时的通知。脚本发现可能是一个错误,但也可能在脚本正常运行时发生。错误触发系统错误由php检查并触发自定义错误由函数触发错误机制好处是在记录错误,apache的log/error.log(trigger_error本质写入文件,fwrite())错误的控制可修改php.ini相关控制开关以及显示错误级别,具体百度了解
2023年06月05日
17 阅读
0 评论
0 点赞
2023-06-05
php的打印输出
输出语法1、echo ==== 输出标量数据,任何数据类型转为字符串输出2、print ==== 同上3、print_r ==== 可以输出数组,但输出bool类型需要转换,同上不转换输出为空4、var_dump ==== 打印调试,可以看到详细的信息 包括数据类型 和数据值5、sprintf ==== 格式化输出字符串 比如把字符串的数字保留两位数、改变成其他进制数字输出echo 与print 的三大区别第一、echo可以输出多个字符串(逗号分隔),print只能输出一个字符串第二、echo比print输出效率高第三、echo没有返回值,print有返回值,字符串输出成功返回true,否则返回false另外var_dump可以输出多条数据,不限制数据类型,用逗号分隔结束输出die与exit的区别1、都不是函数,是语言结构。 啥是语言结构?看这个吧 http://static.kancloud.cn/i281151/blog-php/2254532、名字不同,实现的功能完全相同,zend引擎解析出来都指向同一个函数。3、die主要用于不可预测的、意外的程序终止(非主观),比如数据库连接时使用;exit主要用于想要程序终止(主观),比如参数验证、权限验证不正确时使用。
2023年06月05日
20 阅读
0 评论
0 点赞
1
...
111
112