第一部分 概念&原理
一、base64是什么
用64个可打印字符来表示二进制数据的方法。【编码后的字符长度不是32位或64位,而是4的倍数,今天还想当然的以为是32位】
Base64【维基百科中文】
继续阅读
一、问题描述
阅读一个新系统代码,调试打印方法返回结果,是一个数组,用json_encode编码后,写到日志文件中,写入的是空字符串,打印数组的长度是6
也是活久见,用PHP这么多年,第一次遇到这类问题
继续阅读
注:本文描述的调用方和被调用方都是同一家公司内部。
一、背景
作为服务端研发,我们经常需要去调用公司内部其他部门提供的服务,发起HTTP请求调用API,印象中被调用的API默认都是http协议,也从来没有在这个协议上出现过任何问题,今天却遇到了问题,最后查名跟协议有关。
继续阅读
最近在整理电脑,发现备忘录中记了一笔关于curl timeout的问题,回想当时问题出现的场景,难得一见的问题,记录下来希望能帮助到大家。
一、问题描述
服务端对服务端API调用,使用PHP curl方法通过HTTP的方式调用API接口,压测的时候发现调用API出现大量错误”curl server is error: Connection time-out 错误码28″
我是API的提供者,通过traceid分析,我发现异常的请求根本没有到达我的服务,但是调用方拉着我不放,于是帮忙排查,也知道了问题的原因。
继续阅读
优化代码的时候,需要增加这么一个逻辑,先从MC中取,取不到从Redis中取。通过Cron来更新MC和Redis中的内容。
简单看了下代码库中有封装好的方法,大致逻辑如下。
public static function set($key, $param, $value, $is_long = true) { $mc = Comm_Mc::init(); $mc->setData($key, $param, $value); $redis = Comm_Redis::init($is_long, true); $redis_key = self::$prefix . $key . '_' . implode('_', $param); $redis->set($redis_key, $value); }
一、for循环对象长度两种写法
最近看到很多代码,各种语言,在写for循环的时候并没有把长度提取出来,而是每次遍历的时候进行计算。
$str = 'bye 2019, hi 2020!'; for ($i = 0; $i < strlen($str); $i++) { // do something }
这种写法在初入行的时候,总是被教育性能低,要把长度提取出来。这个在诸多代码优化中总是排名榜首。
$str = 'bye 2019, hi 2020!'; $len = strlen($str); for ($i = 0; $i < $len; $i++) { // do something }
之前在大脑中空想,认为确实应该提取出来,省的每次遍历调用函数。最近正好有空,测试了以下,跟想象的差距很大。两种写法在数据量级小(小于10万)的时候,差异并不大。
继续阅读
在CSDN上看到一个这个帖子PHP数组怎么定义长度,引发了一些思考。
关于sprintf函数,官网说失败的时候会返回false。一直没遇到了,原来占位符比参数多就会返回false。
php -r 'var_dump(sprintf("%s|%s", 11, 22));' string(5) "11|22" MacBook-Pro-6:~ chuanbo7$ php -r 'var_dump(sprintf("%s|%s", 11));' PHP Warning: sprintf(): Too few arguments in Command line code on line 1 Warning: sprintf(): Too few arguments in Command line code on line 1 bool(false) MacBook-Pro-6:~ chuanbo7$ php -r 'var_dump(sprintf("%s|%s", 11, 22, 33));' string(5) "11|22"
一个线上老项目导出数据功能出现bug, 采用PHPExcel导出excel文件打开后一半的数据不完整,并且打开的时候Excel提示”发现不可读取的内容”。
一、尝试解决
0、尝试解决一
看起来是内容有问题,导出的时候把数据打印在页面上,发现中文乱码。用之前及其熟悉解决中文乱码问题的2中方法快速测试发现无果。
# 方法一、设置编码 header("Content-type:text/html;charset=utf-8"); # 方法二、加BOM头 $bom = "\xEF\xBB\xBF"; $content .= $bom;