1、微信名称入库有时报错
原因:有的人微信名有图标
解决:1.base64转码后存入数据库
2.数据库格式转utf8mb4(这个没试过)
2、tp5输出html不能解析
原因:tp5对输出内容自动htmlspecialchars处理(配置文件可配置)
解决:htmlspecialchars_decode
3、tp5跨控制器调用报“类不存在”
原因:thinkphp5 两个控制器继承相同的类无法跨控制器调用
4、tp使用spl_autoload_register注意
使用spl_autoload_register注册后,使用完记得注销掉。不会报错,可能内部可能有个指针什么的,原因暂时不明
5、tp5使用extend下类的时候注意
demo1:
Loader::import(“ccLogin/cclogin”,EXTEND_PATH);
cclogin::check_login();
报错:
致命错误: Class ‘app\web\controller\cclogin’ not found
demo2:
Loader::import(“ccLogin/cclogin”,EXTEND_PATH);
\cclogin::check_login();
结果:
正确!!!
6、微信推送事件post的xml为空
要file_get_contents(‘php://input’)这样接收!!!
$_POST这样接收不了!!!
7、微信昵称入数据库的转码处理
//把用户输入的文本转义(主要针对特殊符号和emoji表情)
if(! function_exists('textEncode'))
{
function textEncode($str){
if(!is_string($str))return $str;
if(!$str || $str=='undefined')return '';
$text = json_encode($str); //暴露出unicode
$text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i",function($str){
return addslashes($str[0]);
},$text); //将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。
return json_decode($text);
}
}
//解码上面的转义
if(! function_exists('textDecode'))
{
function textDecode($str){
$text = json_encode($str); //暴露出unicode
$text = preg_replace_callback('/\\\\\\\\/i',function($str){
return '\\';
},$text); //将两条斜杠变成一条,其他不动
return json_decode($text);
}
}
8、tp5.1 vendor函数报错
原因:
5.1版本已经取消了vendor和import方法了 全部采用命名空间和自动加载机制。
非要使用就自己require呗 不推荐使用了 现如今还在使用没有命名空间的类就继续5.0吧 就该果断放弃的东西了
9、安装composer各种报命令不存在
什么composer命令不存在,php命令不存在,都是没有配系统环境变量。最坑的是网上说的都是改系统变量!!!还有用户变量要改!!!然后重启!!!
10、composer下载东西失败
换国内资源,国外链接被墙了
11、luckyadmin,setup3安装报错
install的common下用了mysql_error函数,改成mysqli_error
且加上连接对象作为参数
sqlCallBack增加多一个参数(链接对象)传进去给mysqli_error用
154行sqlCallBack传入参数中去掉$is_test
164 $per ---->
p
e
r
c
e
n
t
188
i
f
(
percent 188 if(
percent188if(return_info) ----> if(isset(KaTeX parse error: Expected 'EOF', got '&' at position 14: return_info) &̲& !empty(return_info) ){
数据插入失败,数据库开了严格模式插入值不能为空,关掉即可
12、curl 错误60
原因: curl 配置中开启了证书校验
解决此报错有2种处理方法
1、curl 关闭证书校验
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
2、php 配置中添加证书路径
curl.cainfo = D:\phpStudy\php\php-5.5.38\cacert.pem
如下
pem 文件下载
https://curl.haxx.se/ca/cacert.pem
13、tp5验证类正则错误
错误:‘label_id’ => ‘max:100|regex:[0-9|,]‘,
正确:‘label_id’ => [‘max’=>100,‘regex’=>’[0-9|,]’],
原因:| 符号冲突
14、上传文件错误
Php里面有两个配置会限制上传文件的大小,
一个是upload_max_filesize(文件上传最大值),
另一个是post_max_size (POST数据最大值),
超了post_max_size 会被直接拦截删除,post和file里面都不会有数据
15、php的curl是同步的,请求没回应前,下面的代码不会执行
16、微信H5支付常见问题汇总
https://www.cnblogs.com/dragondean/p/10220804.html
17、微信事件推送签名认证失败
排序的sort()函数要加第二个参数SORT_STRING,例:sort($tmpArr,SORT_STRING);
18、tp的vendor复制后不能用
注意tp版本,不同的tp版本对应不同的top-think系列的类库版本
19、tp5.1的_initialize不生效
_initialize是5.0的,5.1改了名少了个杠initialize
20、tp5.1的部分自带类报错Using $this when not in object context
tp5.1多了静态类代理机制,引用时use think\Request;改成use think\facade\Request;
而且还有一个facade的类,这个类简的来说可以让你自己写的非静态类当静态类用,不用new。(应该,未实测),具体看官方文档吧
21、tp5.1的控制器调用对应模型报Call to undefined method错误
tp5.1控制器会自动加载对应模型,但是用的时候又没有。用use去引入又说与控制器名字冲突。最后是用别名解决了。例子:use app\admin\model\User as Usermodel;。。。真特么奇葩
22、getenv(‘REMOTE_ADDR’)报错
这两个版本的有问题,解决:利用第二参数,默认false改true
之前研究接口安全的时候,这个ip可以改或者覆盖什么的,上面也说了这putenv可以改,这个由操作系统提供,不知道是不是准确点。反正加就对了…
23、sha256()报错不存在
hash(‘sha256’, $string )代替
24、class not found 的时候,有可能是bom头的原因
25、ThinkPHP5.1的extend目录无法自动加载 Class not found
ThinkPHP5.1是严格要求命名空间的,看类的命名空间是否正确,以及包里面的依赖。
命名空间例子:
目录:extend/testclass/testclass.php
命名空间:namespace \testclass\testclass
26、TP5 paginate分页带搜索参数
->paginate(20,false,array(‘query’=>$_GET));
27、nginx防盗链连自己都防了
原因是nginx版本的问题,不同版本语法不同,
公司服务器用的1.12,valid_referers none blocked
自己用的1.15,valid_referers ,没有none blocked
28、tp5.1跨模块调用控制器无法加载该模块的配置
粗略的改了一下助手函数controller函数就可以了
if (!function_exists('controller')) {
/**
* 实例化控制器 格式:[模块/]控制器
* @param string $name 资源地址
* @param string $layer 控制层名称
* @param bool $appendSuffix 是否添加类名后缀
* @return \think\Controller
*/
function controller($name, $layer = 'controller', $appendSuffix = false)
{
$spliteSymbol = strpos($name,'/')===false?'\\':'/';
$module = substr_replace($name,'',strpos($name,$spliteSymbol));
Container::get('app')->init($module);
return app()->controller($name, $layer, $appendSuffix);
}
}
29、缺失微软运行库或微软运行库版本不兼容(运行的软件需要更高级的运行库)
下载最新微软运行库
https://support.microsoft.com/zh-cn/help/2977003/the-latest-supported-visual-c-downloads
30、tp5.1软删除默认条件is null,但是用is null就会使索引失效
修改属性$defaultSoftDelete为0或‘’就行
31、git无法跟踪某些文件
如果不是.gitignore的原因的话,有可能那些文件是从别的仓库git下来的。删除.git也不行,我改了一下文件名然后改回来就可以了。
32、thinkphp5,数据库order函数使用函数报错:排序表达式错误
要用orderRaw。
33、thinkphp5,think\exception\ErrorException: Array and string offset access syntax with curly braces is deprecated in E:\yiwen\thinkphp\library\think\db\Query.php:568
错误指示位置使用了{}去获取数组,php7.4版本开始不再支持该语法,改为[]即可
34、docker启动失败,终端报错:Job for docker.service failed because the control process exited with error code. See “syste
mctl status docker.service” and “journalctl -xe” for details.
原因:docker进程已经启动。解决:kill掉进程。
附带一条调试语句:tail -100 /var/log/messages
查看linux 系统最后100条软件错误日志信息
35、一个关于php弱类型导致的坑
$test = '1.';
var_dump($test);
// 不靠谱 V
echo in_array($test, [1,2,3,4]) ? 1 : 2;
echo in_array($test, ['1','2','3','4']) ? 3 : 4;
echo $test == 1 ? 5 : 6;
echo $test == '1' ? 7 : 8;
// 靠谱 V
echo $test === 1 ? 'g' : 'h';
echo $test === '1' ? 'j' : 'k';
echo strcmp($test, 1) == 0 ? 'd' : 'f';
echo strcmp($test, '1') == 0 ? 'a' : 's';
die();
/*
运行结果返回:
string(2) "1."
1357hkfs
*/
36、在线阅读word文档
遇到一个在线阅读文档的需求,网海遨游寻找。
需要在服务器安装pdf2htmlEX这个东西,安装过程报错libfontforge需要大于2.0.0版本,yum源换了几个都是1.几版本的。
后来发现了一个微软的神器,https://view.officeapps.live.com/op/view.aspx?src=xxxxxxxxxx。
使用demo:https://view.officeapps.live.com/op/view.aspx?src=http://tuanlaw.12355.org.cn/uploads/username/15055896803/70685ef42277026a57e56e1bd04c808f.docx
但是只能在线读word,pdf不行。
37、layui:弹层如何在layer.prompt输入值为空时点击确定继续执行逻辑
网上一堆复制黏贴的不知道说啥真的是…
打开layui.js,红框那里随便弄个字符串,保存!提交!ok!
38、SQL多条件排序,获取上下条数据
背景:查询文章,自定义排序号sort_num升序,文章点击数click_num降序,文章ID降序。
先说思路,给每个排序项赋予权重,然后进行加减计算,算出所有排序项总权重。
假设,需要查询文章ID为10086,所属文章分类ID为123,通过计算得出这篇文章的所有排序项总权重为5201314。那么例子如下:
#文章表结构
CREATE TABLE `202311_jqrcq_article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cate_id` int(11) DEFAULT '0' COMMENT '分类ID',
`title` varchar(255) DEFAULT NULL COMMENT '标题',
`cover_img` varchar(255) DEFAULT NULL COMMENT '封面',
`content` text COMMENT '正文',
`sort_num` int(5) DEFAULT '999' COMMENT '小的在前',
`click_num` int(10) DEFAULT '0' COMMENT '文章点击数',
`add_date` varchar(30) DEFAULT '' COMMENT '实际文章发布时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `cateid_index` (`cate_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
# 当前文章
select * from artcile
where id = 10086
order by sort_num asc, click_num desc, id desc
# 上一篇
SELECT *,(sort_num * 100000000 + (-click_num * 10000) + (-id * 1)) --1、注意加减。2、注意排序项的值是否超过权重值,比如这里权重值是10000,文章ID就不能超过10000,否则就要加大权重值。
FROM `article`
where cate_id = 123
and (sort_num * 100000000 + (-click_num * 10000) + (-id * 1))
< 5201314 --注意大小于符号,这里上下篇相反
order by (sort_num * 100000000 + (-click_num * 10000) + (-id * 1)) desc --注意升降,这里上下篇相反
limit 1
# 下一篇
SELECT *,sort_num * 100000000 + (-click_num * 10000) + (-id * 1))
FROM `article`
where cate_id = 123
and (sort_num * 100000000 + (-click_num * 10000) + (-id * 1))
> 5201314 --注意大小于符号,这里上下篇相反
order by (sort_num * 100000000 + (-click_num * 10000) + (-id * 1)) asc --注意升降,这里上下篇相反
limit 1
39、Thinkphp5的nginx修改
使用工具创建的网站对应的nginx配置应该是这样的(或者也不一定是这样,反正找到这条带“php”的路由规则)
location ~.*\.php$
{
...
}
改为
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
40、html,iframe父子页面间的通信
用js原生自带的postMessage。
参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage
在iframe页面调用postMessage:
window.parent.postMessage("要向父页面发送的消息",'*');
在父页面监听message:
window.addEventListener('message',function(e){
console.log(e.data); // 这里打印出“要向父页面发送的消息”
});
41、微信支付V2版本文档
汇总页:https://pay.weixin.qq.com/wiki/doc/api/index.html
JSAPI支付页:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
42、zookeeper 启动失败,报错 audit is disabled
原因:zookeeper不知哪个版本开始的开发人员写bug,启动的过程中,zookeeper的审核日志是默认关闭,但是启动又必须打开…
处理:
真机处理:
conf文件夹下的zoo.cfg中加入这个配置:audit.enable=true
docker处理:
// docker volume create zookeeper_vol // 创建卷
docker run -d --name zookeeper-test // 运行容器,复制的时候记得把分行去掉
-p 2181:2181
--env ZOO_MY_ID=1
-e audit.enable=true // 加这行 !!!
-v zookeeper_vol:/data
-v zookeeper_vol:/datalog
-v zookeeper_vol:/logs
容器ID
如果之前已经启动过一次的话,还要删掉dataLogDir下的version-2文件夹中的log文件
参考:
https://blog.csdn.net/wuniangzhanyan/article/details/129277054
https://blog.csdn.net/u011702673/article/details/109963726
43、Mysql 根据经纬度计算距离
单位/米(注:仅适用于少量数据)
SELECT *,
st_distance_sphere(point(lng,lat),point(116.3424590000,40.0497810000)) as juli
FROM table ORDER BY juli ASC