file_get_contents('php://input') returning empty string with a PUT request
fastcgi, iis-8.5, php
Solution
As it turns out the problem is caused by the Helicon Ape module (a module for supporting Apache .htaccess and .htpasswd configuration files). Removing this module fixes the problem, but I still don't know why it would interfere with PUT requests. I guess I'll have to post a topic on their forum with this issue.
Problem
After moving one of our websites from Linux with Apache to Windows with IIS (8.5) running PHP 5.6 via FastCGI, we've run into the problem that `file_get_contents('php://input')` returns an empty string for PUT requests. I've created the following test: ``` <?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> ``` Which results in: POST: Working PUT: Not working What could be causing this?