收集PHP中的坑

技术库 小李 955浏览

1,PHP7中以下代码出现Uncaught Error: Cannot use string offset as an array

$children = '';
 foreach ($category as $cid => $cate) {
 $children[$cate['parentid']][] = $cate;
 }

原因是$children声明了字符型,下面以数据操作出错,声明为数组即可。

 

2, php -m命令看不到新安装的php扩展,phpinfo()里面有

这种情况一般是因为php-fpm模式与cli模式的配置文件不一致,使用命令 php -i | grep Loaded\ Configuration\ File 可以看出在cli模式下没有找到配置文件php.ini:

解决办法:通过 which php 命令查看php安装位置:

使用 strace 命令打印log:strace /usr/local/bin/php -i 2>/phplog.log

在log文件中搜索关键字php.ini,发现cli模式到这个目录下去找php.ini文件,然而这个目录下没有php.ini:

需要做的是,把php.ini文件复制到这个目录下一份:cp /etc/php.ini /usr/local/bin/php.ini

3, PHP7.4报错getimagesize(): SSL operation failed with code 1问题

{“status”:400,”msg”:”生成图片时,系统错误”,”data”:{“line”:470,”message”:”getimagesize(): SSL operation failed with code 1. OpenSSL Error messages:\nerror:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed”}}

先下载cacert.pem证书,https://curl.se/ca/cacert.pem,下载完后我直接上传到了/www/server/php目录下

找到对应的php版本的php.ini文件

将openssl.cafile其路径替换为openssl.cafile=/etc/pki/tls/certs/cacert.pem也就是你刚把cacert.pem证书上传的路径

最后重启php服务即可

4,解决strtotime增加减少一个月日期不准的问题

var_dump(date(“Y-m-d”, strtotime(“2017-06-31”)));

//输出2017-07-01

解决办法:

var_dump(date(“Y-m-d”, strtotime(“last day of -1 month”, strtotime(“2017-03-31”))));

//输出2017-02-28

var_dump(date(“Y-m-d”, strtotime(“first day of +1 month”, strtotime(“2017-08-31”))));

//输出2017-09-01

var_dump(date(“Y-m-d”, strtotime(“first day of next month”, strtotime(“2017-01-31”))));

//输出2017-02-01

var_dump(date(“Y-m-d”, strtotime(“last day of last month”, strtotime(“2017-03-31”))));

//输出2017-02-28

转载请注明:清韵逸-博客生活分享 » 收集PHP中的坑