ГЛАГОЛ PHP IIS7 PUT получить данные

У меня есть еще один вопрос, похожий на вопрос, который я задал здесь: JS Ajax вызов PHP и получение данных вызова ajax

Однако на этот раз я имею дело с глаголом PUT. Я читал, чтобы получить данные в php, нужно использовать следующее:

file_get_contents("php://input")

Ресурс: http://www.lornajane.net/posts/2008/accessing-incoming-put-data-from-php

Однако для put эта доза, похоже, не работает. Я чувствую, что это может иметь какое-то отношение к IIS 7, возможному удалению данных? .. У меня был установлен webDav, и мне пришлось удалить его, чтобы разрешить глагол put, мне было интересно, есть ли что-то еще в IIS, что может помешать данным анализируется на уровне сервера?

Мой запрос ajax выглядит следующим образом

                var data = '{"storyId":"2","storyName":"a Changed Story.","authorId":"5", "published":"1"}'; 

                $.ajax({
                    type: "PUT",
                    url: BaseUrl + "Story/2",   
                    data: data,
                    success: function(data){
                        console.log(data);
                    },
                    error: function(request){
                        console.log(request);
                    },
                });

person MrB    schedule 13.07.2012    source источник


Ответы (2)


PUT и DELETE через $.ajax поддерживаются не во всех браузерах. POST и GET — единственные два, которые поддерживаются всеми браузерами.

Для справки, проверьте документацию jQuery по `$.ajax здесь: http://api.jquery.com/jQuery.ajax/

Кроме того, вам необходимо изменить настройки вашего демона HTTP, чтобы разрешить вашему скрипту доступ к put. Это делается путем добавления следующего в корневой файл .htaccess:

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

Обратите внимание, что для внесения этих изменений у вас должен быть доступ к mod_rewite.

См. документацию php по PUT здесь: http://php.net/manual/en/features.file-upload.put-method.php

person Austin    schedule 13.07.2012
comment
Из моего исследования видно, что большинство современных браузеров поддерживают ajax PUT, DELETE. Однако HTML5 удалил его из стандартов. Я предполагаю, что это влияет только на html, а не на Javascript? - person MrB; 14.07.2012
comment
Я попытался добавить URL Rewrite в IIS7, ему не понравилась строка RewriteBase/. Не могли бы вы объяснить немного больше, что это делает? И, возможно, как это поможет предоставить данные в файл php. Спасибо - person MrB; 14.07.2012

WooHoo Я понял это благодаря этому вопросу.

PHP получает тело запроса PUT

По какой-то причине, если вы запрашиваете данные для «PUT», как это

file_get_contents("php://input")

При первом чтении он получит все данные. Однако вторая попытка получить данные, используя его таким образом, вернет значение null. Это не относится к POST. Мне просто нужно было сделать так, чтобы мы запрашивали данные, подобные приведенным выше, только один раз.

МОЯ теория (может быть BS); ) Я думаю, что то, как он читает запрос PUT, похоже на чтение файла или потока, если есть способ снова запустить считыватель, вероятно, мог бы получить эти данные. Это всего лишь моя теория о том, как это работает. На самом деле у меня нет никаких ресурсов, подтверждающих, что это работает именно так.

person MrB    schedule 14.07.2012