当前位置: 首页 > 面试题库 >

如何在Apache2和PHP中启用和使用HTTP PUT和DELETE?

申屠乐池
2023-03-14
问题内容

它应该是如此简单。我已经跟踪了所有可以找到的教程和论坛,但是无法正常工作。我只想在Apache2上用PHP构建RESTful API。

在我的VirtualHost指令中,我说:

<Directory />
    AllowOverride All
    <Limit GET HEAD POST PUT DELETE OPTIONS>
        Order Allow,Deny
        Allow from all
    </Limit>
</Directory>

但是我向服务器发出的每个PUT请求都得到了不支持的405方法

有人提倡使用Script指令,但是由于我使用的是mod_php(而不是CGI),所以我不明白为什么会这样。

人们提到使用WebDAV,但在我看来这似乎太过分了。毕竟,我不需要DAV锁定,DAV文件系统等。我要做的就是将请求传递给PHP脚本并自己处理一切。我只想为干净的语义启用PUT和DELETE。


问题答案:

您无需配置任何内容。只要确保请求映射到您的PHP文件并使用带有路径信息的请求即可。例如,如果您在根目录中handler.php具有以此内容命名的文件:

<?php

var_dump($_SERVER['REQUEST_METHOD']);
var_dump($_SERVER['REQUEST_URI']);
var_dump($_SERVER['PATH_INFO']);

if (($stream = fopen('php://input', "r")) !== FALSE)
    var_dump(stream_get_contents($stream));

以下HTTP请求将起作用:

Established connection with 127.0.0.1 on port 81
PUT /handler.php/bla/foo HTTP/1.1
Host: localhost:81
Content-length: 5
 
boo
HTTP/1.1 200 OK
Date: Sat, 29 May 2010 16:00:20 GMT
Server: Apache/2.2.13 (Win32) PHP/5.3.0
X-Powered-By: PHP/5.3.0
Content-Length: 89
Content-Type: text/html
 
string(3) "PUT"
string(20) "/handler.php/bla/foo"
string(8) "/bla/foo"
string(5) "boo
"
Connection closed remotely.

您可以使用MultiViews隐藏“php”扩展名,也可以使用mod_rewrite使URL完全符合逻辑。



 类似资料:
  • 我已经用在我的机器上安装了和。当我在终端中点击时,它返回: PHP7.0。4-7ubuntu2。1(cli)(NTS)版权所有(c)1997-2016 PHP Group Zend Engine v3。0.0,版权所有(c)1998-2016 Zend Technologies与Zend OPcache v7。0.6-dev,版权所有(c)1999-2016,由Zend Technologies出

  • (网上有人提到这一点,但没有一个解决方案奏效。)我希望能够从PHP脚本中使用shell_exec和exec。 含义,用途: 或者 根据我在网上找到的链接(http://forums.cpanel.net/f5/enable-shell_exec-one-user-109601.html),一种方法是在VirtualHost下添加指令: 但是,当我查看配置文件,试图重新启动网络服务器,我得到: 并且

  • 问题内容: 我的问题很基本。 我没有找到任何例子来满足我的需求,究竟和平均在PHP?他们只是给出一个示例- 序列化数组并以无法解释的格式显示输出。很难理解其术语所经过的基本概念。 编辑: 输出: 我不明白第二个输出。除此之外,有人可以举例说明在使用它之前我需要序列化php数组的情况吗? 问题答案: 一个PHP数组或对象或其他 复杂的数据结构 不能在 运行的PHP脚本 外传输或存储或以其他方式使用。

  • 如何正确使用preg_matchfile_get_content?我有一个用户可以登录的表单,如果用户输入了错误的信息,file_get_contents内的默认回声将被替换为使用preg_match但它不工作。 我有一个PHP代码片段,但我只得到一个白色的空白页面。

  • 我使用最新的PHP软件包,https://launchpad.net/~ondrej/存档/ubuntu/php。 当我构建和安装OCI8扩展时,一切看起来都正常,但是尽管在PHP-FPM配置中启用了该扩展,它的存在并没有反映在的输出中。 以下要点详细说明了我用于配置、构建和安装OCI8 PHP扩展的确切过程: https://gist.github.com/cbj4074/fa761f60b6f

  • 我有一个带有Debian7.8(wheezy)、Apache2WebServer和Tomcat7的vServer。 现在我要将apache2 webserver连接到tomcat7,以便启动我的webapp(就像)。 事情,我到目前为止所做的: > 启用了proxy_http,可以在下找到 我的文件如下所示 我的如下所示 我错过了什么?