msgbartop
PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
msgbarbottom

06 Dec 11 更简单的重现PHP Core的调用栈

以前, 我曾经介绍过如何通过PHP的Core文件获取信息:如何调试PHP的Core之获取基本信息, 对于调用参数这块, 当时介绍的获取方法比较复杂.

于是今天我为PHP 5.4的.gdbinit做了一个改进, 以后如果你遇到了PHP 5.4的core, 那么就可以简单的得到PHP 5.4发生Core时, 包括参数的函数调用栈的信息.

02 Dec 11 Yaf 2.1性能测试(Yaf 2.1 Benchmark)

Thanks to Ruilog agian for his work of second benchmark of Yaf 2.1.

Yaf 2.1 (github, manual) did a lot of work to improve performance and reduce memory usage, so let’s take a look at the result(Yaf 2.1重写了很多逻辑来提升性能, 并且降低内存使用率, 改进结果见测试对比)

18 Nov 11 GBK编码PHP脚本导致语法错误(Zend Multibyte)

微薄上有同学问我:

     GBK环境下如下php代码:<?php echo("洪仁玕");?> 会引发php的语法错误,如何解决?

这个是因为, 在GBK环境下, “玕”的编码是”0xab 0x5c, 所以, 又是一个’5c’引发的问题..

一般来说, 还是建议大家用unicode作为代码文件的字符集, 如果要使用GBK, 再主动转换下.

不过, 就问题说问题, 如果你的脚本非要GBK编码, 那怎么避免这个问题呢?

11 Nov 11 PHP5.4新特性-解引用实例化

在以前的PHP中, 我们并不能直接去操作一个对象实例化的结果:

<?php
(new Foo())->show();  //PHP Parse error:  syntax error, unexpected T_OBJECT_OPERATOR

我们只能, 把实例化结果先保存起来, 然后再调用:

$a = new Foo();
$a->show();

09 Nov 11 PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等.

另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们平时开发扩展, 修复PHP的bug的时候, 却对这一部分的知识需要有一个良好的理解. PHP开发组内的很多朋友也对这块不是很清楚, 所以我觉得有必要专门写一下.

一些基本的概念, 我就不赘述了, 因为看代码很容易能看懂, 我这里就主要介绍几个看代码没那么容易看懂的点, 为什么这么说呢, 呵呵, 我在写文章之前, 查找了下已有的资料, 已避免重复功, 其中看到了TIPI项目对这部分的描述, 发现其中错误很多. 所以, 我想这部分就是看代码也没那么容易看懂的点 :)

05 Nov 11 Yaf的性能对比测试

从Yaf诞生以来, 我就没把它与其他框架的性能对比测试放出来, 原因呢, 也很简单, 我懒, 没对比过(只是和原生的PHP做了简单的对比).

最近, 关注Yaf的人越来越多, 今天从访问来源发现了这个页面reddit.com, 继而发现了Eryx朋友, 做的一份性能对比测试, 我就借花谢佛, 转载了过来.

测试机器:

* Hardware

    CPU: Intel Core i5 750 (2.67GHz x4)
    RAM: 4GB

* Software
Debian 6.0.2 x86_64 (2.6.32-5-amd64)

apache 2.2.16
    mpm-prefork
    mod-php5

php 5.3.6
    php-apc 3.1.3p1

04 Nov 11 三元式(ternary)性能优化

PHP 5.4 由Arnaud 引入了一个对三元式的优化方案.

我们都知道PHP用写时复制来对变量复制做性能优化, 而在以前的三元式中, 却每次都会复制, 这在操作数是大数组的情况下, 会造成性能问题:

<?php
$a = range(1, 1000);
$i = 0;

$start = microtime(true);
while (++$i < 1000) {
    $b = isset($a)? $a : NULL;
}

var_dump(microtime(true) - $start);

19 Oct 11 Zend Signal in PHP 5.4

在PHP5.4中, 根据由Rasmus提交的RFC, 引入了一套新的信号处理机制, 目的是为了使得信号屏蔽机制可以应用到任何SAPI中, 并且提高在这个过程中的PHP性能.

新的机制, 叫做zend signal, 它的理念, 来自Yahoo的”延迟信号处理”(Yahoo signal deferring mechanism), 而后, facebook把这套理念加入了PHP中, 为了提升PHP+Apache 1.X下PHP调用ap_block/ap_unblock的性能.

在详细介绍之前, 我想还是先介绍下引入这个新机制的背景

10 Oct 11 让Json更懂中文(JSON_UNESCAPED_UNICODE)

我们知道, 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”\u***”的格式, 还会在一定程度上增加传输的数据量.

<?php
echo json_encode("中文");

//"\u4e2d\u6587"

这就让我们这些在天朝做开发的同学, 很是头疼, 有的时候还不得不自己写json_encode.

而在PHP5.4, 这个问题终于得以解决

10 Oct 11 二进制直接量(binary number format)

从PHP5.4开始, 我们可以直接在代码中书写二进制直接量了. 这个在定义一些标志位的时候, 尤为方便.

看下面的例子:

$bin  = 0b1101;
echo $bin;

//13

而在以前, 我们需要使用bin2dec来用字符串表示, 这个着实有些不爽.

Pages:  1 2 3 4 5 6 7 8 ...25 26 27