分类目录归档: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);
}

继续阅读

PHPer面试攻略

第零部分 技术路上的感悟

0、知识点多而杂(头疼),有些需要深入理解原理,有些需要记忆。

1、对一些人来说,技术不是最好的路,技术不是最坏的路,技术是唯一的路。持续的往前走,不断的学,反反复复,复复反反。

2、有些语音离数据结构和算法更近,比如Java中的很多Hash结构是通过红黑树实现的。这样的更容易有亲近感。深刻的记得,工作第二年的时候,听技术经理讨论红黑树,就跟一个初中生听别人讨论高等数学一样。

3、面试的时候,知识结构不全面的人,容易顾此失彼,发挥会不稳定,就会体现所谓的运气。选择少的人,容易患得患失,好不容易获得的一个offer, 出现了一一些波折,就会夙兴夜寐的感叹。

4、以前很天真,想着在一家公司工作3年后,换一份工作,期间休息2个月(不是工作最重要,是钱最重要,生而为人不应该只有工作)。工作6年了,还未实现。尽力往这个方向靠。

5、对于作者,摔一跤摔得在重,也是摔在生活的垫子上,都是素材;对于程序员,MacTalk说编程语言就像是青龙偃月刀之于关羽,花再多的时间也在所不惜。通俗一点说就是,每一步都算。

围绕LNMP展开

第一部分 PHP

0、变量类型, PHP5和PHP7的区别。《PHP7和PHP5区别》《PHP生命周期5个阶段
1、数组底层。《PHP数组底层实现
2、魔术方法。《PHP魔术方法笔记
3、GC 《GC及PHP GC学习笔记
4、框架加载流程和原理
单入口、ORM
Yaf加载机制调研
继续阅读

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"

继续阅读