【发布时间】:2012-12-10 02:12:30
【问题描述】:
PayPal 的 PHP IPN 侦听器示例代码在顶部有以下注释/代码:
// reading posted data from directly from $_POST causes serialization
// issues with array data in POST
// reading raw POST data from input stream instead.
$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
$keyval = explode ('=', $keyval);
if (count($keyval) == 2)
$myPost[$keyval[0]] = urldecode($keyval[1]);
}
有人能解释一下这条评论指的是什么序列化问题吗?虽然我可以这样做,但如果知道为什么要这样做,我会更自在。
【问题讨论】:
-
不确定这在上下文中意味着什么,但
$_POST并不总是包含与php://input相同的内容。例如:key=val1&key=val2将导致key在$_POST数组中只有一个条目。而且,php://input是只读的,而$_POST不是。 -
查看我放置的测试页面,果然
$raw_post_array将包含两个key条目,在一个索引数组中。但是,示例代码的其余部分最终将原始数据解析为数组。比较这两个数组,它们的自定义$myPost数组与$_POST相同。即:保留最后声明的$key = 'val2'。 -
为什么在世界中他们这样做而不是仅仅使用
parse_str?他们可能指的是它所做的一些奇怪的事情吗?毕竟,它使用生成$_GET和$_POST的相同代码... -
示例代码将是最糟糕的!
-
我在 paypal 找到的一些代码是多余的。您可以使用
if(get_magic_quotes_gpc())和curl_setopt_array()。
标签: php paypal-ipn