Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP在同一服务器上执行子请求_Php_Html_Rest - Fatal编程技术网

使用PHP在同一服务器上执行子请求

使用PHP在同一服务器上执行子请求,php,html,rest,Php,Html,Rest,我的服务器上有一个现有的REST应用程序。 例如,如果使用DELETE方法向“/users/3”发送请求,它将删除id为3的用户 但是现在我想为这个应用程序创建一个HTML“客户端”。例如,有一个HTML表单,当您提交它时,用户将被删除。 不幸的是,您无法编写,因为表单只支持GET和POST。即使你可以,我希望用户被重定向到“操作成功”或“出现错误”页面,这是不可能的 我考虑过使用AJAX,但我需要支持停用Javascript的[insert Injuous comment here] 我可以修

我的服务器上有一个现有的REST应用程序。 例如,如果使用DELETE方法向“/users/3”发送请求,它将删除id为3的用户

但是现在我想为这个应用程序创建一个HTML“客户端”。例如,有一个HTML表单,当您提交它时,用户将被删除。 不幸的是,您无法编写
,因为表单只支持GET和POST。即使你可以,我希望用户被重定向到“操作成功”或“出现错误”页面,这是不可能的

我考虑过使用AJAX,但我需要支持停用Javascript的[insert Injuous comment here]

我可以修改应用程序,以便使用
method=DELETE&redirect=/successpage&redirectfail=/failpage
发送POST请求,但这将花费大量时间

有没有一种方法可以将POST请求发送到PHP页面,PHP页面会将其转换为真实的请求,然后解释我的应用程序返回的状态代码,并执行适当的重定向

多谢各位


编辑:我没有为应用程序使用任何框架。这在一开始是一个非常简单的应用程序,随着时间的推移,它变得越来越复杂

您可以使用PHP的HttpRequest::send来实现这一点。您不能通过表单直接发送它,但是您可以编写一个PHP脚本来响应发送html表单


为什么不只是:
它会将请求发送到自定义页面(信息是在操作中而不是在帖子中发送的)。“删除”来自您的/users/3。

Be非常小心-在使用基于文件的会话时,执行自我请求可能会导致死锁。父脚本将加载/锁定会话,然后对另一个脚本执行子请求,该脚本将尝试启动会话本身。父脚本已锁定会话,因此子请求将挂起,直到会话可用。。。但是会话将永远不可用,因为父级正在等待子请求完成。

这可以使用REST API完成:

请参阅
CURLOPT_CUSTOMREQUEST
选项:

执行请求时使用的自定义请求方法,而不是“GET”或“HEAD” HTTP请求。这对于执行“删除”或其他更模糊的操作非常有用 HTTP请求。有效值是“GET”、“POST”、“CONNECT” 等等i、 不要在这里输入整个HTTP请求行。对于 实例中,输入“GET/index.html HTTP/1.0\r\n\r\n”将是 不对

例如:

$ch = curl_init('http://localhost/upload.php');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');    
curl_exec($ch);

因此,在表单发布到表单的目标文件后,将在该表单的目标文件中执行此操作。

您可以发布到/users/3,但在表单中包含一个隐藏字段:

<input type="hidden" name="_method" value="delete">


然后在脚本中,您只需检查它是否存在,并删除它,然后相应地运行脚本。这种方法的优点是,添加“put”也变得很容易,因为您只需更改表单中的值。

您是否在为PHP应用程序使用框架?哪个?这将使用
HTTP\u METH\u DELETE
常量作为方法。谢谢,我接受cURL答案,因为它与PHPAssuming一起提供。这是一个RESTful应用程序,状态(会话)仅存在于客户端。nikc是对的,我使用HTTP身份验证。不管怎样,谢谢你提供的信息,我不会想到的。我忘了谈论它,但这是另一个不使用表单发送POST-requestsah的理由,这个答案对我帮助很大!