Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 发送POST数组和内存泄漏_Php_Arrays_Post_Memory - Fatal编程技术网

Php 发送POST数组和内存泄漏

Php 发送POST数组和内存泄漏,php,arrays,post,memory,Php,Arrays,Post,Memory,当发送文本数据的HTTP POST数组时,例如从具有HTML表单和文本字段的网页发送文本数据时,如果我们使用以下数组url\u alias[id]作为字段的名称属性,并且id为正整数,我们将使用PHP接收: [url_alias] => Array ( [2644] => url-of-product-ref-123 [1] => url-of-product-ref-224 ) 服务器(例如ApacheLinux)将如何处理P

当发送文本数据的HTTP POST数组时,例如从具有HTML表单和文本字段的网页发送文本数据时,如果我们使用以下数组
url\u alias[id]
作为字段的名称属性,并且id为正整数,我们将使用PHP接收:

[url_alias] => Array
    (
        [2644] => url-of-product-ref-123
        [1] => url-of-product-ref-224
    )
服务器(例如ApacheLinux)将如何处理POST数据?它会在内部准备一个包含2645个索引的数组,并使用一个空指针指向除index:1和index:2644之外的所有索引,还是会以其他优化方式进行?上面的格式在效率方面是否正确?它对于PHP编程来说非常舒适,但我担心内存泄漏或其他问题。

来自PHP:

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

在您的示例中,它只包含两个键,每个键都指定了一个值

手册中有关于PHP中数组行为的示例。例如,如果设置以下阵列:

$array = array(
         "a",
         "b",
    6 => "c",
         "d",
);
分配给它们的键将是
0
1
6
7

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}
请阅读手册了解更多信息

更新

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

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

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


因此,总而言之,表单数据被编码,发送到PHP,解码过程在PHP端。

不,它不会准备一个包含2645个索引的数组。。。。PHP数组是哈希映射,而不是传统的数组;此hashmap只有两个索引项,一个用于
1
,一个用于
2644
1-在php设置中,您有一个POST max设置,它限制了客户端通过POST发送的数据量。2-如果您允许足够的空间,您可以发送它,但是您必须在ajax/http请求中自己构建它,PHP不会自动为您填充2644个条目。好吧,我在这里有点困惑。这似乎很合理,但我的问题是关于HTML本身的。我的意思是,你可以用PHP、Python、C#、,。。。。如果您写入名称[id],数据是如何在HTTP协议中发送的?我从您出色的回答中理解了PHP解释,但仍然对HTTP传输本身存有疑问。您可以更进一步,并提供一个编码数据的快速示例-一般规则很复杂,但示例很简单,即标准表单编码生成
url\u别名[2644]=abc&url\u别名[1]=cde
,PHP对其进行解码,就像您编写了
$\u POST['url\u alias'][2644]='abc'$_POST['url_alias'][1]='cde'感谢您的澄清。我终于明白了为什么在使用Curl时,数据是通过POST发送的,但您将数据格式化为:var1=data1&var2=data2,。。。等