PHP中模拟处理HTTP PUT请求的例子


Posted in PHP onJuly 22, 2014

关于HTTP PUT详细介绍请参阅此文:https://3water.com/article/52515.htm。

PHP里有$_GET,$_POST,但是没有$_PUT,所以如果需要使用它的话,则你不得不自己模拟一下:

 $_PUT = array();

if ('PUT' == $_SERVER['REQUEST_METHOD']) {

     parse_str(file_get_contents('php://input'), $_PUT);

 }

通过php://input得到的数据是raw data,所以需要用parse_str解析一下。

不过需要说明的是,当表单是enctype="multipart/form-data"类型的时候(就是上传文件那种类型),这种方法是无效的(此时 php://input为空),一旦PHP发现请求的Content-Type是multipart/form-data,就会无条件的代你处理表单数据,然后保存到$_FILES里,此时无法得到raw data,只能用一些偏门方法

以apache为例,修改httpd.conf(为了使用RequestHeader语法,请先激活header模块):

<Location "/demo.php">

     RequestHeader set Content-Type foobar

</Location>

通过重置Content-Type请求头为foobar(只要不是multipart/form-data即可),此时php://input就有数据了,不过原本应有的$_FILES数据却不存在了,所以基本上只有演示上的意义,如果想得到raw data,只能自己根据数据生成,在PEAR里有类似的实现:HTTP_Request2_MultipartBody。

浏览器一般只允许使用GET/POST方法,虽然可以通过JS来发送PUT方法,但是还得编写代码,相对而言,使用命令行下的CURL命令则显得方便很多,在开发测试时很有用,所以学习一下还是必要的:

curl -X PUT http://www.domain.com/demo.php -d "id=1" -d "title=a"

这样就会通过PUT方法发送id, title数据,测试时demo.php的代码就类似上面的php://input。
PHP 相关文章推荐
PHP中遍历stdclass object的实现代码
Jun 09 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
php实现的通用图片处理类
Mar 24 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
Apr 21 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 PHP
windows系统php环境安装swoole具体步骤
Mar 04 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 #PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 #PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 #PHP
async和DOM Script文件加载比较
Jul 20 #PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 #PHP
php多任务程序实例解析
Jul 19 #PHP
php实现斐波那契数列的简单写法
Jul 19 #PHP
You might like
sony ICF-2010 拆解与改装
2021/03/02 无线电
html中select语句读取mysql表中内容
2006/10/09 PHP
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
PHP队列用法实例
2014/11/05 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
理解javascript模块化
2016/03/28 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
python基于ID3思想的决策树
2018/01/03 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
Python计算IV值的示例讲解
2020/02/28 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
python 实现IP子网计算
2021/02/18 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
分公司经理岗位职责
2013/11/11 职场文书
电子商务应届生自我鉴定
2014/01/13 职场文书
物理专业本科生自荐信
2014/01/30 职场文书
在CSS中使用when/else的方法
2022/01/18 HTML / CSS