发送POST数组和内存泄漏

时间:2016-04-29 15:38:33

标签: php arrays post memory

发送文本数据的HTTP POST数组时,例如来自带有HTML表单和文本字段的网页,如果我们使用字段的name属性,则以下数组为url_alias[id],其中id为正数整数,我们用PHP收到:

[url_alias] => Array
    (
        [2644] => url-of-product-ref-123
        [1] => url-of-product-ref-224
    )

服务器(例如Apache Linux)如何处理POST数据?它会在内部准备一个包含2645个索引的数组,除了索引之外还有一个指向所有索引的空指针:1和索引:2644,还是以其他优化方式执行?上面的格式在效率方面是否正确 - 它对于PHP编程非常舒适,但我担心内存泄漏或其他什么。

1 个答案:

答案 0 :(得分:3)

来自PHP manual

  

PHP中的数组实际上是一个有序的映射。映射是将值与键关联的类型。此类型针对多种不同用途进行了优化;它可以被视为数组,列表(向量),哈希表(地图的实现),字典,集合,堆栈,队列,甚至更多。由于数组值可以是其他数组,因此树和多维数组也是可能的。

在您的示例中,它只包含两个键,每个键都分配了一个值。

本手册介绍了PHP中的数组如何表现。例如,如果您设置以下数组:

$array = array(
         "a",
         "b",
    6 => "c",
         "d",
);

分配的密钥为0167

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}

请阅读手册以了解更多信息。

<强>更新

您还在询问如何通过HTTP发送数组。他们(数组)不是。根据W3C规范定义的here

  

然后根据FORM元素的enctype属性指定的内容类型对表单数据集进行编码。

每个enctype都有自己的规则,这些规则太长且无法在此处列出。如果你愿意,可以在那里阅读。问题是,当PHP接收到编码数据时,它会自动解码索引形式的变量名称。

因此,为了将其包装起来,表单数据被编码,发送到PHP并且解码过程在PHP端。