日期:2012-04-30  浏览次数:20473 次

对于PHP的中的数据来源, 不外乎有俩种:

  1. 1. 来自代码中

对于代码中的变量(也就是直接量)来说, 变量分配/赋值在编译期, 活跃在执行器, 在请求关闭期被销毁.对于这些变量来说, 使用APC进行Opcode缓存, 则会缓存这部分变量的值.

而对于来自外部的变量, 变量分配/赋值在编译器后, 执行期前, 在请求关闭期被销毁,对于这些变量来说, 使用APC进行OpCode缓存, 是不会被缓存的.

今天就着重关注下外部变量的一个部分,GET来的数据的整个生命周期.

假设, 有如下请求到来:

     

而, 在index.php中:

  1. <?php
  2.      $name      =

    对于PHP的中的数据来源, 不外乎有俩种:

    1. 1. 来自代码中

    对于代码中的变量(也就是直接量)来说, 变量分配/赋值在编译期, 活跃在执行器, 在请求关闭期被销毁.对于这些变量来说, 使用APC进行Opcode缓存, 则会缓存这部分变量的值.

    而对于来自外部的变量, 变量分配/赋值在编译器后, 执行期前, 在请求关闭期被销毁,对于这些变量来说, 使用APC进行OpCode缓存, 是不会被缓存的.

    今天就着重关注下外部变量的一个部分,GET来的数据的整个生命周期.

    假设, 有如下请求到来:

       

    而, 在index.php中:

    ___FCKpd___2

    我们知道, 在最后的执行期, $_GET数组必然包含如下片段:

    1.      

      对于PHP的中的数据来源, 不外乎有俩种:

      1. 1. 来自代码中

      对于代码中的变量(也就是直接量)来说, 变量分配/赋值在编译期, 活跃在执行器, 在请求关闭期被销毁.对于这些变量来说, 使用APC进行Opcode缓存, 则会缓存这部分变量的值.

      而对于来自外部的变量, 变量分配/赋值在编译器后, 执行期前, 在请求关闭期被销毁,对于这些变量来说, 使用APC进行OpCode缓存, 是不会被缓存的.

      今天就着重关注下外部变量的一个部分,GET来的数据的整个生命周期.

      假设, 有如下请求到来:

         

      而, 在index.php中:

      1. <?php
      2.      $name      =

        对于PHP的中的数据来源, 不外乎有俩种:

        1. 1. 来自代码中

        对于代码中的变量(也就是直接量)来说, 变量分配/赋值在编译期, 活跃在执行器, 在请求关闭期被销毁.对于这些变量来说, 使用APC进行Opcode缓存, 则会缓存这部分变量的值.

        而对于来自外部的变量, 变量分配/赋值在编译器后, 执行期前, 在请求关闭期被销毁,对于这些变量来说, 使用APC进行OpCode缓存, 是不会被缓存的.

        今天就着重关注下外部变量的一个部分,GET来的数据的整个生命周期.

        假设, 有如下请求到来:

           

        而, 在index.php中:

        ___FCKpd___2

        我们知道, 在最后的执行期, $_GET数组必然包含如下片段:

        ___FCKpd___3

        那么, 我们今天就重点关注下, Query String是如何构建成_GET数组的(关于GET变量的生成, 请一并阅读我之前的文章: “PHP的GET/POST等大变量生成过程“):

        在请求到来时刻,php_request_startup(定义在main.c)被调用,来做初始化现场. 在这个过程中包括设置超时值,调用各个模块的请求初始化函数. 当然也包括我们关心的, 创建变量环境.

        php_hash_environment根据php.ini中的variables_order来依次初始化各个预定义大变量, 那么对于$_GET来说:

        1. ...
        2. case 'g':
        3. case 'G':
        4.      if (!_gpc_flags[2])