Php 发送POST数组和内存泄漏
当发送文本数据的HTTP POST数组时,例如从具有HTML表单和文本字段的网页发送文本数据时,如果我们使用以下数组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
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,。。。等