Чтение данных из HTTP PUT - PullRequest
       34

Чтение данных из HTTP PUT

3 голосов
/ 25 июля 2011

В настоящее время я внедряю веб-сервис RESTful, который передает XML с использованием CodeIgniter и REST Phil Sturgeon .Теперь я застрял в том, как читать XML из HTTP PUT.Это то, что я сделал.

На стороне клиента:

$(function(){
    // Bind a click event to the 'ajax' object id
    $("#new_user").click(function(evt){
        // JavaScript needs totake over. So stop the browser from redirecting the page
        evt.preventDefault();
        var str = '<?xml version="1.0" encoding="UTF-8"?><xml><name>'+$("#txtname").val()+'</name><email>'+$("#txtemail").val()+'</email></xml>';

        // Ajax request to get the data
        $.ajax({
            // URL from the link that was clicked on
            url: $(this).attr("href"),
                        type: "put",
                        contentType: "application/xml",
                        processData: false,
                        data: str,
            success: function(data, textStatus, jqXHR){
                //alert('Successful AJAX request!');
                                   //var items = parseXml(data);
                                   //printXml(items);
            },
            // Failed to load request. This could be caused by any number of problems like server issues, bad links, etc.
            error: function(jqXHR, textStatus, errorThrown){
                alert('Oh no! A problem with the Ajax request!');
            }
        });
    });
});

На стороне сервера:

public function users_put(){
    $input = file_get_contents('php://input');
    print_r($input);
}

Он ничего не печатает.Приведенный выше код и функция JavaScript хорошо работают в HTTP POST.

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

В руководстве есть хороший справочник для этого: http://php.net/manual/en/features.file-upload.put-method.php

Вы не можете обрабатывать запросы PUT без изменения настроек демона HTTP.


Если вы используете Apache и имеетеДля доступа к mod_rewrite создайте файл .htaccess в корневой папке, в которую вы помещаете PUT, что-то вроде:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ handler.php?uri=$1 [L,QSA]

Но детали зависят от того, какой демон HTTP (Apache, IIS, lighttpd и т. д.) и какой PHPрамки вы используете.

0 голосов
/ 28 июля 2011

Используйте POST.Ваша заявка должна определить, является ли запрос «PUT» или нет.Если вы укажете идентификатор объекта, который вы изменяете, вы можете предположить, что это запрос «PUT».Я не уверен, как CodeIgniter справляется с этим, но я знаю, что Zend Framework автоматически направляет к putAction, когда указан идентификатор.(например / account / 5)

...