Press "Enter" to skip to content

PHP数组的Hash冲突实例

上一篇文章, 我介绍了一个利用Hash冲突(碰撞)来对各种语言(包括,PHP, Java, Ruby等等)实施拒绝服务攻击的可能, 但是没有给出实例, 文章发出后, @Ferrari同学给出了一个另外一篇文章Supercolliding a PHP array, 文章中作者介绍了一种基于PHP的冲突实例, 以及带来的性能恶化对比. 我就借花献佛, 翻译给大家看看.

你知道不知道, 插入65536个经过构造的键值的元素到PHP数组, 会需要耗时30秒以上? 而一般的这个过程仅仅需要0.1秒..

Filed in PHP应用, 转载, 随笔
with 23 Comments

之前提到的PHP5.4一个注意点的update

在之前, 我曾经介绍过, 在PHP5.4中, PHP5.4中一个需要注意的变化(Chained string offsets) , 后续因为大多数人都表示这个变化很敏感, 容易成为坑.. 于是, 我们现在对此做了一些改进.

具体的改变是, 对于一个变量$a, 如果$a是一个字符串, 那么, 对于非数字型索引, 比如$a[“foo”], 在isset的时候将返回false, empty返回true, 但是为了兼容已有的代码, 当你获取这个值的时候, 还是会返回$a[0], 不过会额外抛出一个警告信息. 比如:

<?php
$a = "laruence";
var_dump($a["foo"]) ; //PHP Warning:  Illegal string offset 'foo'
//output string(1) "l"

var_dump(isset($a["foo"]));
//false

var_dump(empty($a["foo"]));
//true

Filed in PHP应用, PHP源码分析
with 11 Comments

关于PHP浮点数你应该知道的(All 'bogus' about the float in PHP)

PHP是一种弱类型语言, 这样的特性, 必然要求有无缝透明的隐式类型转换, PHP内部使用zval来保存任意类型的数值, zval的结构如下(5.2为例):

…….

今天的话题, 我们只关注其中的俩个成员, lval和dval, 我们要意识到, long lval是随着编译器, OS的字长不同而不定长的, 它有可能是32bits或者64bits, 而double dval由IEEE 754规定, 是定长的, 一定是64bits.

请记住这一点, 造就了PHP的一些代码的”非平台无关性”. 我们接下来的讨论, 除了特别指明, 都是假设long为64bits

Filed in PHP应用, PHP源码分析
with 24 Comments

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

微薄上有同学问我:

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

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

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

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

Filed in PHP应用
with 9 Comments

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

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

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

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

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

Filed in PHP应用
with 19 Comments

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

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

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

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

Filed in PHP应用, PHP源码分析
with 27 Comments

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

Filed in PHP应用, 转载, 随笔
with 14 Comments