Lost an hour today to trying to debug Ecto posting to this weblog (if you’re not using Ecto, you should consider it).
I was constantly getting this error:
XML-RPC server accepts POST requests only
Finally I wrote up a nice little support ticket for Dreamhost with all the details. Surprisingly I got the fix back in relatively short order.
I was wondering what the problem with WordPress was. It turned out to be a PHP 5.2.2 bug. The file xmlrpc.php is broken under PHP 5.2.2. As WordPress is the weblog system in widest use in the entire world, it would be nice if the PHP team would get with the real world and debug their releases before rolling them out.
The solution, for now, is to edit the xmlrpc.php file in your WordPress installation and add the following code:if (phpversion()=="5.2.2") $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input");
The beginning of my xmlrpc.php file looks like this:define('XMLRPC_REQUEST', true); // Some browser-embedded clients send cookies. We don't want them. $_COOKIE = array(); if (phpversion()=="5.2.2") $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input");
And XMLRPC is now working again.
I made this fix and now Ecto works a charm again. Alas, this isn’t the first time a PHP error has brough XMLRPC/Ecto down on WordPress weblogs.
A number of things went wrong here:
- the PHP developers dropped the ball on their debugging
- Dreamhost dropped the ball rolling out 5.2.2 with such a bug in it
- Dreamhost dropped the ball a final time by not proactively notifying all its customers who are running WordPress weblogs about this bug
I’ve made this post as I was unable to find any useful information about the XML-RPC serve accepts POST requests only bug when searching Google for that phrase plus WordPress and plus Ecto. I hope other unfortunates find this post more quickly than I found the solution.