分类目录归档:PHP基础

服务端对服务端的HTTP请求最好不要用HTTPS协议

注:本文描述的调用方和被调用方都是同一家公司内部。

一、背景
作为服务端研发,我们经常需要去调用公司内部其他部门提供的服务,发起HTTP请求调用API,印象中被调用的API默认都是http协议,也从来没有在这个协议上出现过任何问题,今天却遇到了问题,最后查名跟协议有关。
继续阅读

PHP curl 提示Connection time-out错误笔记

最近在整理电脑,发现备忘录中记了一笔关于curl timeout的问题,回想当时问题出现的场景,难得一见的问题,记录下来希望能帮助到大家。

一、问题描述
服务端对服务端API调用,使用PHP curl方法通过HTTP的方式调用API接口,压测的时候发现调用API出现大量错误”curl server is error: Connection time-out 错误码28″

我是API的提供者,通过traceid分析,我发现异常的请求根本没有到达我的服务,但是调用方拉着我不放,于是帮忙排查,也知道了问题的原因。
继续阅读

存储PHP Array到Memcached和Redis中

优化代码的时候,需要增加这么一个逻辑,先从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循环对象长度两种写法

最近看到很多代码,各种语言,在写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万)的时候,差异并不大。
继续阅读

位运算符及PHP中位运算的应用笔记

一、逻辑运算符

正式说位运算符之前,先简单提一下逻辑运算符。分3个角度:
0、数学上
记得高中数学讨论复合命题的时候,使用过基本的逻辑运算符
“非”(¬)、”与”(∧)、”或”(∨)、”条件”(→)以及”双条件”(↔)

大学离散数学中讨论复合命题的时候,出现过异或逻辑符
p ⊕ q p 异或 q p、q 真值相同为假,相异为真
继续阅读

PHP sprintf函数返回false

关于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"

继续阅读

PHPExcel导出文件遇到Emoji导致数据丢失

一个线上老项目导出数据功能出现bug, 采用PHPExcel导出excel文件打开后一半的数据不完整,并且打开的时候Excel提示”发现不可读取的内容”。

一、尝试解决

0、尝试解决一
看起来是内容有问题,导出的时候把数据打印在页面上,发现中文乱码。用之前及其熟悉解决中文乱码问题的2中方法快速测试发现无果。

# 方法一、设置编码
header("Content-type:text/html;charset=utf-8");

# 方法二、加BOM头
$bom = "\xEF\xBB\xBF";
$content .= $bom;

继续阅读