【问题记录】日常项目小坑记录

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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 忽略不必要的文件和文件夹 在上传Unity项目到Git时,需要忽略不必要的文件和文件夹,例如Library、Temp、Builds等。这些文件和文件夹会频繁变化,但对项目本身并没有太大的作用,因此忽略它们可以减小Git仓库的大小,并提高上传、下载的速度。 2. 大文件上传限制 Git有一个默认的文件大小限制,通常为100MB。如果Unity项目中有超过100MB的文件,上传会失败。解决方法是使用Git LFS(Large File Storage)插件,将大文件存储在LFS服务器上,然后在Git仓库中只保存文件的指针。 3. 地址大小写敏感 Git在Windows系统中是大小写不敏感的,而Unity项目在Mac或Linux系统中是大小写敏感的。这意味着,如果在Windows系统中提交了一个文件名为“Assets/Scripts/PlayerController.cs”,在Mac或Linux系统中可能会出现“Assets/scripts/PlayerController.cs”的情况。为了避免这种情况,最好在所有系统中都使用相同的文件名。 4. 版本冲突 在多人协作开发时,可能会出现版本冲突的情况。例如,两个人同时修改了同一个文件,并提交到了Git仓库中。此时,Git无法自动合并两个版本,需要手动解决冲突。为了避免这种情况,可以使用分支管理功能,每个人在自己的分支中修改代码,然后再合并到主分支上。 5. 不要在Git仓库中保存敏感信息 Git仓库是公开的,不要在其中保存敏感信息,例如密码、密钥等。如果必须保存这些信息,可以使用Git的加密功能或者将它们保存在另外一个安全的地方。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值