Press "Enter" to skip to content

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的性能.
在详细介绍之前, 我想还是先介绍下引入这个新机制的背景

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

让Json更懂中文(JSON_UNESCAPED_UNICODE)

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

<?php
echo json_encode("中文");
//"\u4e2d\u6587"

这就让我们这些在天朝做开发的同学, 很是头疼, 有的时候还不得不自己写json_encode.
而在PHP5.4, 这个问题终于得以解决

Filed in PHP应用
with 44 Comments

函数类型提示(Callable typehint)

在PHP5.4的开发过程中, 有不少对typehint的提议, 我们也讨论过很多次, 完全加入对基本类型的typehint会引起很大的变动, 并且就我自己来看, 不利于PHP的灵活性.
不过, 对于callable类型的支持, 我还是支持的.
在以前, 我们如果希望一个函数接受一个回调函数作为参数, 那需要做很多额外的工作来检查是否是可调用的, 正确的回调函数.
而现在, 这个将会变得很简单, Zend Engine提供了一个新的typehint, 来帮助你完成这些检查工作:

<?php
   function foo(callable $callback) {
   }

Filed in PHP应用
with 6 Comments

上传进度支持(Upload progress in sessions)

文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的功能来实现. 或者使用PECL扩展uploadprogress来实现.
虽然说, 它们能很好的解决现在的问题, 但是也有很明显的不足:

  • 1. 他们都需要额外安装(我们并没有打算把APC加入PHP5.4)
  • 2. 它们都使用本地机制来存储这些信息, APC使用共享内存, 而uploadprogress使用文件系统(不考虑NFS), 这在多台前端机的时候会造成麻烦.

从PHP的角度来说, 最好的储存这些信息的地方应该是SESSION, 首先它是PHP原生支持的机制. 其次, 它可以被配置到存放到任何地方(支持多机共享).
正因为此, Arnaud Le Blanc提出了针对Session报告上传进度的RFC, 并且现在实现也已经包含在了PHP5.4的主干中.

Filed in PHP应用, 随笔
with 29 Comments

mysqlnd插件mysqlnd_ms的介绍

从PHP5.3开始, MySQL team专为PHP开发的MySQL连接库mysqlnd(MySQL native driver for PHP)终于和PHP一起发布了. mysqlnd的主要目的是为了解决长久以来mysql和php的license的问题. 它将作为PHP的源代码的一部分和PHP一起发布.
今天, 我要为大家介绍一个mysqlnd的插件:mysqlnd_ms, 这个插件是由mysqlnd的开发者Andrey Hristov,Ulf Wendeljohannes一起开发的, 目前发布在PECL: mysqlnd_ms

Filed in MySQL/PostgreSQL, PHP应用, 随笔
with 16 Comments