首页
直播
美图
视频
更多
统计
推荐
电子书站
免费视频站
好书推荐
Search
1
yii2框架融合workman 消息推送socketIO 插件
246 阅读
2
模板 源码 下载地址 集合
210 阅读
3
wordpress 插件 (主题)在线安装失败 解决办法探索
152 阅读
4
PHP使用json_encode()处理数组时,不转义 中文和 反斜线 等字符串
146 阅读
5
mysql 精准匹配时;字符串字段不区分大小写解决办法
127 阅读
我的博客
错误记录
登录
Search
标签搜索
php
mysql
wordpress
nginx
mysql安全
linux
typecho
redis
index.php
多继承
trait
微信公众号
微信
图片
文字
图文
用户权限
navicat
mysql用户权限
弱类型语言
周周
累计撰写
28
篇文章
累计收到
2
条评论
首页
栏目
我的博客
错误记录
页面
直播
美图
视频
统计
推荐
电子书站
免费视频站
好书推荐
搜索到
28
篇与
的结果
2024-11-05
Yii2 模型Model的one() 方法查询的坑
前提:我们在使用脚本处理大量数据的时候,会使用模型获取一条数据表数据!一条条处理数据。方法一:使用模型自带查询方法$info = KnowledgeAttachData::findOne(['es_status' => 0]) ; 方法二:查询一条数据$info = KnowledgeAttachData::find()->where(['es_status' => 0])->select(['id','kid', 'vector','doc_type','attach_id','tag_ids','author','logo','posttime','question','answer','create_time','update_time','img_url']) ->orderBy($order)->asArray()->one() ;方法三:$info = KnowledgeAttachData::find()->where(['es_status' => 0]) ->select(['id','kid','vector','doc_type','attach_id','tag_ids','author','logo','posttime','question','answer','create_time','update_time','img_url']) ->orderBy($order)->limit(1)->asArray()->one() ;脚本代码:public function actionSynEsData($type = 1){ ini_set('memory_limit', -1); // 增加内存限制 // 判断进程是否已经在执行 $task = "attach/syn-es-data $type"; $task_list = shell_exec("ps aux | grep '{$task}' | grep -vE 'grep|/bin/sh'"); $task_list = explode("\n", $task_list); $task_list = array_filter($task_list); if (count($task_list) > 1) { echo "任务已在执行中" . PHP_EOL; return; } $es1 = new KnowledgeEs(); while (true){ echo date('Y-m-d H:i:s').' start '.PHP_EOL; #$info = (new KnowledgeAttachData())->findOneData(['es_status' => 0],['id','kid', 'vector','doc_type','attach_id','tag_ids','author','logo','posttime','question','answer','create_time','update_time','img_url']) ; // $test = KnowledgeAttachData::find()->asArray()->one(); // var_dump( $test); die(); #$sql = KnowledgeAttachData::find()->where(['es_status' => 0])->select(['id','kid','vector','doc_type','attach_id','tag_ids','author','logo','posttime','question','answer','create_time','update_time','img_url'])->limit(1)->createCommand()->getRawSql(); // var_dump($sql); die(); switch ($type){ case 1: $order = 'id asc' ; break ; default: $order = 'id desc' ; } $info = KnowledgeAttachData::find()->where(['es_status' => 0])->select(['id','kid', 'vector','doc_type','attach_id','tag_ids','author','logo','posttime','question','answer','create_time','update_time','img_url'])->orderBy($order)->limit(1)->asArray()->one() ;错误:查询数量体(上几十万数据量)很大时,$info 获取失败,脚本会被 killed;采用第一个方法、第二个方法 。都会触发killed原因:如果没有 limit(1),数据库会扫描所有符合 where 条件的数据行,然后再返回结果,再由 PHP 的 ->one() 去提取一条数据。因此,limit(1) 会显著减少数据库的扫描工作。解决办法:综上所说,采用第三个方法,加上 limit(1) 可以将“限制数据量”的工作交给数据库而不是 PHP,提高效率。
2024年11月05日
4 阅读
0 评论
0 点赞
2024-11-05
苹果cms 的生成xml文件总是报错
xml文件报错:This page contains the following errors: error on line 1 at column 6: XML declaration allowed only at the start of the document Below is a rendering of the page up to the first error.解决办法:简而言之,你应该:ob_clean()//清理(擦除)输出缓冲区 print($xml->asXML());解释:如果任何包含的文件打印新行,您将得到第2行第6列出错:XML声明仅允许在文档的开头这可能是因为在某些文件中<?php标签在空行后开始。因此,与其搜索导致错误的文件,不如简单地清理输出缓冲区。参考:https://stackoverflow.com/questions/21261627/error-on-line-1-at-column-6-xml-declaration-allowed-only-at-the-start-of-the-do
2024年11月05日
3 阅读
0 评论
0 点赞
2023-12-06
一条sql 计算数据库表状态占比
一条sql,数据表状态占比,CONCAT,FORMAT,SUM,mysql,MYSQL
2023年12月06日
20 阅读
0 评论
0 点赞
2023-12-05
写个shell 脚本 每天定时清理某些服务器文件
要求:想删除 path/sppjk.com/runtime/, path/fun.sppjk.com/runtime/,path/fans.sppjk.com/runtime/* 文件第一种写法: #!/bin/bash # 清理指定目录下的文件 cleanup_directory() { directory=$1 echo "Cleaning up $directory" rm -rf $directory/* } # 清理每个目录 cleanup_directory "path/www.sppjk.com/runtime" cleanup_directory "path/fun.sppjk.com/runtime" cleanup_directory "path/fans.sppjk.com/runtime" echo "Cleanup complete" 第二种写法:#!/bin/bash # 清理指定目录下的文件 cleanup_directory() { directory=$1 echo "Cleaning up $directory" #rm -f $directory/* find $directory -type f -delete } # 清理每个目录 cleanup_directory "path/www.sppjk.com/runtime/cache" cleanup_directory "path/www.abclsp.com/runtime/cache" cleanup_directory "path/lj.sppjk.com/runtime/cache" cleanup_directory "path/cl.sppjk.com/runtime/cache" cleanup_directory "path/lb.sppjk.com/runtime/cache" cleanup_directory "path/sm.sppjk.com/runtime/cache" echo "Cleanup complete"
2023年12月05日
15 阅读
0 评论
0 点赞
2023-09-25
如何让你的网站变成灰色的
如何让你的网站变成灰色的,网站变成灰色
2023年09月25日
71 阅读
0 评论
0 点赞
2022-08-09
laravels 的websocket 服务问题记录
前提条件: websocket服务器 采用的框架的事laravels框架, 利用swoole插件的tcp协议提供websocket推送服务 ; 为前端 和 python之间创建沟通的桥梁。 服务端 : PHP + swoole + redis + mysql 客户端 : python 、前端 出现过问题记录: 1.服务端 无故宕机,websocket服务器不可使用,日志文件没有明确的错误日志写入 ; 原因以及解决办法:服务器IP被更改,没有及时的添加redis 和 mysql 的白名单,导致redis和mysql连接出错,设置白名单的之后恢复正常。(低级错误)。 2.服务器端日志记录redis连接超时的日志信息; 原因以及解决办法:初步原因没有利用redis连接池,只是普通创建redis连接对象;建立redis连接池,从连接池中获取redis连接对象,连接池每个框架配置不同,原理都相同, 3.WARNING swManager_check_exit_status: worker#1 abnormal exit, status=0, signal=11 swoole 日志提示; 原因以及解决办法: 程序导致了swoole触发内部错误,三种方案; 方案一:如果比较牛逼调试底层,修改错误; 方案二:将自己错误提交给swoole团队或者咨询swoole团队 怎么处理;swoole官方链接 ; 方案三:升级swoole版本,可能是swoole低版本遗留的bug被你触发,咨询他们估计也是让你升级版本。目前我们处理的方式是升级了swoole版本,升级后,问题没有在出现过。 4.交互之间的问题,譬如我和python端交互,python发送消息我这边收不到(也不是完全收不到,运行一段时间后,python发送的消息无法接口)。 原因以及解决办法:这个问题就比较难搞,因为python端说我发成功了,你收不到也没有回复我,就是你服务端的问题。我们只能查找原因了。这类问题不能归咎于一端问题。需要双方配合检查 (1)、将日志文件写详细(一个链接从创建到关闭的整个流程日志文件要详细记录),什么时间段出现问题与异常 全部记录出来,这样便于你发现问题,对于这个问题,只能拿证据来说明事情。 (2)、swoole每个进程的缓存区的配置的设置,这个根据你项目实际运行情况,调整大小。因为如果缓存区满了也可能导致消息无法及时处理,出现接受不到假象。但出日志上无法体现这个现象官方链接 ; (3)、websocket 连接一定需要加ping功能 和 失败重连的功能。因为很多原因都能导致websocket通讯断开,重连的机制 能保证客户端的稳定性(客户端)5.在websocket连接代码中,不能使用sleep() 等 函数 ,发生代码程序阻塞,影响代码效率,可以利用异步任务的方式 来实现相同的操作
2022年08月09日
102 阅读
0 评论
0 点赞
2022-07-28
php+nginx 服务器项目接口出现大量的504,502状态错误 (某种原因)
php+nginx 服务器项目接口出现大量的504,502状态错误 (某种原因)
2022年07月28日
104 阅读
0 评论
0 点赞
2022-02-28
linux crond 的sendemail 进程导致内置模式消耗大多内存的解决办法
问题: linux crond 的运行脚本 导致 sendemail 的进程导致内置模式消耗大多cpu 如下图图片: 原因: crond在执行脚本时会将脚本输出信息以邮件的形式发送给系统用户,所以必然要调用sendmail,而sendmail又会调用postdrop发送邮件,但是如果系统的postfix服务没有正常运行,那么邮件就会发送不成功,造成sendmail、postdrop、crond进程就无法正常退出,形成大量的僵尸进程解决办法 :1、将 crond 服务的 MAILTO="",那就不发任何邮件。vim /etc/crondtab图片: vim /etc/cron.d/0hourly 图片: crontab -e 在文件最前的 MAILTO=""2、crontab -e 配置执行脚本的时候 设置不接受这样的邮件 在 脚本 加上 > /dev/null 2>&1 当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如:20 03 * . /etc/profile;/bin/sh /var/www/runoob/test.sh > /dev/null 2>&1配置后的执行效果 :sy 占用的cpu 的资源明显下降图片:
2022年02月28日
86 阅读
0 评论
1 点赞
2022-02-21
mysql 精准匹配时;字符串字段不区分大小写解决办法
问题: 在使用字符串字段时作为查询条件 进行精准匹配,发现字符串不区分大小写。 如下 sql # 结果1 SELECT id,`code` FROM `yh_exchange_code` where code = 'tfUHfk' ; # 结果2 SELECT id,`code` FROM `yh_exchange_code` where code = 'TFUHFK' ; 会发现两个查询语句 得到结果都是一条数据 原因: 原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf8_general_ci”,这个值表示是不区分大小写的。现将解决方法记录如下:解决办法: 1.设置“COLLATE”属性值为“utf8_bin”或者“utf8_gerneral_cs”,utf8_bin表示二进制比较,同时也支持区分大小写;在Mysql5.6.10版本中,不支持utf8_genral_cs; 2.在创建表的时候,指定表字段COLLATE 为utf8_bin或者utf8_general_cs(注意版本),如: alter table `yh_exchange_code` modify column code varchar(128) COLLATE utf8_bin ; 3.修改字段为BINARY: alter table `yh_exchange_code` modify column code varchar(128) BINARY; 4.查询语句字段前面加BINARY: 两种写法都可以1、第一种 SELECT id,`code` FROM `yh_exchange_code` where BINARY code = 'TFUHFK' ; 2、第二种 SELECT id,`code` FROM `yh_exchange_code` where code = BINARY 'tfUHfk' ; 结果
2022年02月21日
127 阅读
0 评论
0 点赞
2022-01-21
如何將http网站免费升级成https协议||如何將http网站免费升级成https签证?
如何將http网站免费升级成https协议 使用encrypt 生成 签名。HTTPS的好处还有很多,但仅此这一条,就够我们花心思去升级我们的博客系统了。 了解Let's Encrypt Let's Encrypt 就是一个 证书。如果要启用HTTPS,我们就需要从授权机构(以下简称CA) 处获取一个证书, 而从 Let's Encrypt ,我们可以获得网站域名的免费的证书。Certbot 简介 Certbot 是Let's Encrypt官方推荐的获取证书的客户端,可以帮我们 自动 获取免费的Let's Encrypt 证书。 Certbot 是支持所有 Unix 内核的操作系统的,本文的例子是基于CentOS 8来讲解的。 获取免费证书1、 安装Certbot客户端 centos 采用yum 安装 , 简单快捷 。 你可以采用其他模式安装 。 yum install certbot 2、使用命令为域名生成签证 ; 生成https签证:certbot certonly --webroot -w /your_local_dir/wwwroot/yii2/frontend/web/ -d wechat.abclsp.com 将https签证生成到制定文件夹中 --config-dir 参数certbot certonly --webroot -w /your_local_dir/wwwroot/yii2/frontend/web/ -d wechat.abclsp.com --config-dir /etc/nginx/conf.d/certss/注意: your_local_dir : 是你的服务地址,请注意项目路径。说明:/your_local_dir/wwwroot/yii2/frontend/web/ : 网站的根目录; wechat.abclsp.com : 网站域名 --config-dir /etc/nginx/conf.d/certss/ : http签证存储的地方错误样例:certbot certonly --webroot -w /your_local_dir/wwwroot/yii2/ -d wechat.abclsp.com --config-dir /etc/nginx/conf.d/certss/结果如图: 错误的地方就是 文件夹路径不是网站的根目录, 成功案例:certbot certonly --webroot -w /your_local_dir/wwwroot/yii2/frontend/web/ -d wechat.abclsp.com --config-dir /etc/nginx/conf.d/certss/结果如图: certbot提供很多的参数可以用,可参考这里 certbot 命令地址 我们有其他例如nginx的服务,它占用了443端口,我们就要先停止这些服务,在生成证书完毕后,我们再启用这些服务。certbot certonly --standalone -d example.com -d www.example.com 至此,我们的第一证书生成已完成。下一步是配置我们的Web服务器并启用HTTPS。4 Nginx 配置启用 HTTPS 我的配置是使用的是Nginx 服务器来转发请求,这里贴一下我的Nginx配置。server { listen 80; server_name wechat.abclsp.com; rewrite ^(.*) https://wechat.abclsp.com$1 permanent; } server { listen 443; server_name wechat.abclsp.com; access_log /your_local_dir/wwwlogs/wechat_access_nginx.log combined; error_log /your_local_dir/wwwlogs/error.log; root /your_local_dir/wwwroot/yii2/frontend/web; index index.html index.htm index.php; ssl_certificate /etc/nginx/conf.d/certss/live/wechat.abclsp.com/fullchain.pem; ssl_certificate_key /etc/nginx/conf.d/certss/live/wechat.abclsp.com/privkey.pem; #error_page 404 /404.html; #error_page 502 /502.html; location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } location ~ [^/]\.php(/|$) { #fastcgi_pass remote_php_ip:9000; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; #增加这一句 fastcgi_param PATH_INFO $fastcgi_path_info; #增加这一句 include fastcgi.conf; } include maccms.conf; location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ { expires 30d; access_log off; } location ~ .*\.(js|css)?$ { expires 7d; access_log off; } location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md) { deny all; } } 配置主要是监听 443 端口和启用 SSL,并配置了 SSL 的证书路径(公钥,私钥的路径),通过这些配置,我们就可以成功启用Https了。 你打开网站的时候就可以看到标有 安全 的字样。比如:5 自动更新 SSL 证书 配置完这些后,我们的工作尚未完成。 Let's Encrypt 提供的证书只有90天的有效期,我们必须在这些证书过期之前重新获得它们。有什么办法呢?certbot 给我们提供了一个很方便的命令,那就是certbot renew # 使用【默认配置目录】的更新命令 certbot renew --config-dir /etc/nginx/conf.d/certs # 使用【自定义配置目录】的更新命令 使用此命令,他将自动检查系统中的证书并自动更新它们。注意: 更新完成后需要重启Nginx:nginx -s reload。 我们可以运行这个命令测试一下certbot renew --dry-run如果运行的时候出现了这个错误: Attempting to renew cert from /etc/letsencrypt/renewal/api.diamondfsd.com.conf produced an unexpected error: At least one of the required ports is already taken.. Skipping. 这是因为生成证书的时候使用的是 --standalone 模式。 这个模式在验证域名时,此模式需要启用端口443。此错误意味着要启用的端口已被占用。 这时候必须先关掉nginx,运行以下命令:nginx -s stop 运行这个命令,没有报错的话,也就是所有的证书都刷新成功。证书是90天才过期,我们只需要在过期之前执行更新操作就可以了。 当然,这种不用我们每次去更新,我们容易忘记的,可以用linux的定时任务来完成。用 crontab做一个定时任务就可以了 写上 cron 计划:编写如下任务详情15 2 * */2 * certbot renew --pre-hook "nginx -s stop" --post-hook "nginx -s start" # standalone模式 15 2 * */2 * certbot renew --post-hook "nginx -s reload" # 非standalone模式 命令的意思就是:每隔 两个月的 凌晨 2:15 执行更新操作。 --pre-hook 表示执行更新操作之前要做的事情。 --standalone模式的证书需要停止 nginx 服务,解除端口占用。 --post-hook 表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务的启用 最后我们用 crontab -e 打开 linux 定时任务添加15 2 * */2 * certbot renew --pre-hook "nginx -s stop" --post-hook "nginx -s start" # standalone模式 15 2 * */2 * certbot renew --post-hook "nginx -s reload" 至此,整个网站升级到HTTPS就完成了。6 删除证书 删除所有证书:$ sudo certbot delete 删除指定证书:$ sudo certbot delete --cert-name example.com 删除指定目录下的指定证书:$ certbot delete --cert-name example.com --config-dir /etc/nginx/conf.d/certs
2022年01月21日
84 阅读
0 评论
0 点赞
2022-01-08
yii2框架融合workman 消息推送socketIO 插件
yii2框架融合workerman的socketIo插件,编写自己的程序与逻辑,实现实时推送
2022年01月08日
246 阅读
0 评论
5 点赞
2022-01-08
弱类型语言的php对于 0 、"0"、"000" 、"00" 判断与处理问题
弱类型语言-php 对 0,"0","000","00" ,判断与处理问题,对变量类型的特殊判断处理逻辑
2022年01月08日
78 阅读
0 评论
1 点赞
1
2
3