【发布时间】:2021-09-20 11:59:35
【问题描述】:
好的,事情是这样的: 我正在配置一个新的 SOAP 服务器,我有一种测试它的方法,(由其他人提供,并且可以与旧服务器一起使用),所以我知道测试人员很好。 为了跟踪问题我做了一个测试,在索引文件的开头放几行知道发生了什么,然后我发现我使用测试时的请求方法是“POST”,还有$raw_post_data和$ _POST 为空。 使用的 PHP 版本是 5.6.40。 (我使用 PHP_fpm 运行多个版本) variables_order字符串包含P,enable_post_data_reading开启,post_max_size为2048M,upload_max_filesize,apache服务已重启。 我事件检查以删除 de .htaccess 文件以避免重定向。 但我得到的只是到处都是空字符串。测试线 (我保证会在我开始工作时封装“php://input”的读取)
测试代码:
<?php
$raw_post_data = file_get_contents('php://input');
$logfile = fopen('path/to/log/file.log',"a");
fputs($logfile, "request method: ".$_SERVER['REQUEST_METHOD'].PHP_EOL);
foreach ($_POST as $key => $value){
fputs($logfile, "{$key} = {$value}\r\n");
}
fputs($logfile, "request: ".$raw_post_data.PHP_EOL);
fputs($lofgile, ' ****** '.PHP_EOL);
fclose($logfile);
以上几行,用同样的方法在旧服务器中发布,在新服务器中只得到空字符串。
输入是一个 XML 文件,其中包含一些活动的所有数据,该文件在较旧的服务器上运行良好,所以我知道这与编码和一些识别数据无关。
编辑:我已经在 PHP 7.4 中对其进行了测试,但仍然存在同样的问题(我正在使用具有多个 PHP 版本的 PHP-FPM,因此只需更改 .htaccess 以指向处理程序)
【问题讨论】:
-
您的意见是什么? POST 可能有点棘手,具体取决于您发送的数据格式,即JSON、表单编码、原始、...
-
@waterloomatt 添加了有关输入、一些标识数据(用户和密码)和 XML 文件的详细信息。
-
$raqw_post_data 复制/粘贴错误?另外,请打开错误报告并报告任何警告/错误 - stackoverflow.com/a/21429652/296555
-
"使用的 PHP 版本是 5.6.40" - 还是?为什么?
-
打开错误报告很重要,因为它可能是由服务器设置引起的,例如默认为 1000 的 max_input_vars。打开错误报告后,您将看到警告被抛出。此外,正如之前的评论提到的那样,PHP 5.6 已经过时并且不再受支持。你现在真的应该使用 8+。