【问题标题】:PHP IIS7 VERB PUT get dataPHP IIS7 VERB PUT 获取数据
【发布时间】:2012-07-13 19:32:10
【问题描述】:

我还有一个问题类似于我在这里提出的问题: JS Ajax calling PHP and getting ajax call data

但是这次我处理的是 PUT 动词。我正在阅读以获取 php 中的数据应该使用以下内容:

file_get_contents("php://input")

资源:http://www.lornajane.net/posts/2008/accessing-incoming-put-data-from-php

但是,这似乎不起作用。我觉得它可能与 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);
                    },
                });

【问题讨论】:

    标签: php iis-7 httpverbs


    【解决方案1】:

    并非所有浏览器都支持PUTDELETE 通过$.ajaxPOSTGET 是仅有的两个被所有浏览器支持。

    作为参考,请在此处查看有关 `$.ajax 的 jQuery 文档: 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 才能进行这些修改。

    在此处查看PUT 上的 php 文档:http://php.net/manual/en/features.file-upload.put-method.php

    【讨论】:

    • 根据我的研究,目前大多数浏览器似乎都支持 ajax PUT、DELETE。但是 HTML5 已将其从标准中删除,我假设这只会影响 html 而不会影响 Javascript?
    • 我试图在 IIS7 中添加 URL 重写它不喜欢 RewriteBase / 行。你能解释一下这是做什么的吗?并且可能这将如何帮助将数据暴露给 php.ini。谢谢
    【解决方案2】:

    WooHoo 多亏了这个问题,我才明白。

    PHP get PUT request body

    由于某种原因,如果您像这样请求“PUT”的数据

    file_get_contents("php://input")
    

    在第一次读取时,它将获取所有数据。但是,像这样使用它获取数据的第二次尝试将返回 null。这不是 POST 的情况。我只需要这样做,以便我们只请求一次上述数据。

    我的理论(可能是 BS); ) 我认为它读取 PUT 请求的方式就像读取文件或流,如果有一种方法可以将读取器重新设置为开始,则可能可以获得该数据。这只是我关于它如何工作的理论我真的没有任何资源支持这种工作方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 2021-02-17
      • 2016-09-14
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多