• 展开微博窗口
  • QQ:52619941
  • 微信:cnmemory
  • 展开分类目录
  • 还没有账号?

Memory

关于php的pctnl扩展小记

pcntl扩展在加载的时候,在初始化module的阶段会将pcntl_signal_dispatch方法作为tick事件发生时的触发函数,所以使用declare(ticks = 1)也能捕捉到信号量。

PHP源码剖析如下:


PHP_MINIT_FUNCTION(pcntl)
{
	php_register_signal_constants(INIT_FUNC_ARGS_PASSTHRU);
	php_pcntl_register_errno_constants(INIT_FUNC_ARGS_PASSTHRU);
	php_add_tick_function(pcntl_signal_dispatch TSRMLS_CC);

	return SUCCESS;
}

星期五

一道有趣的PHP题目

在网上看见一道题目,觉得挺有意思。


$arr = [1, 2, 3];
//第一次遍历
foreach($arr as &$val) {}
//第二次遍历
foreach($arr as $val) {}
//输出什么?
var_dump($arr);

最终的结果输出了:


array(3) 

PHP的对象和引用赋值

在PHP的手册上看到这么一句话

在php5 的对象编程经常提到的一个关键点是“默认情况下对象是通过引用传递的”。但其实这不是完全正确的。下面通过一些例子来说明。

php的引用是别名,就是两个不同的变量名字指向相同的内容。在php5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。 当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。

并且提供了这么一个例子


class A {
 public $foo = 1;
} 

$a = new A;
$b = 

Mac下PHP安装libevent扩展

首先通过brew安装libevent,否则在编译libevent的时候会出现错误。


brew install libevent

如果没有安装Homebrew可以通过在终端执行


ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null

进行安装Homebrew
接着我们直接使用pecl安装libevent


sudo pecl install libevent

编译完成后,在php.ini中加上


extension=libevent.so

在终端下输入命令,查看是否安装成功…

记一CI框架的$_POST编码问题

最近在做支付回调接口时,碰到一个编码问题,由于第三方支付平台异步通知post方式请求使用的是GBK编码,而我们项目服务端使用UTF-8编码开发,所以在做signature验证时,我们需要将post的数据进行编码转换

iconv("GBK//IGNORE", 'UTF-8', $_POST[$key]);

然而转换的结果竟然和原文并不一致,导致MD5后的签名和第三方通知过来的签名不匹配。于是决定脱离CI框架写一个简单的demo来获取第三方平台通知的数据内容是否正确,发现在原生php下,第三方平台post过来的数据是正常的,而在CI框架下,$_POST获取到数据的汉字编码字符却和原生PHP下$_POST获得的字符不一致。为了解决问题,尝试使用

$data = file_get_contents("php://input");

来获取原始数据,简单的将方法进行封装

function get_input_value() {
    static $content = null;
    

IO 多路复用是什么意思?

这些名词比较绕口,理解涵义就好。一个epoll场景:一个酒吧服务员(一个线程),前面趴了一群醉汉,突然一个吼一声“倒酒”(事件),你小跑过去给他倒一杯,然后随他去吧,突然又一个要倒酒,你又过去倒上,就这样一个服务员服务好多人,有时没人喝酒,服务员处于空闲状态,可以干点别的玩玩手机。至于epoll与select,poll的区别在于后两者的场景中醉汉不说话,你要挨个问要不要酒,没时间玩手机了。io多路复用大概就是指这几个醉汉共用一个服务员。

作者:匿名用户
链接:https://www.zhihu.com/question/32163005/answer/55687802
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

使用PHP模拟一个迭代器

其实在PHP中,数组已经很方便使用了,模拟迭代器只是为了自己学习玩玩。


class Super {
	protected $data;
	public function __get($param) {
		if (isset($this-$param)) {
			return $this-$param;
		}
	}
	public 

PHP中json_encode对中文的编码处理

很多时候我们在使用json_encode封装含有中文数据的时候,中文的编码总是会被编码为UNICODE
自从5.4之后,json_encode新增了一个JSON_UNESCAPED_UNICODE参数


echo json_encode("中文", JSON_UNESCAPED_UNICODE);

这样我们的汉字就不会被转换成Unicode码…

php模拟链表

<?php
class LinkTable {

//头节点
public $head = NULL;
//连接下一个节点
public $next = NULL;
//连接上一个节点
public $prev = NULL;
//用于存放节点数据

Post Meta Class,快速创建文章自定义栏目

众所周知,wordpress极其强大的功能之一就是可以为文章或页面创建自定义栏目以达到为不同文章或页面增加更多的可填写属性

诸如SimpleHome主题的文章自定义音乐栏目、天气栏目等,或者你也可以创建外链特色图像,通过填写图片url来调用文章的特征图像

这在wordpress主题的开发上具有很高的自由度,让人爱不释手。

但是通过传统的方法来创建自定义栏目极其的耗费时间以及增加代码的冗余

想起SimpleHome主题中所使用的Tax-meta-class(一个可以快速的为分类目录创建自定义内容的函数类),于是萌生了为自定义栏目也制作一个能够快速创建自定义内容的Class。

使用方法:

在functions.php文件中嵌入该文件可以达到快速创建文章自定义栏目的目的

由于时间有限,仅制作了以下三种类型的自定义栏目

  • 文本域模块
  • 下拉菜单模块
  • 复选框模块

当然,这三种已经能满足我们对文章或页面中创建自定义参数的需求。

效果如图:

post_meta

下载地址:http://pan.baidu.com/s/1eQQqAQY

如有任何疑问可以在下面评论哦!…