file_get_contents('php://input') 通过 PUT 请求返回空字符串
file_get_contents('php://input') returning empty string with a PUT request
将我们的一个网站从 Linux 使用 Apache 移动到 Windows 使用 IIS (8.5) 运行ning PHP 5.6 通过 FastCGI 后,我们 运行 进入 file_get_contents('php://input')
returns PUT 请求的空字符串的问题。
我创建了以下测试:
<?php
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
die(file_get_contents('php://input'));
}
?>
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
</head>
<body>
<h2>POST:</h2>
<div id="post"></div>
<h2>PUT:</h2>
<div id="put"></div>
<script>
$.ajax({
url: '?',
data: 'Working',
type: 'POST'
}).then(function(response) {
$('#post').html(response || 'Not working');
});
$.ajax({
url: '?',
data: 'Working',
type: 'PUT'
}).then(function(response) {
$('#put').html(response || 'Not working');
});
</script>
</body>
</html>
这导致:
POST:
Working
PUT:
Not working
这可能是什么原因造成的?
事实证明问题是由 Helicon Ape 模块(支持 Apache .htaccess 和 .htpasswd 配置文件的模块)引起的。
删除这个模块可以解决问题,但我仍然不知道为什么它会干扰 PUT 请求。我想我必须 post 在他们的论坛上讨论这个问题。
将我们的一个网站从 Linux 使用 Apache 移动到 Windows 使用 IIS (8.5) 运行ning PHP 5.6 通过 FastCGI 后,我们 运行 进入 file_get_contents('php://input')
returns PUT 请求的空字符串的问题。
我创建了以下测试:
<?php
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
die(file_get_contents('php://input'));
}
?>
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
</head>
<body>
<h2>POST:</h2>
<div id="post"></div>
<h2>PUT:</h2>
<div id="put"></div>
<script>
$.ajax({
url: '?',
data: 'Working',
type: 'POST'
}).then(function(response) {
$('#post').html(response || 'Not working');
});
$.ajax({
url: '?',
data: 'Working',
type: 'PUT'
}).then(function(response) {
$('#put').html(response || 'Not working');
});
</script>
</body>
</html>
这导致:
POST:
Working
PUT:
Not working
这可能是什么原因造成的?
事实证明问题是由 Helicon Ape 模块(支持 Apache .htaccess 和 .htpasswd 配置文件的模块)引起的。 删除这个模块可以解决问题,但我仍然不知道为什么它会干扰 PUT 请求。我想我必须 post 在他们的论坛上讨论这个问题。