gpt4 book ai didi

PHP开发服务器: $HTTP_RAW_POST_DATA is not populating $_POST. ..怎么来的?

转载 作者:行者123 更新时间:2023-11-30 05:47:54 27 4
gpt4 key购买 nike

我对以下内容有些困惑,感谢您的帮助。我已经删除了这个错误检查示例的错误检查代码...

我正在运行 PHP 5.4.14 并使用 PHP 服务器...

编辑:感谢 Álvaro 的帮助,我现在可以看到问题是 $HTTP_RAW_POST_DATA 确实命中了 PHP 开发服务器,但由于某种原因它是不用于填充 $_POST

当我单击表单提交按钮时调用的 JavaScript 片段(取自真实代码并在此处进行了简化)是...

xmlhttp = new XMLHttpRequest();

<snip>
params =
"forename=" + encodeURIComponent(form.forename.value) + "&" +
"surname=" + encodeURIComponent(form.surname.value) + "&" +
"nonce=" + encodeURIComponent(form.nonce.value);


<snip>
xmlhttp.open("POST", url, false);

<snip>
if (xmlhttp.overrideMimeType)
{
xmlhttp.overrideMimeType('text/html');
}
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");

alert(params);
xmlhttp.send(params);

alert 我可以看到参数没问题。

然后 POST 请求正确命中我的脚本,但是 $_REQUEST 数组(以及 $_POST)的错误日志给了我一个空数组。 $_REQUEST/_POST 的错误日志在我输入脚本后立即完成。

我的脚本回复并且 javascript 可以获取回复...当然我的脚本只能返回一个错误代码...doh。

知道为什么会这样吗?

编辑:感谢 Álvaro G. Vicario 到目前为止的帮助。现在我可以看到请求确​​实使浏览器正常。

Request URL:http://localhost:8000/php_database/search_member.php
Request Method:POST
Status Code:200 OK
Request Headers
POST /php_database/search_member.php HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Content-Length: 69
Origin: http://localhost:8000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
Content-type: application/x-www-form-urlencoded
Accept: */*
Referer: http://localhost:8000/php_database/db_search.php
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: PHPSESSID=954ebbfadb841ef659a3961a44d715871bdedbaa
Form Data
forename=ss&surname=dd&nonce=6c3e75f500dffdbfefe95d91710432dd8fd23fab
Response Headers
HTTP/1.1 200 OK
Host: localhost:8000
Connection: close
X-Powered-By: PHP/5.4.14
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-type: text/xml

PHP 脚本运行...脚本的前两行是...

<?php
$DEBUG = TRUE;
if($DEBUG){ error_log("\n\n\n", 0); error_log("\n\n> SEARCH MEMBER SCRIPT", 0); }
error_log(print_r($_REQUEST, TRUE), 0);

记录输出...

 > SEARCH MEMBER SCRIPT
[Mon May 27 15:42:22 2013] Array
(
)

如果我为 $_POST 添加另一个打印,同样...

如果我遵循...评论并让我的脚本打印出一些全局变量...

我得到以下内容

array(0) {
}
array(0) {
}
array(0) {
}
array(25) {
["DOCUMENT_ROOT"]=>
string(7) "C:\TJJT"
["REMOTE_ADDR"]=>
string(3) "::1"
["REMOTE_PORT"]=>
string(5) "59543"
["SERVER_SOFTWARE"]=>
string(29) "PHP 5.4.14 Development Server"
["SERVER_PROTOCOL"]=>
string(8) "HTTP/1.1"
["SERVER_NAME"]=>
string(9) "localhost"
["SERVER_PORT"]=>
string(4) "8000"
["REQUEST_URI"]=>
string(31) "/php_database/search_member.php"
["REQUEST_METHOD"]=>
string(4) "POST"
["SCRIPT_NAME"]=>
string(31) "/php_database/search_member.php"
["SCRIPT_FILENAME"]=>
string(38) "C:\TJJT\php_database\search_member.php"
["PHP_SELF"]=>
string(31) "/php_database/search_member.php"
["HTTP_HOST"]=>
string(14) "localhost:8000"
["HTTP_CONNECTION"]=>
string(10) "keep-alive"
["HTTP_CONTENT_LENGTH"]=>
string(2) "75"
["HTTP_ORIGIN"]=>
string(21) "http://localhost:8000"
["HTTP_USER_AGENT"]=>
string(108) "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36"
["HTTP_CONTENT_TYPE"]=>
string(33) "application/x-www-form-urlencoded"
["HTTP_ACCEPT"]=>
string(3) "*/*"
["HTTP_REFERER"]=>
string(48) "http://localhost:8000/php_database/db_search.php"
["HTTP_ACCEPT_ENCODING"]=>
string(17) "gzip,deflate,sdch"
["HTTP_ACCEPT_LANGUAGE"]=>
string(14) "en-US,en;q=0.8"
["HTTP_COOKIE"]=>
string(50) "PHPSESSID=b1e2eb2ba3d687bfeadee6bc17e1b994c214cd3a"
["REQUEST_TIME_FLOAT"]=>
float(1369666751.2246)
["REQUEST_TIME"]=>
int(1369666751)
}
string(75) "forename=xfvz&surname=zxcvzx&nonce=276083038fdd9a932ff06b94e5786fdd840873a4"

在上面的底部我可以清楚地看到...

string(75) "forename=xfvz&surname=zxcvzx&nonce=276083038fdd9a932ff06b94e5786fdd840873a4"

哇。所以 $HTTP_RAW_POST_DATA 确实命中了 PHP 开发服务器...但由于某些原因,它没有用于填充 $_POST

最佳答案

您的客户端代码正在发送一个 POST 请求,其中(显然)预期的数据作为请求正文,信息到达 PHP。但是,信息最终在 $HTTP_RAW_POST_DATA 而不是 $_POST 中。

always_populate_raw_post_data directive 的手册页解释这个:

Always populate the $HTTP_RAW_POST_DATA containing the raw POST data. Otherwise, the variable is populated only with unrecognized MIME type of the data. However, the preferred method for accessing the raw POST data is php://input. $HTTP_RAW_POST_DATA is not available with enctype="multipart/form-data".

这提供了一个可能的解释:PHP 无法识别 Content-Type 请求 header 。

PHP 错误跟踪器 (POST values in Google Chrome XHR) 中有一份报告建议了此解释。原因可能是谷歌浏览器做了一些与其他浏览器不同的事情,PHP 的内置服务器无法处理它。我认为您应该遵循这一研究方向。

关于PHP开发服务器: $HTTP_RAW_POST_DATA is not populating $_POST. ..怎么来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com