这应该很简单.
我有一个脚本,在脚本中我想确定请求是通过GET还是POST方法到达.
这样做的正确方法是什么?
我正在考虑使用这样的东西
if (isset($_POST)) {
// do post
} else {
// do get
}
Run Code Online (Sandbox Code Playgroud)
但在我内心深处,我觉得这不是正确的方法.任何的想法?
问题是:我有一个在PHP服务器上运行的Web应用程序.我想为它构建一个REST api.
我做了一些研究,我发现REST api使用HTTP方法(GET,POST ...)为某些带有身份验证密钥的URI(不一定),并将信息作为HTTP响应呈现回来,信息为XML或JSON (我宁愿JSON).
我的问题是:
我读过以下内容:
超文本传输协议(HTTP)是网络的生命.每次传输文档或发出AJAX请求时都会使用它.但是,令人惊讶的是,在某些Web开发人员中,HTTP相对未知.
HTTP谓词构成了我们"统一接口"约束的主要部分,并为我们提供了与基于名词的资源相对应的动作.主要或最常用的HTTP谓词(或方法,因为它们被正确调用)是POST,GET,PUT和DELETE.
好吧,我们突然忘记了事情.
PUT并且DELETE,他们说.我只听说过POST和GET,从来没有见过类似的东西$_PUT或者$_DELETE在我曾经看到任何PHP代码经过.
这些方法(PUT)和(DELETE)是什么,如果可以在PHP中使用它们,我将如何解决这个问题.
注意:我知道这不是一个真正的问题但我总是抓住一个学习机会,如果我看到一个,并且非常想学习在PHP中使用这些方法,如果可能的话.
如何在CodeIgniter控制器类中检测HTTP方法?
编辑:
除了$_SERVER['REQUEST_METHOD']在CodeIgniter中使用之外还有其他方法吗?
如果我发出HTTP DELETE,我该如何访问PHP主体/变量?我知道如果您发布POST,您可以通过它访问它$_POST['varname'],但是如果它是DELETE而不是POST ,您如何访问它?假设这里的varname是ID.
如何检查请求是否是PHP中的回复,以下是否可以?
if (isset($_POST["submit"]))
Run Code Online (Sandbox Code Playgroud)
其中submit是name的<input type="submit" />
我现在已经进入strtoupper($_SERVER['REQUEST_METHOD'])了我的代码.
但这是strtoupper必要的电话吗?为$_SERVER['REQUEST_METHOD']保证被已经是大写吗?
所以,有一段时间我一直在使用以下内容来检查我的帖子数据是否已设置.
if( ! empty( $_POST ) ) { }
Run Code Online (Sandbox Code Playgroud)
但最近我看到很多帖子说上面的内容是"黑客",下面是正确的"更好"的方式.
if( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) { }
Run Code Online (Sandbox Code Playgroud)
到最近,我只是说我最近才找到它.正在讨论这个后来方法的所有帖子都来自2009年.编码标准有点旧,所以我觉得可以对这个主题有一个新的看法.
我明白这两种方法是不同的.第一个被认为是"hack",只检查是否已经设置了post数组,如果发出了post请求,就会发生这种情况.第二个实际上检查服务器以查看是否已发出发布请求.我想第二个可能会更安全,但如果信息被清理干净,我看不出它有多大区别.
我也看过后者仅用于PHP版本<= 4的帖子,因为此时PHP仍在使用$_REQUEST全局,这就是PHP编码器用来确定某些请求参数的来源的方式.我不确定最后一个陈述是多么准确,因为旧帖子中提出的问题与我的相同.他们使用post global而不是request.然而,这是一个比其他任何一个(2011年)更新的帖子,并且从我开始信任的来源.所以我不知道该怎么做.
检查get时该怎么办?我已经看到有几个地方说服务器请求方法在这个实例中似乎不起作用,我只能假设它是因为post superscedes get而请求方法只能容纳一个参数.所以,如果您同时发布和获取数据,您会做什么?对其中一篇帖子的评论建议使用全局请求而不是发布和获取,但我一直认为这是一个坏主意.
这是我能找到的最新资料,我在提交之前通过查看侧面的类似问题这样做了.它特别询问使用提交值来检查表单是否已通过,但它也提到了请求方法.很多似乎表明后者仍然被普遍使用.这个建议仍然有效吗?检查请求方法仍然是最佳选择吗?
PHP If 语句if (!$_POST)- 是什么!$_POST意思?
例如,在我查看的一些遗留代码中,代码如下:
<form action="paypalorders.php" method="POST">
<input type="hidden" name="orderList" value="' . $orderList . '">
<input type="submit" value="Archive">
</form>';
if (!$_POST) {
file_put_contents('/orders.txt', $output_line1);
}
Run Code Online (Sandbox Code Playgroud)
我看了一堆其他线程,但没有看到这个确切的问题,所以我试图找出它是什么。我见过像这样格式化的线程:
if(!empty($_POST)) {
Run Code Online (Sandbox Code Playgroud)
但与我正在寻找的并不完全相同。它是一样的东西,只是速记吗?我不确定,这就是我问的原因。我已经谷歌搜索并查看了一些线程,但我仍然不确定。
谢谢你。
我使用了几年前提出的另一个问题的一些代码 在表单提交中实现jQuery确认模式?
但是这个问题还远远不足以说明在回答"是"时如何提交表单而我无法使其工作.
你会看到我尝试过的所有方法(它们被注释掉了).有谁知道我在这里做错了什么?
<div id="dialog-confirm" title="Ready?">
<p>Are you sure?</p>
</div>
<form action"" id="myform" name="myform2" type="post">
<input type="submit" value="Yes" name="moveOn" />
</form>
<script>
$(function() {
$("#dialog-confirm").dialog({
resizable: false,
height:190,
autoOpen: false,
width: 330,
modal: true,
buttons: {
"Yes": function() {
//$('#myform')[0].submit();
//document.myform2.submit();
//document.getElementById("#myform").submit();
},
No: function() {
$(this).dialog("close");
}
}
});
$('#myform').submit(function() {
$("#dialog-confirm").dialog('open');
return false;
});
});
Run Code Online (Sandbox Code Playgroud) 我对RESTful PHP上的教程/示例感到困惑.他们中的大多数都在使用框架(例如Slim)并最终成为API,这使我更加困惑.在完全理解如何创建简单的RESTful PHP之前,我想首先避免所有框架和API材料.
我明白那个,
REST,它的核心,就是为工作使用正确的HTTP动词.GET,POST,PUT,DELETE都有意义,如果某些内容被描述为RESTful,那么它真正意味着所涉及的网站/应用程序都遵循这些含义.
而从PHP服务器端,我明白这是怎么我能察觉的REST请求类型,
$_SERVER['REQUEST_METHOD']
Run Code Online (Sandbox Code Playgroud)
但我的主要问题是如何通过URL将这些REST类型(GET,POST,PUT,DELETE)发送到服务器?
例如,从本教程中,
当您希望创建或更新URL标识的资源时,将使用PUT请求.例如,
然后,
DELETE应该与PUT相反; 当您要删除请求的URL标识的资源时,应该使用它.
http://restfulphp.com/clients/robin并且http://restfulphp.com/clients/anne是相同的干净URL模式.我怎么知道前者是用于PUT而后者是用于DELETE?或者,在那里我应该在表格/ HTML设置来区分它们?
当curl进来时它会变得复杂 - 它与REST网站有什么关系?
从上面的教程,
Once you have cURL installed, type:
curl -v google.com
Run Code Online (Sandbox Code Playgroud)
我应该在哪里打字?
curl如何帮助我删除或PUT?如何$_SERVER['REQUEST_METHOD']从curl中检测REST类型?
curl -v -X DELETE /clients/anne
Run Code Online (Sandbox Code Playgroud)
和
curl -v -X PUT -d "some text"
Run Code Online (Sandbox Code Playgroud)
我问的问题可能听起来很愚蠢,但如果有人能帮助我理解这些问题会很棒.
编辑:
Argg PHP cURL- 另一件让我更加困惑的事情!如果我要通过XMLHttpRequest对象发送REST请求类型,为什么还需要它?它似乎是为了与其他API提供程序进行通信,我希望在此阶段避免使用它们.
如果我可以PHP cURL …
我正在尝试PUT在php中声明HTTP 变量。这是我的代码:
<?php
${"_" . $_SERVER['REQUEST_METHOD']} = /* What should be here? */;
?>
Run Code Online (Sandbox Code Playgroud)
我试过了,var_dump($_SERVER)但其中不包含使用ajax请求发送的数据。我确定没问题$.ajax()。
php ×12
http ×3
rest ×2
api ×1
codeigniter ×1
curl ×1
forms ×1
http-delete ×1
http-method ×1
http-put ×1
jquery ×1
modal-dialog ×1