gpt4 book ai didi

php - 如何在 Apache 2.2 上使用 PHP 5.4 从 PUT 请求中获取数据

转载 作者:搜寻专家 更新时间:2023-10-31 21:34:04 26 4
gpt4 key购买 nike

我已经尝试了所有可能发现对其他人有用的方法,但没有成功。

这是我的 PHP 代码:

parse_str(file_get_contents("php://input"), $put_data);
echo "foo is: " . $put_data['foo'] . "\n";

无论我尝试什么,我都会得到“foo is:”

我认为这是 Apache 特有的,因为在 nginx 服务器上运行相同的脚本会显示预期的“foo is: bar”

我尝试过但结果没有改变的事情:

将我的 Content-Type header 更改为 application/x-www-form-urlencoded。

将 LimitExcept 指令添加到我的 apache 配置中,就像这样(是的,我在进行更改后重新启动)

<Directory "/MyApp/Directory/">
Allow From All
AllowOverride All
<LimitExcept GET POST PUT OPTIONS DELETE>
Deny from All
</LimitExcept>
</Directory>

像这样使用 stream_get_contents:

$put_data = fopen("php://input", "r");
$data = stream_get_contents($put_data);
echo "data is: " . $data;
fclose($put_data);

这里是响应头:

Date: Wed, 11 Jun 2014 04:03:09 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.24 mod_ssl/2.2.26 OpenSSL/0.9.8y
X-Powered-By: PHP/5.4.24
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-Length: 7
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8

感谢任何可以提供帮助的人。几个小时以来,我一直在用这个把我剩下的头发拉出来。

最佳答案

我已经测试了您的代码,它在我的设置上运行良好,与您的设置非常相似。我唯一能想到的是:

Note: A stream opened with php://input can only be read once; the stream does not support seek operations.

发件人:http://www.php.net/manual/en/wrappers.php.php

尝试在您的代码中找到一个已经在读取“php://input”的位置。如果您正在使用某种框架,这将是我的猜测。我会在整个项目文件中搜索“php://input”以找出答案。

如果情况并非如此,请粘贴以下结果:

print_r(file_get_contents("php://input"));exit;

var_dump(file_get_contents("php://input"));exit;

附言来自 PHP 手册网站的注释的其余部分如下:

However, depending on the SAPI implementation, it may be possible to open another php://input stream and restart reading. This is only possible if the request body data has been saved. Typically, this is the case for POST requests, but not other request methods, such as PUT or PROPFIND.

SAPI 实现可能是您的 nginx 和 Apache 行为之间的区别。

关于php - 如何在 Apache 2.2 上使用 PHP 5.4 从 PUT 请求中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24154503/

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