Press "Enter" to skip to content

深入理解PHP原理之函数(Introspecting PHP Function)

在PHP中,函数分为俩种,

  • 一种是zend_internal_function, 这种函数是由扩展或者Zend/PHP内核提供的,用'C/C++'编写的,可以直接执行的函数。
  • 另外一种是zend_user_function, 这种函数呢,就是我们经常在见的,用户在PHP脚本中定义的函数,这种函数最终会被ZE翻译成opcode array来执行
  • 本文介绍了这俩中函数在ZE层面的不同点

    Filed in PHP应用, PHP源码分析
    with 0 Comment

    揭秘TSRM(Introspecting TSRM)

    如果你曾经做过PHP的扩展,或者研究过PHP的源码,你就会看到这个东西到处都在。但是关于这个东西是什么,却鲜有资料叙及。

    对于这个东西是什么,最常见的回答就是“你不用关心这个是什么,你只要在‘这里’‘那里’用上就是了,如果编译器告诉你缺少tsrm_ls,加上就好了 ”。这个答案虽然是一种很敷衍的回答,但其实也是有一定道理的,因为Zend Engine把这个宏搞的太复杂,并且对于一个初学PHP扩展的开发者来说,了解它是什么也没有太大的益处。
    而我是一个喜欢追根究底的人。所以,如果你现在刚好比较闲,并有耐性了解这个东西是什么,那么就请继续读下去...

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

    Zend Engine幻想

    Zend Engine 将 PHP的执行机制划分为编译和执行无疑是革命性的举动。但现在看来,这似乎还未完全将这个思想贯彻到底。当前的Zend Engine虽然把编译和执行分成两个步骤来做,但这两个步骤对一个普通 .PHP脚本文件来说确是连续的。换句话说,当web服务器开始处理一个 php 脚本请求后,它将不得不每次都进行编译和执行两个步骤。很明显,对于一个开发完成不再进行经常性的修改的php脚本来说,这将是巨大的性能损失....

    Filed in PHP应用, 转载
    with 0 Comment

    汉字和Unicode码(utf-8)之间的转换(Pack/Unpack)

    保证你要转换的字符串编码为UTF8,如果不是,请iconv cnStr成utf8

    $cnStr = "中"; //utf8的中文
    //unicode
    $code = unpack("H6codes", $cnStr);
    //汉字
    $cnStr = pack("H6", $code['codes']);
    

    如果需要的是unicode的编码值, 那只要把汉字iconv成unicode再unpack就行了.
    恩, pack/unpack很强大,, 和c语言交换数据, 二进制方式的序列化,操作二进制文件.. etc...

    Filed in PHP应用
    with 5 Comments

    关于PHP你可能不知道的-PHP的事件驱动化设计

    在PHP中有这么一族函数,他们是对UNIX的V IPC函数族的包装。
    它们很少被人们用到,但是它们却很强大。巧妙的运用它们,可以让你事倍功半。
    它们包括:
    信号量(Semaphores)
    共享内存(Shared Memory)
    进程间通信(Inter-Process Messaging, IPC)
    基于这些,我们完全有可能将PHP包装成一基于消息驱动的系统。

    Filed in PHP应用
    with 50 Comments

    页面乱码问题根源浅析

    这个问题已经遇到过俩次了,就是页面中明确指明了编码是UTF8,但是显示是乱码。
    虽然知道解决方法,也知道是Apache的原因,但是一直没有去找其所以然,今天趁机,就研究了一下。
    首先, 关闭PHP配置文件php.ini中的default_charset:
    1. 页面没有指定charset , Apache配置defaultcharst gbk , 页面文件编码是utf-8.....

    Filed in PHP应用
    with 9 Comments